@Override public Object visit(ASTLocalVariableDeclaration decl, Object data) { for (int i = 0; i < decl.jjtGetNumChildren(); i++) { if (!(decl.jjtGetChild(i) instanceof ASTVariableDeclarator)) { continue; } ASTVariableDeclaratorId node = (ASTVariableDeclaratorId) decl.jjtGetChild(i).jjtGetChild(0); // TODO this isArray() check misses some cases // need to add DFAish code to determine if an array // is initialized locally or gotten from somewhere else if (!node.getNameDeclaration().isArray() && !actuallyUsed(node.getUsages())) { addViolation(data, node, node.getNameDeclaration().getImage()); } } return data; }
@Override public Object visit(ASTVariableDeclaratorId node, Object data) { if (!TypeHelper.isExactlyAny(node.getNameDeclaration(), String.class) && !TypeHelper.isExactlyAny(node.getNameDeclaration(), String[].class)) { return data; } boolean isArray = node.isArray(); for (NameOccurrence occ : node.getUsages()) { JavaNameOccurrence jocc = (JavaNameOccurrence) occ; NameOccurrence qualifier = jocc.getNameForWhichThisIsAQualifier(); if (qualifier != null) { if (!isArray && isNotAMethodReference(qualifier) && qualifier.getImage().indexOf("toString") != -1) { addViolation(data, jocc.getLocation()); } else if (isArray && isNotAName(qualifier) && qualifier.getImage().equals("toString")) { addViolation(data, jocc.getLocation()); } } } return data; }
if (!targetTypename().equals(node.getNameDeclaration().getTypeImage())) { return data;
@Override public Object visit(ASTVariableDeclaratorId node, Object data) { Node nameNode = node.getTypeNameNode(); if (nameNode == null || nameNode instanceof ASTPrimitiveType || !appliesToClassName(node.getNameDeclaration().getTypeImage())) { return data; } List<NameOccurrence> declars = node.getUsages(); for (NameOccurrence occ : declars) { JavaNameOccurrence jocc = (JavaNameOccurrence) occ; if (!isTargetMethod(jocc)) { continue; } Node expr = jocc.getLocation().jjtGetParent().jjtGetParent().jjtGetParent(); checkNodeAndReport(data, jocc.getLocation(), expr); } return data; }
@Override public Object visit(ASTVariableDeclaratorId node, Object data) { if (!TypeHelper.isExactlyAny(node.getNameDeclaration(), StringBuffer.class, StringBuilder.class)) { return data;
@Override public Object visit(ASTVariableDeclaratorId node, Object data) { if (node == null || node.getNameDeclaration() == null) { return super.visit(node, data); } String name = node.getNameDeclaration().getTypeImage(); if (name != null) { populateType(node, name); } return super.visit(node, data); }
@Override public Object visit(ASTLocalVariableDeclaration decl, Object data) { for (int i = 0; i < decl.jjtGetNumChildren(); i++) { if (!(decl.jjtGetChild(i) instanceof ASTVariableDeclarator)) { continue; } ASTVariableDeclaratorId node = (ASTVariableDeclaratorId) decl.jjtGetChild(i).jjtGetChild(0); // TODO this isArray() check misses some cases // need to add DFAish code to determine if an array // is initialized locally or gotten from somewhere else if (!node.getNameDeclaration().isArray() && !actuallyUsed(node.getUsages())) { addViolation(data, node, node.getNameDeclaration().getImage()); } } return data; }
@Override public Object visit(ASTVariableDeclaratorId node, Object data) { if (!TypeHelper.isExactlyAny(node.getNameDeclaration(), String.class) && !TypeHelper.isExactlyAny(node.getNameDeclaration(), String[].class)) { return data; } boolean isArray = node.isArray(); for (NameOccurrence occ : node.getUsages()) { JavaNameOccurrence jocc = (JavaNameOccurrence) occ; NameOccurrence qualifier = jocc.getNameForWhichThisIsAQualifier(); if (qualifier != null) { if (!isArray && isNotAMethodReference(qualifier) && qualifier.getImage().indexOf("toString") != -1) { addViolation(data, jocc.getLocation()); } else if (isArray && isNotAName(qualifier) && qualifier.getImage().equals("toString")) { addViolation(data, jocc.getLocation()); } } } return data; }
if (!targetTypename().equals(node.getNameDeclaration().getTypeImage())) { return data;
@Override public Object visit(ASTVariableDeclaratorId node, Object data) { if (!TypeHelper.isExactlyAny(node.getNameDeclaration(), StringBuffer.class, StringBuilder.class)) { return data;
@Override public Object visit(ASTVariableDeclaratorId node, Object data) { Node nameNode = node.getTypeNameNode(); if (nameNode == null || nameNode instanceof ASTPrimitiveType || !appliesToClassName(node.getNameDeclaration().getTypeImage())) { return data; } List<NameOccurrence> declars = node.getUsages(); for (NameOccurrence occ : declars) { JavaNameOccurrence jocc = (JavaNameOccurrence) occ; if (!isTargetMethod(jocc)) { continue; } Node expr = jocc.getLocation().jjtGetParent().jjtGetParent().jjtGetParent(); checkNodeAndReport(data, jocc.getLocation(), expr); } return data; }