From 80867c34d5abfb69d9285a98c5f4a6d99644f146 Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Thu, 19 Nov 2020 17:36:40 +0100 Subject: [PATCH] [fixes #2648] Remove copy of generic information --- .../eclipse/agent/PatchExtensionMethod.java | 10 ------ .../ExtensionMethodGeneric.java | 29 ++++++++++++++++ .../after-ecj/ExtensionMethodGeneric.java | 34 +++++++++++++++++++ .../before/ExtensionMethodGeneric.java | 33 ++++++++++++++++++ 4 files changed, 96 insertions(+), 10 deletions(-) create mode 100644 test/transform/resource/after-delombok/ExtensionMethodGeneric.java create mode 100644 test/transform/resource/after-ecj/ExtensionMethodGeneric.java create mode 100644 test/transform/resource/before/ExtensionMethodGeneric.java diff --git a/src/eclipseAgent/lombok/eclipse/agent/PatchExtensionMethod.java b/src/eclipseAgent/lombok/eclipse/agent/PatchExtensionMethod.java index c916ca266f..7be95dc57b 100644 --- a/src/eclipseAgent/lombok/eclipse/agent/PatchExtensionMethod.java +++ b/src/eclipseAgent/lombok/eclipse/agent/PatchExtensionMethod.java @@ -58,7 +58,6 @@ import org.eclipse.jdt.internal.compiler.lookup.Binding; import org.eclipse.jdt.internal.compiler.lookup.BlockScope; import org.eclipse.jdt.internal.compiler.lookup.MethodBinding; -import org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding; import org.eclipse.jdt.internal.compiler.lookup.ProblemMethodBinding; import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding; import org.eclipse.jdt.internal.compiler.lookup.Scope; @@ -304,15 +303,6 @@ public static Object resolveType(Object resolvedType, MessageSend methodCall, Bl argumentTypes.add(argumentType); } - // Copy generic information. This one covers a few simple cases, more complex cases are still broken - int typeVariables = extensionMethod.typeVariables.length; - if (typeVariables > 0 && methodCall.receiver.resolvedType instanceof ParameterizedTypeBinding) { - ParameterizedTypeBinding parameterizedTypeBinding = (ParameterizedTypeBinding) methodCall.receiver.resolvedType; - if (parameterizedTypeBinding.arguments != null && parameterizedTypeBinding.arguments.length == typeVariables) { - methodCall.genericTypeArguments = parameterizedTypeBinding.arguments; - } - } - MethodBinding fixedBinding = scope.getMethod(extensionMethod.declaringClass, methodCall.selector, argumentTypes.toArray(new TypeBinding[0]), methodCall); if (fixedBinding instanceof ProblemMethodBinding) { methodCall.arguments = originalArgs; diff --git a/test/transform/resource/after-delombok/ExtensionMethodGeneric.java b/test/transform/resource/after-delombok/ExtensionMethodGeneric.java new file mode 100644 index 0000000000..a67ce83b89 --- /dev/null +++ b/test/transform/resource/after-delombok/ExtensionMethodGeneric.java @@ -0,0 +1,29 @@ +import java.util.List; +import java.util.Map; + +class ExtensionMethodGeneric { + public void test() { + List stringList = null; + List numberList = null; + ExtensionMethodGeneric.Extensions.test(stringList, numberList); + ExtensionMethodGeneric.Extensions.test(stringList); + Integer i = ExtensionMethodGeneric.Extensions.test2(stringList); + Map map = null; + List l = ExtensionMethodGeneric.Extensions.test(map, stringList, numberList); + } + + static class Extensions { + public static List test(List obj, List list) { + return null; + } + public static K test(Map obj, K k, V v) { + return k; + } + public static T test(List list) { + return null; + } + public static U test2(List list) { + return null; + } + } +} diff --git a/test/transform/resource/after-ecj/ExtensionMethodGeneric.java b/test/transform/resource/after-ecj/ExtensionMethodGeneric.java new file mode 100644 index 0000000000..fd772d73d6 --- /dev/null +++ b/test/transform/resource/after-ecj/ExtensionMethodGeneric.java @@ -0,0 +1,34 @@ +import java.util.List; +import java.util.Map; +import lombok.experimental.ExtensionMethod; +@ExtensionMethod(ExtensionMethodGeneric.Extensions.class) class ExtensionMethodGeneric { + static class Extensions { + Extensions() { + super(); + } + public static List test(List obj, List list) { + return null; + } + public static K test(Map obj, K k, V v) { + return k; + } + public static T test(List list) { + return null; + } + public static U test2(List list) { + return null; + } + } + ExtensionMethodGeneric() { + super(); + } + public void test() { + List stringList = null; + List numberList = null; + ExtensionMethodGeneric.Extensions.test(stringList, numberList); + ExtensionMethodGeneric.Extensions.test(stringList); + Integer i = ExtensionMethodGeneric.Extensions.test2(stringList); + Map map = null; + List l = ExtensionMethodGeneric.Extensions.test(map, stringList, numberList); + } +} diff --git a/test/transform/resource/before/ExtensionMethodGeneric.java b/test/transform/resource/before/ExtensionMethodGeneric.java new file mode 100644 index 0000000000..98410d679d --- /dev/null +++ b/test/transform/resource/before/ExtensionMethodGeneric.java @@ -0,0 +1,33 @@ +import java.util.List; +import java.util.Map; + +import lombok.experimental.ExtensionMethod; + +@ExtensionMethod(ExtensionMethodGeneric.Extensions.class) +class ExtensionMethodGeneric { + public void test() { + List stringList = null; + List numberList = null; + stringList.test(numberList); + stringList.test(); + Integer i = stringList.test2(); + + Map map = null; + List l = map.test(stringList, numberList); + } + + static class Extensions { + public static List test(List obj, List list) { + return null; + } + public static K test(Map obj, K k, V v) { + return k; + } + public static T test(List list) { + return null; + } + public static U test2(List list) { + return null; + } + } +}