private boolean hasAssignmentOperator(Node node) { if (node instanceof ASTStatementExpression || node instanceof ASTExpression) { if (node.jjtGetNumChildren() >= 2 && node.jjtGetChild(1) instanceof ASTAssignmentOperator) { return true; } } return false; }
protected void apply(Node node, RuleContext ctx) { for (int i = 0; i < node.jjtGetNumChildren(); i++) { apply(node.jjtGetChild(i), ctx); } if ("Foo".equals(node.getImage())) { addViolation(ctx, node); } }
private boolean isStandAlonePostfix(Node primaryExpression) { if (!(primaryExpression instanceof ASTPostfixExpression) || !(primaryExpression.jjtGetParent() instanceof ASTStatementExpression)) { return false; } ASTPrimaryPrefix pf = (ASTPrimaryPrefix) ((ASTPrimaryExpression) primaryExpression.jjtGetChild(0)).jjtGetChild(0); if (pf.usesThisModifier()) { return true; } return thirdChildHasDottedName(primaryExpression); }
public ElementNode( DocumentNode document, IdGenerator idGenerator, ElementNode parent, Node node, int siblingPosition) { this.document = document; this.parent = parent; this.node = node; this.id = idGenerator.getNextId(); this.siblingPosition = siblingPosition; if (node.jjtGetNumChildren() > 0) { this.children = new NodeInfo[node.jjtGetNumChildren()]; for (int i = 0; i < children.length; i++) { children[i] = new ElementNode(document, idGenerator, this, node.jjtGetChild(i), i); } } else { this.children = null; } document.nodeToElementNode.put(node, this); }
public boolean isOnLeftHandSide() { // I detest this method with every atom of my being Node primaryExpression; if (location.jjtGetParent() instanceof ASTPrimaryExpression) { primaryExpression = location.jjtGetParent().jjtGetParent(); } else if (location.jjtGetParent().jjtGetParent() instanceof ASTPrimaryExpression) { primaryExpression = location.jjtGetParent().jjtGetParent().jjtGetParent(); } else { throw new RuntimeException( "Found a NameOccurrence that didn't have an ASTPrimary Expression as parent or grandparent. Parent = " + location.jjtGetParent() + " and grandparent = " + location.jjtGetParent().jjtGetParent()); } if (isStandAlonePostfix(primaryExpression)) { return true; } if (primaryExpression.jjtGetNumChildren() <= 1) { return false; } if (!(primaryExpression.jjtGetChild(1) instanceof ASTAssignmentOperator)) { return false; } if (isPartOfQualifiedName() /* or is an array type */) { return false; } if (isCompoundAssignment(primaryExpression)) { return false; } return true; }
@Override public Object visit(ASTCatchStatement catchStmt, Object data) { String target = catchStmt .jjtGetChild(0) .findChildrenOfType(ASTVariableDeclaratorId.class) .get(0) .getImage(); // Inspect all the throw stmt inside the catch stmt List<ASTThrowStatement> lstThrowStatements = catchStmt.findDescendantsOfType(ASTThrowStatement.class); for (ASTThrowStatement throwStatement : lstThrowStatements) { Node n = throwStatement.jjtGetChild(0).jjtGetChild(0); if (n instanceof ASTCastExpression) { ASTPrimaryExpression expr = (ASTPrimaryExpression) n.jjtGetChild(1); if (expr.jjtGetNumChildren() > 1 && expr.jjtGetChild(1) instanceof ASTPrimaryPrefix) { RuleContext ctx = (RuleContext) data; addViolation(ctx, throwStatement); } continue; } // Retrieve all argument for the throw exception (to see if the // original exception is preserved) ASTArgumentList args = throwStatement.getFirstDescendantOfType(ASTArgumentList.class); if (args != null) { Node parent = args.jjtGetParent().jjtGetParent(); if (parent instanceof ASTAllocationExpression) { // maybe it is used inside a anonymous class ck(data, target, throwStatement, parent); } else { ck(data, target, throwStatement, args); } } else { Node child = throwStatement.jjtGetChild(0); while (child != null && child.jjtGetNumChildren() > 0 && !(child instanceof ASTName)) { child = child.jjtGetChild(0); } if (child != null) { if (child instanceof ASTName && !target.equals(child.getImage()) && !child.hasImageEqualTo(target + FILL_IN_STACKTRACE)) { Map<VariableNameDeclaration, List<NameOccurrence>> vars = ((ASTName) child).getScope().getDeclarations(VariableNameDeclaration.class); for (Map.Entry<VariableNameDeclaration, List<NameOccurrence>> entry : vars.entrySet()) { VariableNameDeclaration decl = entry.getKey(); List<NameOccurrence> occurrences = entry.getValue(); if (decl.getImage().equals(child.getImage())) { if (!isInitCauseCalled(target, occurrences)) { args = decl.getNode().jjtGetParent().getFirstDescendantOfType(ASTArgumentList.class); if (args != null) { ck(data, target, throwStatement, args); } } } } } else if (child instanceof ASTClassOrInterfaceType) { addViolation(data, throwStatement); } } } } return super.visit(catchStmt, data); }
private boolean thirdChildHasDottedName(Node primaryExpression) { Node thirdChild = primaryExpression.jjtGetChild(0).jjtGetChild(0).jjtGetChild(0); return thirdChild instanceof ASTName && ((ASTName) thirdChild).getImage().indexOf('.') == -1; }
private boolean isCompoundAssignment(Node primaryExpression) { return ((ASTAssignmentOperator) primaryExpression.jjtGetChild(1)).isCompound(); }