/** * Extracts the variable name by traversing PrimaryExpression -> PrimaryPrefix -> Name. * Also check if there is a PrimaryExpression -> PrimarySuffix which indicates a field or array access. * * @returns the Name or null if the PrimaryPrefix is "this" or "super" */ private ASTName singleVariableName(ASTPrimaryExpression primaryExpression) { final ASTPrimaryPrefix primaryPrefix = primaryExpression.getFirstChildOfType(ASTPrimaryPrefix.class); final ASTPrimarySuffix primarySuffix = primaryExpression.getFirstChildOfType(ASTPrimarySuffix.class); if (primarySuffix != null || primaryPrefix == null) { return null; } return primaryPrefix.getFirstChildOfType(ASTName.class); }
if (node.jjtGetNumChildren() == 0 || !(node.jjtGetChild(0) instanceof ASTName)) { return super.visit(node, data); if ("Boolean.valueOf".equals(((ASTName) node.jjtGetChild(0)).getImage()) || "java.lang.Boolean.valueOf".equals(((ASTName) node.jjtGetChild(0)).getImage())) { ASTPrimaryExpression parent = (ASTPrimaryExpression) node.jjtGetParent(); ASTPrimarySuffix suffix = parent.getFirstDescendantOfType(ASTPrimarySuffix.class); if (suffix == null) { if (prefix.hasDescendantOfType(ASTBooleanLiteral.class)) { super.addViolation(data, node); return data; ASTLiteral literal = prefix.getFirstDescendantOfType(ASTLiteral.class); if (literal != null && ("\"true\"".equals(literal.getImage()) || "\"false\"".equals(literal.getImage()))) {
private void analyze(ASTPrimaryPrefix prefixNode) { List<ASTName> names = prefixNode.findDescendantsOfType(ASTName.class); baseName = "unknown"; methodName = "unknown"; if (!names.isEmpty()) { baseName = names.get(0).getImage(); int dot = baseName.lastIndexOf('.'); if (dot == -1) { methodName = baseName; baseName = THIS; } else { methodName = baseName.substring(dot + 1); baseName = baseName.substring(0, dot); baseNameInWhitelist = baseName.matches(PREFIX_EXCLUSION_PATTERN); } } else { if (prefixNode.usesThisModifier()) { baseName = THIS; } else if (prefixNode.usesSuperModifier()) { baseName = SUPER; } } }
/** * Extracts the method name of the method call. * @param prefix the method call * @return the name of the called method */ private String getMethodCallName(ASTPrimaryPrefix prefix) { String result = ""; if (prefix.jjtGetNumChildren() == 1 && prefix.jjtGetChild(0) instanceof ASTName) { result = getLastPartOfName(prefix.jjtGetChild(0)); } return result; }
if (guardCall.jjtGetNumChildren() < 1 || guardCall.jjtGetChild(0).getImage() == null) { continue; String guardMethodCall = getLastPartOfName(guardCall.jjtGetChild(0)); boolean guardMethodCallMatches = guardStmtByLogLevel.get(methodCall).contains(guardMethodCall); boolean hasArguments = guardCall.jjtGetParent().hasDescendantOfType(ASTArgumentList.class); } else if (guardMethodCallMatches && hasArguments) { String guardArgLogLevel = getLogLevelName(guardCall.jjtGetParent(), guardMethodCall); foundGuard = logLevel.equals(guardArgLogLevel);
private ASTClassOrInterfaceType getTypeOfPrimaryPrefix(ASTPrimarySuffix node) { return node.jjtGetParent().getFirstChildOfType(ASTPrimaryPrefix.class) .getFirstDescendantOfType(ASTClassOrInterfaceType.class); } }
public boolean isStandAlonePrimitive() { if (jjtGetNumChildren() != 1) { return false; } ASTPrimaryExpression primaryExpression = getFirstChildOfType(ASTPrimaryExpression.class); if (primaryExpression == null || primaryExpression.jjtGetNumChildren() != 1) { return false; } ASTPrimaryPrefix primaryPrefix = primaryExpression.getFirstChildOfType(ASTPrimaryPrefix.class); if (primaryPrefix == null || primaryPrefix.jjtGetNumChildren() != 1) { return false; } ASTLiteral literal = primaryPrefix.getFirstChildOfType(ASTLiteral.class); // if it is not a string literal and not a null, then it is one of // byte, short, char, int, long, float, double, boolean return literal != null && !literal.isStringLiteral() && (literal.jjtGetNumChildren() == 0 || !(literal.jjtGetChild(0) instanceof ASTNullLiteral)); } }
final public void PrimaryPrefix() throws ParseException { ASTPrimaryPrefix jjtn000 = new ASTPrimaryPrefix(this, JJTPRIMARYPREFIX); boolean jjtc000 = true; jjtree.openNodeScope(jjtn000); jjtn000.jjtSetFirstToken(getToken(1));Token t; try { switch (jj_nt.kind) { jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; jjtn000.jjtSetLastToken(getToken(0)); jjtn000.setUsesThisModifier(); } else { switch (jj_nt.kind) { jjtree.closeNodeScope(jjtn000, true); jjtc000 = false; jjtn000.jjtSetLastToken(getToken(0)); jjtn000.setUsesSuperModifier(); break; default: if (jjtc000) { jjtree.closeNodeScope(jjtn000, true); jjtn000.jjtSetLastToken(getToken(0));
if (!primaryPrefix.usesSuperModifier()) { return super.visit(node, data); if (argumentPrimaryPrefix.jjtGetNumChildren() == 0) { Node argumentPrimaryPrefixChild = argumentPrimaryPrefix.jjtGetChild(0); if (!(argumentPrimaryPrefixChild instanceof ASTName)) {
ASTPrimarySuffix suffix = expr.getFirstChildOfType(ASTPrimarySuffix.class); if (prefix != null && suffix != null) { if (prefix.getImage() == null) { ASTName prefixName = prefix.getFirstChildOfType(ASTName.class); if (prefixName != null && closeTargets.contains(prefixName.getImage())) { String prefixPlusSuffix = prefix.getImage() + "." + suffix.getImage(); if (closeTargets.contains(prefixPlusSuffix)) {
private void checkMathRandom(List<ASTMethodDeclaration> methodDeclarations, Object data) { for (ASTMethodDeclaration methodDeclaration : methodDeclarations) { List<ASTPrimaryPrefix> primaryPrefixes = methodDeclaration.findDescendantsOfType(ASTPrimaryPrefix.class); if (primaryPrefixes == null || primaryPrefixes.isEmpty()) { continue; } for (ASTPrimaryPrefix primaryPrefix : primaryPrefixes) { if (primaryPrefix.getType() != Math.class) { continue; } ASTName name = primaryPrefix.getFirstChildOfType(ASTName.class); if (name == null || name.getImage() == null || !name.getImage().endsWith(MATH_RANDOM_METHOD)) { continue; } addViolationWithMessage(data, primaryPrefix, MESSAGE_KEY_PREFIX + ".violation.msg.math.random"); } } }
private String getVariableName(ASTPrimaryExpression node) { ASTPrimaryPrefix prefix = node.getFirstDescendantOfType(ASTPrimaryPrefix.class); if (prefix.usesThisModifier()) { List<ASTPrimarySuffix> suffixes = node.findChildrenOfType(ASTPrimarySuffix.class); if (suffixes.size() > 1) { if (!suffixes.get(1).isArguments()) { // not a method call return suffixes.get(0).getImage(); } } } ASTName name = prefix.getFirstDescendantOfType(ASTName.class); String variableName = null; if (name != null) { int dotIndex = name.getImage().indexOf("."); if (dotIndex == -1) { variableName = name.getImage(); } else { variableName = name.getImage().substring(0, dotIndex); } } return variableName; }
.jjtGetChild(0); String name = null; if (pp.usesThisModifier()) { ASTPrimarySuffix priSuf = expr.getFirstDescendantOfType(ASTPrimarySuffix.class); name = priSuf.getImage(); } else { ASTName astName = (ASTName) pp.jjtGetChild(0); name = astName.getImage();
private boolean isStaticSimpleDateFormatCall(ASTPrimaryExpression primaryExpression, Set<String> localSimpleDateFormatNames) { if (primaryExpression.jjtGetNumChildren() == 0) { return false; } ASTName name = primaryExpression.getFirstDescendantOfType(ASTName.class); if (name == null || name.getType() != SimpleDateFormat.class) { return false; } if (localSimpleDateFormatNames.contains(name.getNameDeclaration().getName())) { return false; } ASTPrimaryPrefix primaryPrefix = (ASTPrimaryPrefix)primaryExpression.jjtGetChild(0); if (primaryPrefix.getType() != SimpleDateFormat.class) { return false; } Token token = (Token)primaryPrefix.jjtGetLastToken(); return FORMAT_METHOD_NAME.equals(token.image); }
private static boolean isNotLiteral(ASTPrimaryExpression expression) { ASTPrimaryPrefix prefix = expression.getFirstDescendantOfType(ASTPrimaryPrefix.class); if (prefix != null) { return !prefix.hasDescendantOfType(ASTLiteral.class); } return true; }
private String getNameFromPrimaryPrefix(ASTPrimaryPrefix pp) { if (pp.jjtGetNumChildren() == 1 && pp.jjtGetChild(0) instanceof ASTName) { return ((ASTName) pp.jjtGetChild(0)).getImage(); } return null; } }
@Override public Object visit(ASTPrimaryPrefix node, Object data) { if (node.jjtGetNumChildren() == 0 || !(node.jjtGetChild(0) instanceof ASTName)) { return super.visit(node, data); } String image = ((ASTName) node.jjtGetChild(0)).getImage(); if (image.startsWith("java.lang.")) { image = image.substring(10); } boolean checkBoolean = ((RuleContext) data).getLanguageVersion() .compareTo(LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion("1.5")) >= 0; if (PREFIX_SET.contains(image) || checkBoolean && "Boolean.valueOf".equals(image)) { ASTPrimaryExpression parent = (ASTPrimaryExpression) node.jjtGetParent(); if (parent.jjtGetNumChildren() >= 3) { Node n = parent.jjtGetChild(2); if (n instanceof ASTPrimarySuffix) { ASTPrimarySuffix suffix = (ASTPrimarySuffix) n; image = suffix.getImage(); if (SUFFIX_SET.contains(image) || checkBoolean && "booleanValue".equals(image)) { super.addViolation(data, node); return data; } } } } return super.visit(node, data); }
private String getNameImage(ASTPrimaryExpression node) { ASTPrimaryPrefix prefix = node.getFirstDescendantOfType(ASTPrimaryPrefix.class); ASTName name = prefix.getFirstDescendantOfType(ASTName.class); String image = null; if (name != null) { image = name.getImage(); } return image; }
public boolean isStandAlonePrimitive() { if (jjtGetNumChildren() != 1) { return false; } ASTPrimaryExpression primaryExpression = getFirstChildOfType(ASTPrimaryExpression.class); if (primaryExpression == null || primaryExpression.jjtGetNumChildren() != 1) { return false; } ASTPrimaryPrefix primaryPrefix = primaryExpression.getFirstChildOfType(ASTPrimaryPrefix.class); if (primaryPrefix == null || primaryPrefix.jjtGetNumChildren() != 1) { return false; } ASTLiteral literal = primaryPrefix.getFirstChildOfType(ASTLiteral.class); // if it is not a string literal and not a null, then it is one of // byte, short, char, int, long, float, double, boolean return literal != null && !literal.isStringLiteral() && (literal.jjtGetNumChildren() == 0 || !(literal.jjtGetChild(0) instanceof ASTNullLiteral)); } }