.matches(getLast(block.getStatements()), state)) { block.getStatements().size() == 2 && block.getStatements().get(0).getKind() == Kind.EXPRESSION_STATEMENT; int startPosition; int endPosition; if (expression) { JCExpressionStatement expressionTree = (JCExpressionStatement) block.getStatements().get(0); startPosition = expressionTree.getStartPosition(); endPosition = state.getEndPosition(expressionTree.getExpression()); } else { startPosition = block.getStartPosition(); endPosition = getLast(tryStatement.getBlock().getStatements()).getStartPosition(); if (catchTree.getBlock().getStatements().isEmpty()) { fix.addStaticImport("org.junit.Assert.assertThrows"); fix.replace( .replace( /* endPos= */ catchTree.getBlock().getStatements().get(0).getStartPosition(), (expression ? "" : "}") + ");\n") .replace( state.getEndPosition(getLast(catchTree.getBlock().getStatements())), state.getEndPosition(catchTree), "");
int argumentIndex = context.argumentIndex; context.setArgumentIndex(-1); analyzeSimpleStatements(context, block.getStatements()); context.setArgumentIndex(argumentIndex);
log.error(tree.body.pos(), "intf.meth.cant.have.body"); } else { log.error(tree.pos(), "abstract.meth.cant.have.body");
log.error(tree.body.pos(), "intf.meth.cant.have.body"); } else { log.error(tree.pos(), "abstract.meth.cant.have.body");
log.error(tree.body.pos(), "intf.meth.cant.have.body"); } else if ((tree.mods.flags & ABSTRACT) != 0) { log.error(tree.pos(), "abstract.meth.cant.have.body");
log.error(tree.body.pos(), "stack.sim.error", tree); throw new AssertionError();
log.error(tree.body.pos(), "intf.meth.cant.have.body"); } else if ((tree.mods.flags & ABSTRACT) != 0) { log.error(tree.pos(), "abstract.meth.cant.have.body");
log.error(tree.body.pos(), "stack.sim.error", tree); throw new AssertionError();
log.error(tree.body.pos(), "stack.sim.error", tree); throw new AssertionError();
log.error(tree.body.pos(), "stack.sim.error", tree); throw new AssertionError();
.matches(getLast(block.getStatements()), state)) { block.getStatements().size() == 2 && block.getStatements().get(0).getKind() == Kind.EXPRESSION_STATEMENT; int startPosition; int endPosition; if (expression) { JCExpressionStatement expressionTree = (JCExpressionStatement) block.getStatements().get(0); startPosition = expressionTree.getStartPosition(); endPosition = state.getEndPosition(expressionTree.getExpression()); } else { startPosition = block.getStartPosition(); endPosition = getLast(tryStatement.getBlock().getStatements()).getStartPosition(); if (catchTree.getBlock().getStatements().isEmpty()) { fix.addStaticImport("org.junit.Assert.assertThrows"); fix.replace( .replace( /* endPos= */ catchTree.getBlock().getStatements().get(0).getStartPosition(), (expression ? "" : "}") + ");\n") .replace( state.getEndPosition(getLast(catchTree.getBlock().getStatements())), state.getEndPosition(catchTree), "");
proxyMethodName, utils.voidType, md.getParameters(), md.getThrows(), utils.make.Block( 0, md.getBody().getStatements() ) );
members = ((JCClassDecl) path.getLeaf()).getMembers(); } else { members = ((JCBlock) path.getLeaf()).getStatements();
@Override public void visitTry(JCTry tree) { if (tree.resources.nonEmpty()) { result = makeTwrTry(tree); return; } boolean hasBody = tree.body.getStatements().nonEmpty(); boolean hasCatchers = tree.catchers.nonEmpty(); boolean hasFinally = tree.finalizer != null && tree.finalizer.getStatements().nonEmpty(); if (!hasCatchers && !hasFinally) { result = translate(tree.body); return; } if (!hasBody) { if (hasFinally) { result = translate(tree.finalizer); } else { result = translate(tree.body); } return; } // no optimizations possible super.visitTry(tree); }
@Override public void visitTry(JCTry tree) { if (tree.resources.nonEmpty()) { result = makeTwrTry(tree); return; } boolean hasBody = tree.body.getStatements().nonEmpty(); boolean hasCatchers = tree.catchers.nonEmpty(); boolean hasFinally = tree.finalizer != null && tree.finalizer.getStatements().nonEmpty(); if (!hasCatchers && !hasFinally) { result = translate(tree.body); return; } if (!hasBody) { if (hasFinally) { result = translate(tree.finalizer); } else { result = translate(tree.body); } return; } // no optimizations possible super.visitTry(tree); }
/** Tokenizes as little of the {@code tree} as possible to ensure we grab all the annotations. */ private static ImmutableList<ErrorProneToken> annotationTokens( Tree tree, VisitorState state, int annotationEnd) { int endPos; if (tree instanceof JCMethodDecl) { JCMethodDecl methodTree = (JCMethodDecl) tree; endPos = methodTree.getBody() == null ? state.getEndPosition(methodTree) : methodTree.getBody().getStartPosition(); } else if (tree instanceof JCVariableDecl) { endPos = ((JCVariableDecl) tree).getType().getStartPosition(); } else if (tree instanceof JCClassDecl) { JCClassDecl classTree = (JCClassDecl) tree; endPos = classTree.getMembers().isEmpty() ? state.getEndPosition(classTree) : classTree.getMembers().get(0).getStartPosition(); } else { throw new AssertionError(); } return ErrorProneTokens.getTokens( state.getSourceCode().subSequence(annotationEnd, endPos).toString(), state.context); }
/** * If the tree is a {@link JCBlock}, returns a list of disjoint matches corresponding to the exact * list of template statements found consecutively; otherwise, returns an empty list. */ @Override public Iterable<BlockTemplateMatch> match(JCTree tree, Context context) { // TODO(lowasser): consider nonconsecutive matches? if (tree instanceof JCBlock) { JCBlock block = (JCBlock) tree; ImmutableList<JCStatement> targetStatements = ImmutableList.copyOf(block.getStatements()); return matchesStartingAnywhere(block, 0, targetStatements, context) .first() .or(List.<BlockTemplateMatch>nil()); } return ImmutableList.of(); }
/** * 处理代码块 * * @param block 代码块 */ private void doBlock(JCTree.JCBlock block) { ListBuffer<JCTree.JCStatement> stats = new ListBuffer(); for (JCTree.JCStatement st : block.getStatements()) { ListBuffer<JCTree.JCStatement> ss = visitReturn(st); for (JCTree.JCStatement stat : ss) { stats.append(stat); } } block.stats = stats.toList(); }
public BlockTemplateMatch(JCBlock block, Unifier unifier, int start, int end) { super(checkNotNull(block).getStatements().get(start), unifier); this.statements = ImmutableList.copyOf(block.getStatements().subList(start, end)); }
public JCBlock Block(long flags, List<JCStatement> stats) { JCBlock tree = new JCBlock(flags, stats); tree.pos = pos; return tree; }