From a8f9b1dd359dbbcd63bffe891c5f00a9a2ac1f60 Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Wed, 12 May 2021 09:03:57 +0200 Subject: [fixes #2420] Copy vartype.type --- .../resource/before/ValAnonymousSubclassSelfReference.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 test/transform/resource/before/ValAnonymousSubclassSelfReference.java (limited to 'test/transform/resource/before/ValAnonymousSubclassSelfReference.java') diff --git a/test/transform/resource/before/ValAnonymousSubclassSelfReference.java b/test/transform/resource/before/ValAnonymousSubclassSelfReference.java new file mode 100644 index 00000000..6ca05b3c --- /dev/null +++ b/test/transform/resource/before/ValAnonymousSubclassSelfReference.java @@ -0,0 +1,12 @@ +// issue 2420: to trigger the problem 2 var/val, one normal variable and a anonymous self reference is required +import lombok.val; + +public class ValAnonymousSubclassSelfReference { + public void test() { + int i = 0; + val j = 1; + val k = 2; + + new ValAnonymousSubclassSelfReference() { }; + } +} \ No newline at end of file -- cgit From bd00fc4b83dd758c4369c8da97243691c04ac3fa Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Fri, 14 May 2021 23:06:20 +0200 Subject: Copy reference types properly --- src/utils/lombok/javac/TreeMirrorMaker.java | 17 ++++++++++++++++- .../ValAnonymousSubclassSelfReference.java | 10 +++++++++- .../after-ecj/ValAnonymousSubclassSelfReference.java | 9 ++++++++- .../before/ValAnonymousSubclassSelfReference.java | 13 +++++++++++-- 4 files changed, 44 insertions(+), 5 deletions(-) (limited to 'test/transform/resource/before/ValAnonymousSubclassSelfReference.java') diff --git a/src/utils/lombok/javac/TreeMirrorMaker.java b/src/utils/lombok/javac/TreeMirrorMaker.java index 4b2ad171..778e670d 100644 --- a/src/utils/lombok/javac/TreeMirrorMaker.java +++ b/src/utils/lombok/javac/TreeMirrorMaker.java @@ -32,8 +32,10 @@ import lombok.javac.JavacTreeMaker.TypeTag; import com.sun.source.tree.LabeledStatementTree; import com.sun.source.tree.VariableTree; import com.sun.tools.javac.tree.JCTree; +import com.sun.tools.javac.tree.JCTree.JCFieldAccess; import com.sun.tools.javac.tree.JCTree.JCVariableDecl; import com.sun.tools.javac.tree.TreeCopier; +import com.sun.tools.javac.tree.TreeScanner; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.List; @@ -110,7 +112,20 @@ public class TreeMirrorMaker extends TreeCopier { copy.sym = null; copy.type = null; } else { - if (original.vartype != null) copy.vartype.type = original.vartype.type; + if (original.vartype != null) { + copy.vartype.type = original.vartype.type; + original.vartype.accept(new TreeScanner() { + @Override public void scan(JCTree tree) { + super.scan(tree); + originalToCopy.get(tree).type = tree.type; + } + + @Override public void visitSelect(JCFieldAccess tree) { + super.visitSelect(tree); + ((JCFieldAccess) originalToCopy.get(tree)).sym = tree.sym; + } + }); + } } } diff --git a/test/transform/resource/after-delombok/ValAnonymousSubclassSelfReference.java b/test/transform/resource/after-delombok/ValAnonymousSubclassSelfReference.java index 4532ec28..a1176a3c 100644 --- a/test/transform/resource/after-delombok/ValAnonymousSubclassSelfReference.java +++ b/test/transform/resource/after-delombok/ValAnonymousSubclassSelfReference.java @@ -1,5 +1,13 @@ +import java.util.Map; +import java.util.HashMap; + public class ValAnonymousSubclassSelfReference { - public void test() { + public void test(T arg) { + T d = arg; + Integer[] e = new Integer[1]; + int[] f = new int[0]; + java.util.Map g = new HashMap(); + Integer h = 0; int i = 0; final int j = 1; final int k = 2; diff --git a/test/transform/resource/after-ecj/ValAnonymousSubclassSelfReference.java b/test/transform/resource/after-ecj/ValAnonymousSubclassSelfReference.java index 8a3c7fa8..12b0f640 100644 --- a/test/transform/resource/after-ecj/ValAnonymousSubclassSelfReference.java +++ b/test/transform/resource/after-ecj/ValAnonymousSubclassSelfReference.java @@ -1,9 +1,16 @@ +import java.util.Map; +import java.util.HashMap; import lombok.val; public class ValAnonymousSubclassSelfReference { public ValAnonymousSubclassSelfReference() { super(); } - public void test() { + public void test(T arg) { + T d = arg; + Integer[] e = new Integer[1]; + int[] f = new int[0]; + java.util.Map g = new HashMap(); + Integer h = 0; int i = 0; final @val int j = 1; final @val int k = 2; diff --git a/test/transform/resource/before/ValAnonymousSubclassSelfReference.java b/test/transform/resource/before/ValAnonymousSubclassSelfReference.java index 6ca05b3c..e7c30c84 100644 --- a/test/transform/resource/before/ValAnonymousSubclassSelfReference.java +++ b/test/transform/resource/before/ValAnonymousSubclassSelfReference.java @@ -1,9 +1,18 @@ -// issue 2420: to trigger the problem 2 var/val, one normal variable and a anonymous self reference is required +// issue 2420: to trigger the problem 2 var/val, at least one normal variable and a anonymous self reference is required +import java.util.Map; +import java.util.HashMap; + import lombok.val; public class ValAnonymousSubclassSelfReference { - public void test() { + public void test(T arg) { + T d = arg; + Integer[] e = new Integer[1]; + int[] f = new int[0]; + java.util.Map g = new HashMap(); + Integer h = 0; int i = 0; + val j = 1; val k = 2; -- cgit From 9ef7656a35706f387569189e118076c7279311c3 Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Mon, 27 Sep 2021 17:52:34 +0200 Subject: [tests] Exclude recently added 'val' test --- test/transform/resource/before/ValAnonymousSubclassSelfReference.java | 1 + 1 file changed, 1 insertion(+) (limited to 'test/transform/resource/before/ValAnonymousSubclassSelfReference.java') diff --git a/test/transform/resource/before/ValAnonymousSubclassSelfReference.java b/test/transform/resource/before/ValAnonymousSubclassSelfReference.java index e7c30c84..b17c997a 100644 --- a/test/transform/resource/before/ValAnonymousSubclassSelfReference.java +++ b/test/transform/resource/before/ValAnonymousSubclassSelfReference.java @@ -1,3 +1,4 @@ +// version :9 // issue 2420: to trigger the problem 2 var/val, at least one normal variable and a anonymous self reference is required import java.util.Map; import java.util.HashMap; -- cgit