private boolean isSerialVersionUID(ASTFieldDeclaration field) { return "serialVersionUID".equals(field.getVariableName()) && field.isStatic() && field.isFinal() && field.getType() == long.class; }
private boolean isSerialVersionUID(ASTFieldDeclaration field) { return "serialVersionUID".equals(field.getVariableName()) && field.isStatic() && field.isFinal() && field.getType() == long.class; }
@Override public Object visit(ASTCompilationUnit node, Object data) { List<ASTFieldDeclaration> fieldDeclarations = node.findDescendantsOfType(ASTFieldDeclaration.class); if (fieldDeclarations == null || fieldDeclarations.isEmpty()) { return super.visit(node, data); } for (ASTFieldDeclaration fieldDeclaration : fieldDeclarations) { if (fieldDeclaration.getType() == ThreadLocal.class) { if (checkThreadLocalWithInitalValue(fieldDeclaration)) { continue; } checkThreadLocal(fieldDeclaration, node, data); } } return super.visit(node, data); }
@Override public Object visit(ASTClassOrInterfaceDeclaration node, Object data) { if (!isPojo(node)) { return super.visit(node, data); } try { List<Node> fields = node.findChildNodesWithXPath( "ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/FieldDeclaration"); for (Node fieldNode : fields) { ASTFieldDeclaration field = (ASTFieldDeclaration)fieldNode; boolean shouldProcess = !field.isPublic() && !field.isStatic() && !field.isTransient(); if (!shouldProcess) { continue; } Class type = field.getType(); // TODO works only in current compilation file, by crossing files will be null if (type != null && type.isPrimitive()) { addViolationWithMessage(data, field.getFirstDescendantOfType(ASTType.class), "java.oop.PojoMustUsePrimitiveFieldRule.violation.msg", new Object[] {field.getVariableName()}); } } } catch (JaxenException e) { throw new RuntimeException(e.getMessage(), e); } return super.visit(node, data); } }
@Override public Object visit(ASTClassOrInterfaceDeclaration node, Object data) { ASTExtendsList extendsList = node.getFirstChildOfType(ASTExtendsList.class); if (extendsList == null) { return super.visit(node, data); } if (!hasThread(extendsList)) { return super.visit(node, data); } List<ASTMethodDeclaration> methodDeclarations = node.findDescendantsOfType(ASTMethodDeclaration.class); if (methodDeclarations == null || methodDeclarations.isEmpty()) { return super.visit(node, data); } checkMathRandom(methodDeclarations, data); List<ASTFieldDeclaration> fieldDeclarations = node.findDescendantsOfType(ASTFieldDeclaration.class); if (fieldDeclarations == null || fieldDeclarations.isEmpty()) { return super.visit(node, data); } for (ASTFieldDeclaration fieldDeclaration : fieldDeclarations) { if (fieldDeclaration.getType() == Random.class && fieldDeclaration.isStatic()) { checkRandom(fieldDeclaration, methodDeclarations, data); } } return super.visit(node, data); }