Search in sources :

Example 6 with EndPosTable

use of com.sun.tools.javac.tree.EndPosTable in project meghanada-server by mopemope.

the class TreeAnalyzer method analyzeTopLevelClass.

private static void analyzeTopLevelClass(SourceContext context, JCTree.JCClassDecl classDecl) throws IOException {
    Source src = context.getSource();
    EndPosTable endPosTable = context.getEndPosTable();
    Tree.Kind classDeclKind = classDecl.getKind();
    boolean isInterface = classDeclKind.equals(Tree.Kind.INTERFACE);
    boolean isEnum = classDeclKind.equals(Tree.Kind.ENUM);
    int startPos = classDecl.getPreferredPosition();
    int endPos = classDecl.getEndPosition(endPosTable);
    parseModifiers(context, classDecl.getModifiers());
    analyzeParsedTree(context, classDecl.getExtendsClause());
    analyzeSimpleExpressions(context, classDecl.getImplementsClause());
    Name simpleName = classDecl.getSimpleName();
    Range range = Range.create(src, startPos + 1, endPos);
    int nameStart = startPos + 6;
    if (isInterface) {
        nameStart = startPos + 10;
    } else if (isEnum) {
        nameStart = startPos + 5;
    }
    Range nameRange = Range.create(src, nameStart, nameStart + simpleName.length());
    String fqcn;
    if (src.getPackageName().isEmpty()) {
        fqcn = simpleName.toString();
    } else {
        fqcn = src.getPackageName() + '.' + simpleName.toString();
    }
    ClassScope classScope = new ClassScope(fqcn, nameRange, startPos, range);
    classScope.isEnum = isEnum;
    classScope.isInterface = isInterface;
    log.trace("class={}", classScope);
    src.startClass(classScope);
    for (JCTree tree : classDecl.getMembers()) {
        analyzeParsedTree(context, tree);
    }
    Optional<ClassScope> endClass = src.endClass();
    log.trace("class={}", endClass);
}
Also used : VariableTree(com.sun.source.tree.VariableTree) ImportTree(com.sun.source.tree.ImportTree) Tree(com.sun.source.tree.Tree) ExpressionTree(com.sun.source.tree.ExpressionTree) JCTree(com.sun.tools.javac.tree.JCTree) CompilationUnitTree(com.sun.source.tree.CompilationUnitTree) JCTree(com.sun.tools.javac.tree.JCTree) EndPosTable(com.sun.tools.javac.tree.EndPosTable) ClassName(meghanada.utils.ClassName) Name(javax.lang.model.element.Name)

Aggregations

EndPosTable (com.sun.tools.javac.tree.EndPosTable)6 JCTree (com.sun.tools.javac.tree.JCTree)6 CompilationUnitTree (com.sun.source.tree.CompilationUnitTree)3 ExpressionTree (com.sun.source.tree.ExpressionTree)3 ImportTree (com.sun.source.tree.ImportTree)3 Tree (com.sun.source.tree.Tree)3 VariableTree (com.sun.source.tree.VariableTree)3 IOException (java.io.IOException)3 ClassName (meghanada.utils.ClassName)3 Symbol (com.sun.tools.javac.code.Symbol)2 VarSymbol (com.sun.tools.javac.code.Symbol.VarSymbol)2 Type (com.sun.tools.javac.code.Type)2 JCDiagnostic (com.sun.tools.javac.util.JCDiagnostic)2 UncheckedIOException (java.io.UncheckedIOException)2 ArrayList (java.util.ArrayList)2 Name (javax.lang.model.element.Name)2 EntryMessage (org.apache.logging.log4j.message.EntryMessage)2 Joiner (com.google.common.base.Joiner)1 LineMap (com.sun.source.tree.LineMap)1 JCAnnotation (com.sun.tools.javac.tree.JCTree.JCAnnotation)1