javac ast indices: get rid of private API for functional expression visitor

This commit is contained in:
Dmitry Batkovich
2016-12-16 17:26:55 +03:00
parent 9b5a6fd6c8
commit ecec35b0b4
3 changed files with 27 additions and 14 deletions
@@ -3,11 +3,11 @@ package org.jetbrains.jps.javac.ast;
import com.sun.source.tree.LambdaExpressionTree;
import com.sun.source.tree.MemberReferenceTree;
import com.sun.source.tree.Tree;
import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.code.Type;
import com.sun.tools.javac.tree.JCTree;
import org.jetbrains.jps.javac.ast.api.JavacDef;
import javax.lang.model.element.Element;
import javax.lang.model.type.TypeMirror;
/**
* Used via reflection in {@link JavacTreeRefScanner#createASTScanner()}
*/
@@ -15,22 +15,23 @@ import org.jetbrains.jps.javac.ast.api.JavacDef;
public class Javac8RefScanner extends JavacTreeRefScanner {
@Override
public Tree visitLambdaExpression(LambdaExpressionTree node, JavacTreeScannerSink sink) {
JCTree.JCLambda lambda = (JCTree.JCLambda)node;
final Type type = lambda.type;
final Symbol.TypeSymbol symbol = type.asElement();
if (symbol != null) {
sink.sinkDeclaration(new JavacDef.JavacFunExprDef(sink.asJavacRef(symbol)));
final TypeMirror type = sink.getType(node);
final Element element = sink.getTypeUtility().asElement(type);
if (element != null) {
sink.sinkDeclaration(new JavacDef.JavacFunExprDef(sink.asJavacRef(element)));
}
return super.visitLambdaExpression(node, sink);
}
@Override
public Tree visitMemberReference(MemberReferenceTree node, JavacTreeScannerSink sink) {
JCTree.JCMemberReference memberRef = (JCTree.JCMemberReference)node;
final Symbol sym = memberRef.sym;
if (sym != null) {
sink.sinkReference(sink.asJavacRef(sym));
sink.sinkDeclaration(new JavacDef.JavacFunExprDef(sink.asJavacRef(memberRef.type.asElement())));
final Element element = sink.getReferencedElement(node);
if (element != null) {
sink.sinkReference(sink.asJavacRef(element));
}
final TypeMirror type = sink.getType(node);
if (type != null) {
sink.sinkDeclaration(new JavacDef.JavacFunExprDef(sink.asJavacRef(sink.getTypeUtility().asElement(type))));
}
return super.visitMemberReference(node, sink);
}
@@ -33,6 +33,7 @@ import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.Name;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;
import javax.tools.*;
@@ -168,11 +169,15 @@ final class JavacReferenceCollectorListener implements TaskListener {
return finalIncompletelyProcessedFile.getTreeHelper().getReferencedElement(tree);
}
@Override
public TypeMirror getType(Tree tree) {
return finalIncompletelyProcessedFile.getTreeHelper().getType(tree);
}
@Override
public Types getTypeUtility() {
return myTypeUtility;
}
};
myAstScanner.scan(declarationToProcess, sink);
@@ -282,5 +287,9 @@ final class JavacReferenceCollectorListener implements TaskListener {
private Element getReferencedElement(Tree tree) {
return myTreeUtil.getElement(new TreePath(myUnitPath, tree));
}
public TypeMirror getType(Tree tree) {
return myTreeUtil.getTypeMirror(new TreePath(myUnitPath, tree));
}
}
}
@@ -20,6 +20,7 @@ import org.jetbrains.jps.javac.ast.api.JavacDef;
import org.jetbrains.jps.javac.ast.api.JavacRef;
import javax.lang.model.element.Element;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Types;
interface JavacTreeScannerSink {
@@ -32,5 +33,7 @@ interface JavacTreeScannerSink {
Element getReferencedElement(Tree tree);
TypeMirror getType(Tree tree);
Types getTypeUtility();
}