diff options
author | Reinier Zwitserloot <reinier@zwitserloot.com> | 2020-02-27 23:00:24 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-27 23:00:24 +0100 |
commit | f129fa85ba992eacbada5858dcfc45f55b4026fd (patch) | |
tree | 2b58b7b18b2a73e7625a45406e2c456b5c35f705 /src/eclipseAgent | |
parent | fc04b74c67f05b1ba099275645b75e6373ac3b5a (diff) | |
parent | cf1cffa76e00216477255c62ed5a870e7da345a7 (diff) | |
download | lombok-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.java | 23 |
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; + } + } } |