mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
javac ast indices: get rid of private API for functional expression visitor
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
+10
-1
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user