aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xAUTHORS1
-rw-r--r--src/eclipseAgent/lombok/eclipse/agent/PatchExtensionMethod.java23
2 files changed, 24 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
index fa0f5e1e..a2afd50c 100755
--- a/AUTHORS
+++ b/AUTHORS
@@ -28,6 +28,7 @@ Peter Grant <petercgrant@users.noreply.github.com>
Philipp Eichhorn <peichhor@web.de>
Philippe Charles <philippe.charles@nbb.be>
Rabea Gransberger <rgra@users.noreply.github.com>
+Raul Wißfeld <Rawi01@users.noreply.github.com>
Reinier Zwitserloot <reinier@zwitserloot.com>
Robbert Jan Grootjans <grootjans@gmail.com>
Robert Wertman <robert.wertman@gmail.com>
diff --git a/src/eclipseAgent/lombok/eclipse/agent/PatchExtensionMethod.java b/src/eclipseAgent/lombok/eclipse/agent/PatchExtensionMethod.java
index 5d586dff..fcc76059 100644
--- a/src/eclipseAgent/lombok/eclipse/agent/PatchExtensionMethod.java
+++ b/src/eclipseAgent/lombok/eclipse/agent/PatchExtensionMethod.java
@@ -24,6 +24,7 @@ package lombok.eclipse.agent;
import static lombok.eclipse.handlers.EclipseHandlerUtil.createAnnotation;
import java.lang.ref.WeakReference;
+import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -39,6 +40,7 @@ import lombok.eclipse.EclipseNode;
import lombok.eclipse.TransformEclipseAST;
import lombok.eclipse.handlers.EclipseHandlerUtil;
import lombok.experimental.ExtensionMethod;
+import lombok.permit.Permit;
import org.eclipse.jdt.internal.compiler.ast.ASTNode;
import org.eclipse.jdt.internal.compiler.ast.Annotation;
@@ -293,6 +295,13 @@ public class PatchExtensionMethod {
methodCall.actualReceiverType = extensionMethod.declaringClass;
methodCall.binding = fixedBinding;
methodCall.resolvedType = methodCall.binding.returnType;
+ if (Reflection.argumentTypes != null) {
+ try {
+ Reflection.argumentTypes.set(methodCall, argumentTypes.toArray(new TypeBinding[0]));
+ } catch (IllegalAccessException ignore) {
+ // ignore
+ }
+ }
}
return methodCall.resolvedType;
}
@@ -329,4 +338,18 @@ public class PatchExtensionMethod {
return new QualifiedNameReference(sources, poss, source.sourceStart, source.sourceEnd);
}
}
+
+ private static final class Reflection {
+ public static final Field argumentTypes;
+
+ static {
+ Field a = null;
+ try {
+ a = Permit.getField(MessageSend.class, "argumentTypes");
+ } catch (Throwable t) {
+ //ignore - old eclipse versions don't know this one
+ }
+ argumentTypes = a;
+ }
+ }
}