From db80bb0a2168245dbae2e1ec565a830e92a7c684 Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Thu, 19 Nov 2020 17:36:40 +0100 Subject: [fixes #2648] Reset inference context, remove generic information copy In Java >= 8 ecj uses the inference context to resolve the generic information. This one is already set before lombok tries rewrite the method call. Simply copying the information does not cover all the different cases but reseting the inference contexts and running type inference again does. --- .../after-delombok/ExtensionMethodFunctional.java | 15 +++++++++- .../after-delombok/ExtensionMethodGeneric.java | 33 ++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 test/transform/resource/after-delombok/ExtensionMethodGeneric.java (limited to 'test/transform/resource/after-delombok') diff --git a/test/transform/resource/after-delombok/ExtensionMethodFunctional.java b/test/transform/resource/after-delombok/ExtensionMethodFunctional.java index bd301543..fb58eb91 100644 --- a/test/transform/resource/after-delombok/ExtensionMethodFunctional.java +++ b/test/transform/resource/after-delombok/ExtensionMethodFunctional.java @@ -1,5 +1,8 @@ -import java.util.function.Function; import java.util.function.Consumer; +import java.util.function.Function; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; class ExtensionMethodFunctional { public void test() { @@ -7,6 +10,8 @@ class ExtensionMethodFunctional { test = ExtensionMethodFunctional.Extensions.map(test, s -> ExtensionMethodFunctional.Extensions.reverse(s)); ExtensionMethodFunctional.Extensions.consume(test, s -> System.out.println("1: " + s), s -> System.out.println("2: " + s)); ExtensionMethodFunctional.Extensions.consume(test, System.out::println, System.out::println); + ExtensionMethodFunctional.Extensions.toList(Stream.of("a", "b", "c").map(String::toUpperCase)); + List i2 = ExtensionMethodFunctional.Extensions.toList2(Stream.of("a", "b", "c").map(String::toUpperCase)); } static class Extensions { @@ -24,5 +29,13 @@ class ExtensionMethodFunctional { consumer[i].accept(o); } } + + public static List toList(Stream stream) { + return (List) stream.collect(Collectors.toList()); + } + + public static List toList2(Stream stream) { + return null; + } } } diff --git a/test/transform/resource/after-delombok/ExtensionMethodGeneric.java b/test/transform/resource/after-delombok/ExtensionMethodGeneric.java new file mode 100644 index 00000000..8559b7ff --- /dev/null +++ b/test/transform/resource/after-delombok/ExtensionMethodGeneric.java @@ -0,0 +1,33 @@ +import java.util.List; +import java.util.Map; + +class ExtensionMethodGeneric { + public void test() { + List stringList = null; + List numberList = null; + ExtensionMethodGeneric.Extensions.test(stringList); + ExtensionMethodGeneric.Extensions.test(stringList, numberList); + ExtensionMethodGeneric.Extensions.test(ExtensionMethodGeneric.Extensions.test(stringList, stringList), numberList); + 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; + } + } +} -- cgit