aboutsummaryrefslogtreecommitdiff
path: root/src/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/lombok/javac/Javac.java3
-rw-r--r--src/utils/lombok/javac/TreeMirrorMaker.java31
2 files changed, 34 insertions, 0 deletions
diff --git a/src/utils/lombok/javac/Javac.java b/src/utils/lombok/javac/Javac.java
index 41ff8242..5b4a4fb2 100644
--- a/src/utils/lombok/javac/Javac.java
+++ b/src/utils/lombok/javac/Javac.java
@@ -162,6 +162,9 @@ public class Javac {
public static final TypeTag CTC_VOID = typeTag("VOID");
public static final TypeTag CTC_NONE = typeTag("NONE");
public static final TypeTag CTC_BOT = typeTag("BOT");
+ public static final TypeTag CTC_ERROR = typeTag("ERROR");
+ public static final TypeTag CTC_UNKNOWN = typeTag("UNKNOWN");
+ public static final TypeTag CTC_UNDETVAR = typeTag("UNDETVAR");
public static final TypeTag CTC_CLASS = typeTag("CLASS");
public static final TreeTag CTC_NOT_EQUAL = treeTag("NE");
diff --git a/src/utils/lombok/javac/TreeMirrorMaker.java b/src/utils/lombok/javac/TreeMirrorMaker.java
index 23ec2406..a31c6477 100644
--- a/src/utils/lombok/javac/TreeMirrorMaker.java
+++ b/src/utils/lombok/javac/TreeMirrorMaker.java
@@ -26,9 +26,16 @@ import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.Map;
+import static lombok.javac.Javac.*;
+import lombok.javac.JavacTreeMaker.TypeTag;
+
+import com.sun.source.tree.ClassTree;
import com.sun.source.tree.LabeledStatementTree;
+import com.sun.source.tree.NewClassTree;
import com.sun.source.tree.VariableTree;
import com.sun.tools.javac.tree.JCTree;
+import com.sun.tools.javac.tree.JCTree.JCClassDecl;
+import com.sun.tools.javac.tree.JCTree.JCNewClass;
import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
import com.sun.tools.javac.tree.TreeCopier;
import com.sun.tools.javac.util.List;
@@ -91,6 +98,20 @@ public class TreeMirrorMaker extends TreeCopier<Void> {
@Override public JCTree visitVariable(VariableTree node, Void p) {
JCVariableDecl copy = (JCVariableDecl) super.visitVariable(node, p);
copy.sym = ((JCVariableDecl) node).sym;
+ if (copy.sym != null) copy.type = ((JCVariableDecl) node).type;
+ if (copy.type != null) {
+ boolean wipeSymAndType = copy.type.isErroneous();
+ if (!wipeSymAndType) {
+ TypeTag typeTag = TypeTag.typeTag(copy.type);
+ wipeSymAndType = (CTC_NONE.equals(typeTag) || CTC_ERROR.equals(typeTag) || CTC_UNKNOWN.equals(typeTag) || CTC_UNDETVAR.equals(typeTag));
+ }
+
+ if (wipeSymAndType) {
+ copy.sym = null;
+ copy.type = null;
+ }
+ }
+
return copy;
}
@@ -99,4 +120,14 @@ public class TreeMirrorMaker extends TreeCopier<Void> {
@Override public JCTree visitLabeledStatement(LabeledStatementTree node, Void p) {
return node.getStatement().accept(this, p);
}
+
+ @Override public JCTree visitNewClass(NewClassTree node, Void p) {
+ JCNewClass copy = (JCNewClass) super.visitNewClass(node, p);
+ return copy;
+ }
+
+ @Override public JCTree visitClass(ClassTree node, Void p) {
+ JCClassDecl copy = (JCClassDecl) super.visitClass(node, p);
+ return copy;
+ }
}