From ecec35b0b419cffd3b1d862e36ffc1673e11667f Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Fri, 16 Dec 2016 17:26:00 +0300 Subject: [PATCH] javac ast indices: get rid of private API for functional expression visitor --- .../jps/javac/ast/Javac8RefScanner.java | 27 ++++++++++--------- .../ast/JavacReferenceCollectorListener.java | 11 +++++++- .../jps/javac/ast/JavacTreeScannerSink.java | 3 +++ 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/jps/javac-ref-scanner-8/src/org/jetbrains/jps/javac/ast/Javac8RefScanner.java b/jps/javac-ref-scanner-8/src/org/jetbrains/jps/javac/ast/Javac8RefScanner.java index 69c61be01785..cc732d4e00f1 100644 --- a/jps/javac-ref-scanner-8/src/org/jetbrains/jps/javac/ast/Javac8RefScanner.java +++ b/jps/javac-ref-scanner-8/src/org/jetbrains/jps/javac/ast/Javac8RefScanner.java @@ -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); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacReferenceCollectorListener.java b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacReferenceCollectorListener.java index 8fa0b011935c..eae35d8fea7d 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacReferenceCollectorListener.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacReferenceCollectorListener.java @@ -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)); + } } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacTreeScannerSink.java b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacTreeScannerSink.java index f5224b6f8dd4..2e700b6e5622 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacTreeScannerSink.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/ast/JavacTreeScannerSink.java @@ -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(); }