From 732c7257e1db44b83b4748c93969cd74195d416f Mon Sep 17 00:00:00 2001 From: Reinier Zwitserloot Date: Fri, 6 Mar 2020 05:24:39 +0100 Subject: [fixes #2358] self-referential generics could cause endless loops in javac. ... unfortunately eclipse's val resolver is now very slightly worse in very exotic circumstances - spent about 4 hours trying to fix it, can't figure it out, let's move on. --- .../resource/after-delombok/ValWeirdTypes.java | 1 + .../after-delombok/ValWithSelfRefGenerics.java | 14 ++++++++++++++ test/transform/resource/after-ecj/ValWeirdTypes.java | 1 + .../resource/after-ecj/ValWithSelfRefGenerics.java | 20 ++++++++++++++++++++ test/transform/resource/before/ValWeirdTypes.java | 1 + .../resource/before/ValWithSelfRefGenerics.java | 14 ++++++++++++++ 6 files changed, 51 insertions(+) create mode 100644 test/transform/resource/after-delombok/ValWithSelfRefGenerics.java create mode 100644 test/transform/resource/after-ecj/ValWithSelfRefGenerics.java create mode 100644 test/transform/resource/before/ValWithSelfRefGenerics.java (limited to 'test') diff --git a/test/transform/resource/after-delombok/ValWeirdTypes.java b/test/transform/resource/after-delombok/ValWeirdTypes.java index 8b399fe8..bc18fdac 100644 --- a/test/transform/resource/after-delombok/ValWeirdTypes.java +++ b/test/transform/resource/after-delombok/ValWeirdTypes.java @@ -37,6 +37,7 @@ public class ValWeirdTypes { final java.util.List d = upper; List unbound = lower; final java.util.List e = unbound; + final java.lang.Object f = unbound.get(0); } public void testCompound() { final java.util.ArrayList a = new ArrayList(); diff --git a/test/transform/resource/after-delombok/ValWithSelfRefGenerics.java b/test/transform/resource/after-delombok/ValWithSelfRefGenerics.java new file mode 100644 index 00000000..11cbf43f --- /dev/null +++ b/test/transform/resource/after-delombok/ValWithSelfRefGenerics.java @@ -0,0 +1,14 @@ +public class ValWithSelfRefGenerics { + public void run(Thing> thing, Thing thing2, java.util.List z) { + final java.util.List y = z; + final Thing> x = thing; + final Thing w = thing2; + final java.lang.Comparable v = thing2.get(); + } +} + +class Thing> { + public T get() { + return null; + } +} \ No newline at end of file diff --git a/test/transform/resource/after-ecj/ValWeirdTypes.java b/test/transform/resource/after-ecj/ValWeirdTypes.java index e98b9753..401a8b7e 100644 --- a/test/transform/resource/after-ecj/ValWeirdTypes.java +++ b/test/transform/resource/after-ecj/ValWeirdTypes.java @@ -44,6 +44,7 @@ public class ValWeirdTypes { final @val java.util.List d = upper; List unbound = lower; final @val java.util.List e = unbound; + final @val java.lang.Object f = unbound.get(0); } public void testCompound() { final @val java.util.ArrayList a = new ArrayList(); diff --git a/test/transform/resource/after-ecj/ValWithSelfRefGenerics.java b/test/transform/resource/after-ecj/ValWithSelfRefGenerics.java new file mode 100644 index 00000000..3984e203 --- /dev/null +++ b/test/transform/resource/after-ecj/ValWithSelfRefGenerics.java @@ -0,0 +1,20 @@ +import lombok.val; +public class ValWithSelfRefGenerics { + public ValWithSelfRefGenerics() { + super(); + } + public void run(Thing> thing, Thing thing2, java.util.List z) { + final @val java.util.List y = z; + final @val Thing> x = thing; + final @val Thing w = thing2; + final @val java.lang.Object v = thing2.get(); + } +} +class Thing> { + Thing() { + super(); + } + public T get() { + return null; + } +} \ No newline at end of file diff --git a/test/transform/resource/before/ValWeirdTypes.java b/test/transform/resource/before/ValWeirdTypes.java index 157ffc76..8dd63e86 100644 --- a/test/transform/resource/before/ValWeirdTypes.java +++ b/test/transform/resource/before/ValWeirdTypes.java @@ -44,6 +44,7 @@ public class ValWeirdTypes { val d = upper; List unbound = lower; val e = unbound; + val f = unbound.get(0); } public void testCompound() { diff --git a/test/transform/resource/before/ValWithSelfRefGenerics.java b/test/transform/resource/before/ValWithSelfRefGenerics.java new file mode 100644 index 00000000..d0532606 --- /dev/null +++ b/test/transform/resource/before/ValWithSelfRefGenerics.java @@ -0,0 +1,14 @@ +import lombok.val; +public class ValWithSelfRefGenerics { + public void run(Thing> thing, Thing thing2, java.util.List z) { + val y = z; + val x = thing; + val w = thing2; + val v = thing2.get(); + } +} +class Thing> { + public T get() { + return null; + } +} -- cgit