当前位置: 首页>>代码示例>>Java>>正文


Java JCTree类代码示例

本文整理汇总了Java中com.sun.tools.javac.tree.JCTree的典型用法代码示例。如果您正苦于以下问题:Java JCTree类的具体用法?Java JCTree怎么用?Java JCTree使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。


JCTree类属于com.sun.tools.javac.tree包,在下文中一共展示了JCTree类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: testPreferredPositionForBinaryOp

import com.sun.tools.javac.tree.JCTree; //导入依赖的package包/类
@Test
void testPreferredPositionForBinaryOp() throws IOException {

    String code = "package test; public class Test {"
            + "private void test() {"
            + "Object o = null; boolean b = o != null && o instanceof String;"
            + "} private Test() {}}";

    CompilationUnitTree cut = getCompilationUnitTree(code);
    ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
    MethodTree method = (MethodTree) clazz.getMembers().get(0);
    VariableTree condSt = (VariableTree) method.getBody().getStatements().get(1);
    BinaryTree cond = (BinaryTree) condSt.getInitializer();

    JCTree condJC = (JCTree) cond;
    int condStartPos = code.indexOf("&&");
    assertEquals("testPreferredPositionForBinaryOp",
            condStartPos, condJC.pos);
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:20,代码来源:JavacParserTest.java

示例2: visitTry

import com.sun.tools.javac.tree.JCTree; //导入依赖的package包/类
@Override
   public void visitTry(JCTry tree) {
print("try");
       if (!tree.getResources().isEmpty()) {
           print(" ("); //XXX: space should be according to the code style!
           for (Iterator<? extends JCTree> it = tree.getResources().iterator(); it.hasNext();) {
               JCTree r = it.next();
               //XXX: disabling copying of original text, as the ending ';' needs to be removed in some cases.
               oldTrees.remove(r);
               printPrecedingComments(r, false);
               printExpr(r, 0);
               printTrailingComments(r, false);
               if (it.hasNext()) print(";");
           }
           print(") "); //XXX: space should be according to the code style!
       }
printBlock(tree.body, cs.getOtherBracePlacement(), cs.spaceBeforeTryLeftBrace());
for (List < JCCatch > l = tree.catchers; l.nonEmpty(); l = l.tail)
    printStat(l.head);
if (tree.finalizer != null) {
    printFinallyBlock(tree.finalizer);
}
   }
 
开发者ID:apache,项目名称:incubator-netbeans,代码行数:24,代码来源:VeryPretty.java

示例3: reorderBySourcePosition

import com.sun.tools.javac.tree.JCTree; //导入依赖的package包/类
/**
 * Rotate the list of dimension specifiers until all dimensions with type annotations appear in
 * source order.
 * <p>
 * <p>javac reorders dimension specifiers in method declarations with mixed-array notation, which
 * means that any type annotations don't appear in source order.
 * <p>
 * <p>For example, the type of {@code int @A [] f() @B [] {}} is parsed as {@code @B [] @A []}.
 * <p>
 * <p>This doesn't handle cases with un-annotated dimension specifiers, so the formatting logic
 * checks the token stream to figure out which side of the method name they appear on.
 */
private static Iterable<List<AnnotationTree>> reorderBySourcePosition(
        Deque<List<AnnotationTree>> dims) {
    int lastAnnotation = -1;
    int lastPos = -1;
    int idx = 0;
    for (List<AnnotationTree> dim : dims) {
        if (!dim.isEmpty()) {
            int pos = ((JCTree) dim.get(0)).getStartPosition();
            if (pos < lastPos) {
                List<List<AnnotationTree>> list = new ArrayList<>(dims);
                Collections.rotate(list, -(lastAnnotation + 1));
                return list;
            }
            lastPos = pos;
            lastAnnotation = idx;
        }
        idx++;
    }
    return dims;
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:33,代码来源:DimensionHelpers.java

示例4: visitApply

import com.sun.tools.javac.tree.JCTree; //导入依赖的package包/类
@Override
public void visitApply(JCMethodInvocation tree) {
    boolean prevCheckThis = checkThis;
    try {
        Symbol meth = TreeInfo.symbol(tree.meth);
        Name methName = TreeInfo.name(tree.meth);
        if (meth != null && meth.name == names.init) {
            Symbol c = meth.owner;
            if (c.hasOuterInstance()) {
                checkThis = false;
                if (tree.meth.getTag() != JCTree.Tag.SELECT && (c.isLocal() || methName == names._this)) {
                    checkThis(tree.meth.pos(), c.type.getEnclosingType().tsym);
                }
            }
        }
        super.visitApply(tree);
    } finally {
        checkThis = prevCheckThis;
    }
}
 
开发者ID:apache,项目名称:incubator-netbeans,代码行数:21,代码来源:PostFlowAnalysis.java

示例5: finished

import com.sun.tools.javac.tree.JCTree; //导入依赖的package包/类
@Override @DefinedBy(Api.COMPILER_TREE)
public void finished(TaskEvent taskEvent) {
    List<AbstractCodingRulesAnalyzer> currentAnalyzers = this.analyzers.get(taskEvent.getKind());

    if (currentAnalyzers != null) {
        TypeElement typeElem = taskEvent.getTypeElement();
        Tree tree = trees.getTree(typeElem);
        if (tree != null) {
            JavaFileObject prevSource = log.currentSourceFile();
            try {
                log.useSource(taskEvent.getCompilationUnit().getSourceFile());
                for (AbstractCodingRulesAnalyzer analyzer : currentAnalyzers) {
                    analyzer.treeVisitor.scan((JCTree)tree);
                }
            } finally {
                log.useSource(prevSource);
            }
        }
    }
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:21,代码来源:CodingRulesAnalyzerPlugin.java

示例6: getSourcePosition

import com.sun.tools.javac.tree.JCTree; //导入依赖的package包/类
public JavacSourcePosition getSourcePosition(Element e, AnnotationMirror a) {
    Pair<JCTree, JCCompilationUnit> treeTop = getTreeAndTopLevel(e);
    if (treeTop == null)
        return null;
    JCTree tree = treeTop.fst;
    JCCompilationUnit toplevel = treeTop.snd;
    JavaFileObject sourcefile = toplevel.sourcefile;
    if (sourcefile == null)
        return null;

    JCTree annoTree = matchAnnoToTree(a, e, tree);
    if (annoTree == null)
        return null;
    return new JavacSourcePosition(sourcefile, annoTree.pos,
                                   toplevel.lineMap);
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:17,代码来源:JavacElements.java

示例7: getElement

import com.sun.tools.javac.tree.JCTree; //导入依赖的package包/类
public Element getElement(TreePath path) {
    JCTree tree = (JCTree) path.getLeaf();
    Symbol sym = TreeInfo.symbolFor(tree);
    if (sym == null && TreeInfo.isDeclaration(tree)) {
        for (TreePath p = path; p != null; p = p.getParentPath()) {
            JCTree t = (JCTree) p.getLeaf();
            if (t.getTag() == JCTree.CLASSDEF) {
                JCClassDecl ct = (JCClassDecl) t;
                if (ct.sym != null) {
                    if ((ct.sym.flags_field & Flags.UNATTRIBUTED) != 0) {
                        attr.attribClass(ct.pos(), ct.sym);
                        sym = TreeInfo.symbolFor(tree);
                    }
                    break;
                }
            }
        }
    }
    return sym;
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:21,代码来源:JavacTrees.java

示例8: run

import com.sun.tools.javac.tree.JCTree; //导入依赖的package包/类
void run(String code) throws IOException {
    String src = "public class Test {" + code + ";}";

    JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, null,
            null, Arrays.asList(new MyFileObject(src)));

    for (CompilationUnitTree cut : ct.parse()) {
        JCTree.JCVariableDecl var =
                (JCTree.JCVariableDecl) ((ClassTree) cut.getTypeDecls().get(0)).getMembers().get(0);

        if (!code.equals(var.toString())) {
            System.err.println("Expected: " + code);
            System.err.println("Obtained: " + var.toString());
            throw new RuntimeException("strings do not match!");
        }
    }
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:18,代码来源:NewArrayPretty.java

示例9: getTree

import com.sun.tools.javac.tree.JCTree; //导入依赖的package包/类
public JCTree getTree(Element element) {
    Symbol symbol = (Symbol) element;
    TypeSymbol enclosing = symbol.enclClass();
    Env<AttrContext> env = enter.getEnv(enclosing);
    if (env == null)
        return null;
    JCClassDecl classNode = env.enclClass;
    if (classNode != null) {
        if (TreeInfo.symbolFor(classNode) == element)
            return classNode;
        for (JCTree node : classNode.getMembers())
            if (TreeInfo.symbolFor(node) == element)
                return node;
    }
    return null;
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:17,代码来源:JavacTrees.java

示例10: gatherTreeSpans

import com.sun.tools.javac.tree.JCTree; //导入依赖的package包/类
public List<int[]> gatherTreeSpans(File file, String content) throws IOException {
    JCCompilationUnit unit = read(file.toURI(), content);
    List<int[]> spans = new ArrayList<>();
    new TreePathScanner<Void, Void>() {
        @Override
        public Void scan(Tree tree, Void p) {
            if (tree != null) {
                int start = ((JCTree) tree).getStartPosition();
                int end = ((JCTree) tree).getEndPosition(unit.endPositions);

                spans.add(new int[] {start, end});
            }
            return super.scan(tree, p);
        }
    }.scan(unit, null);
    return spans;
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:18,代码来源:MissingSemicolonTest.java

示例11: resolve

import com.sun.tools.javac.tree.JCTree; //导入依赖的package包/类
/**
 * Resolves an {@link Element} from the {@link ElementHandle}.
 * @param compilationInfo representing the {@link javax.tools.CompilationTask}
 * in which the {@link Element} should be resolved.
 * @return resolved subclass of {@link Element} or null if the elment does not exist on
 * the classpath/sourcepath of {@link javax.tools.CompilationTask}.
 */
@SuppressWarnings ("unchecked")     // NOI18N
public @CheckForNull T resolve (@NonNull final CompilationInfo compilationInfo) {
    Parameters.notNull("compilationInfo", compilationInfo); // NOI18N
    ModuleElement module = compilationInfo.getFileObject() != null
            ? ((JCTree.JCCompilationUnit)compilationInfo.getCompilationUnit()).modle
            : null;
    T result = resolveImpl (module, compilationInfo.impl.getJavacTask());
    if (result == null) {
        if (log.isLoggable(Level.INFO))
            log.log(Level.INFO, "Cannot resolve: {0}", toString()); //NOI18N                
    } else {
        if (log.isLoggable(Level.FINE))
            log.log(Level.FINE, "Resolved element = {0}", result);
    }
    return result;
}
 
开发者ID:apache,项目名称:incubator-netbeans,代码行数:24,代码来源:ElementHandle.java

示例12: getClassDecl

import com.sun.tools.javac.tree.JCTree; //导入依赖的package包/类
private JCTree.JCClassDecl getClassDecl( Model model )
{
  JCTree.JCClassDecl classDecl = model.getClassDecl();
  if( classDecl != null )
  {
    return classDecl;
  }

  List<CompilationUnitTree> trees = new ArrayList<>();
  JavaParser.instance().parseText( getSource( model ), trees, null, null, null );
  if( trees.isEmpty() )
  {
    return null;
  }
  classDecl = (JCTree.JCClassDecl)trees.get( 0 ).getTypeDecls().get( 0 );
  model.setClassDecl( classDecl );
  return classDecl;
}
 
开发者ID:manifold-systems,项目名称:manifold,代码行数:19,代码来源:DarkJavaTypeManifold.java

示例13: visitLambda

import com.sun.tools.javac.tree.JCTree; //导入依赖的package包/类
@Override
public void visitLambda( JCTree.JCLambda tree )
{
  super.visitLambda( tree );

  if( _tp.isGenerate() && !shouldProcessForGeneration() )
  {
    // Don't process tree during GENERATE, unless the tree was generated e.g., a bridge method
    return;
  }

  tree.type = eraseStructureType( tree.type );
  ArrayList<Type> types = new ArrayList<>();
  for( Type target : tree.targets )
  {
    types.add( eraseStructureType( target ) );
  }
  tree.targets = List.from( types );
}
 
开发者ID:manifold-systems,项目名称:manifold,代码行数:20,代码来源:ExtensionTransformer.java

示例14: run

import com.sun.tools.javac.tree.JCTree; //导入依赖的package包/类
void run() throws Exception {
    Context context = new Context();
    JavacFileManager.preRegister(context);
    Trees trees = JavacTrees.instance(context);
    StringWriter strOut = new StringWriter();
    PrintWriter pw = new PrintWriter(strOut);
    DPrinter dprinter = new DPrinter(pw, trees);
    final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
    JavacTask ct = (JavacTask)tool.getTask(null, null, null, null, null, Arrays.asList(new JavaSource()));
    Iterable<? extends CompilationUnitTree> elements = ct.parse();
    ct.analyze();
    Assert.check(elements.iterator().hasNext());
    dprinter.treeTypes(true).printTree("", (JCTree)elements.iterator().next());
    String output = strOut.toString();
    Assert.check(!output.contains("java.lang.Object"), "there shouldn't be any type instantiated to Object");
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:17,代码来源:InferenceRegressionTest02.java

示例15: getResourceName

import com.sun.tools.javac.tree.JCTree; //导入依赖的package包/类
@CheckForNull
private static String getResourceName (@NullAllowed final CompilationUnitTree cu) {
    if (cu instanceof JCTree.JCCompilationUnit) {
        JavaFileObject jfo = ((JCTree.JCCompilationUnit)cu).sourcefile;
        if (jfo != null) {
            URI uri = jfo.toUri();
            if (uri != null && uri.isAbsolute()) {
                try {
                    FileObject fo = URLMapper.findFileObject(uri.toURL());
                    if (fo != null) {
                        ClassPath cp = ClassPath.getClassPath(fo,ClassPath.SOURCE);
                        if (cp != null) {
                            return cp.getResourceName(fo,'.',false);
                        }
                    }
                } catch (MalformedURLException e) {
                    Exceptions.printStackTrace(e);
                }
            }
        }
    }
    return null;
}
 
开发者ID:apache,项目名称:incubator-netbeans,代码行数:24,代码来源:SourceAnalyzerFactory.java


注:本文中的com.sun.tools.javac.tree.JCTree类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。