Copy reference types properly

This commit is contained in:
Rawi01
2021-05-14 23:06:20 +02:00
parent a8f9b1dd35
commit bd00fc4b83
4 changed files with 44 additions and 5 deletions
+16 -1
View File
@@ -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<Void> {
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;
}
});
}
}
}
@@ -1,5 +1,13 @@
import java.util.Map;
import java.util.HashMap;
public class ValAnonymousSubclassSelfReference {
public void test() {
public <T> void test(T arg) {
T d = arg;
Integer[] e = new Integer[1];
int[] f = new int[0];
java.util.Map<java.lang.String, Integer> g = new HashMap<String, Integer>();
Integer h = 0;
int i = 0;
final int j = 1;
final int k = 2;
@@ -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 <T>void test(T arg) {
T d = arg;
Integer[] e = new Integer[1];
int[] f = new int[0];
java.util.Map<java.lang.String, Integer> g = new HashMap<String, Integer>();
Integer h = 0;
int i = 0;
final @val int j = 1;
final @val int k = 2;
@@ -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 <T> void test(T arg) {
T d = arg;
Integer[] e = new Integer[1];
int[] f = new int[0];
java.util.Map<java.lang.String, Integer> g = new HashMap<String, Integer>();
Integer h = 0;
int i = 0;
val j = 1;
val k = 2;