@Override public Description matchMethodInvocation(MethodInvocationTree tree, VisitorState state) { if (!MATCHER.matches(tree, state)) { return NO_MATCH; } ReturnTree returnTree = state.findEnclosing(ReturnTree.class); if (returnTree == null) { return NO_MATCH; } AtomicBoolean isTerminalCondition = new AtomicBoolean(false); returnTree.accept( new TreeScanner<Void, Void>() { @Override public Void visitMethodInvocation(MethodInvocationTree methodTree, Void unused) { if (methodTree.equals(tree)) { isTerminalCondition.set(true); } return super.visitMethodInvocation(methodTree, null); } @Override public Void visitBinary(BinaryTree binaryTree, Void unused) { return scan(binaryTree.getRightOperand(), null); } }, null); return isTerminalCondition.get() ? describeMatch(tree) : NO_MATCH; } }
@Override public Description matchMethodInvocation(MethodInvocationTree tree, VisitorState state) { if (!MATCHER.matches(tree, state)) { return NO_MATCH; } ReturnTree returnTree = state.findEnclosing(ReturnTree.class); if (returnTree == null) { return NO_MATCH; } AtomicBoolean isTerminalCondition = new AtomicBoolean(false); returnTree.accept( new TreeScanner<Void, Void>() { @Override public Void visitMethodInvocation(MethodInvocationTree methodTree, Void unused) { if (methodTree.equals(tree)) { isTerminalCondition.set(true); } return super.visitMethodInvocation(methodTree, null); } @Override public Void visitBinary(BinaryTree binaryTree, Void unused) { return scan(binaryTree.getRightOperand(), null); } }, null); return isTerminalCondition.get() ? describeMatch(tree) : NO_MATCH; } }