aboutsummaryrefslogtreecommitdiff
path: root/src/eclipseAgent
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@zwitserloot.com>2020-02-27 23:00:24 +0100
committerGitHub <noreply@github.com>2020-02-27 23:00:24 +0100
commitf129fa85ba992eacbada5858dcfc45f55b4026fd (patch)
tree2b58b7b18b2a73e7625a45406e2c456b5c35f705 /src/eclipseAgent
parentfc04b74c67f05b1ba099275645b75e6373ac3b5a (diff)
parentcf1cffa76e00216477255c62ed5a870e7da345a7 (diff)
downloadlombok-f129fa85ba992eacbada5858dcfc45f55b4026fd.tar.gz
lombok-f129fa85ba992eacbada5858dcfc45f55b4026fd.tar.bz2
lombok-f129fa85ba992eacbada5858dcfc45f55b4026fd.zip
Merge pull request #2376 from Rawi01/extensionMethod
Set missing argumentTypes for eclipse extension methods
Diffstat (limited to 'src/eclipseAgent')
-rw-r--r--src/eclipseAgent/lombok/eclipse/agent/PatchExtensionMethod.java23
1 files changed, 23 insertions, 0 deletions
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;
+ }
+ }
}