private static boolean hasEnumKey(Type symbolType) { Type type = symbolType; if (type instanceof MethodJavaType) { type = ((MethodJavaType) type).resultType(); } if (type instanceof ParametrizedTypeJavaType) { ParametrizedTypeJavaType parametrizedTypeJavaType = (ParametrizedTypeJavaType) type; List<TypeVariableJavaType> typeParameters = parametrizedTypeJavaType.typeParameters(); if (!typeParameters.isEmpty()) { return parametrizedTypeJavaType.substitution(typeParameters.get(0)).symbol().isEnum(); } } return false; }
private static boolean hasEnumKey(Type symbolType) { Type type = symbolType; if (type instanceof MethodJavaType) { type = ((MethodJavaType) type).resultType(); } if (type instanceof ParametrizedTypeJavaType) { ParametrizedTypeJavaType parametrizedTypeJavaType = (ParametrizedTypeJavaType) type; List<TypeVariableJavaType> typeParameters = parametrizedTypeJavaType.typeParameters(); if (!typeParameters.isEmpty()) { return parametrizedTypeJavaType.substitution(typeParameters.get(0)).symbol().isEnum(); } } return false; }
private void checkIssue(Type type, Tree reportTree, TypeTree typeTree) { if (type.isSubtypeOf("java.util.Set") && !type.isSubtypeOf("java.util.EnumSet") && type instanceof ParametrizedTypeJavaType) { ParametrizedTypeJavaType parametrizedType = (ParametrizedTypeJavaType) type; List<TypeVariableJavaType> typeParameters = parametrizedType.typeParameters(); Type variableType = typeTree.symbolType(); if(typeParameters.isEmpty() && variableType instanceof ParametrizedTypeJavaType) { // for java 7 diamond operator lookup declaration. parametrizedType = (ParametrizedTypeJavaType) variableType; typeParameters = parametrizedType.typeParameters(); } if(!typeParameters.isEmpty()) { Type typeParameter = parametrizedType.substitution(typeParameters.get(0)); if (typeParameter != null && typeParameter.symbol().isEnum()) { reportIssue(reportTree, "Convert this Set to an EnumSet."); } } } }
@Override public void visitNode(Tree tree) { if (!hasSemantic()) { return; } MethodTree methodTree = (MethodTree) tree; Symbol.MethodSymbol methodSymbol = methodTree.symbol(); if (!methodSymbol.isPublic() || !Boolean.FALSE.equals(methodTree.isOverriding()) || isOverloaded(methodSymbol)) { return; } boolean springInjectionAnnotated = isSpringInjectionAnnotated(methodSymbol.metadata()); methodTree.parameters().stream() .map(VariableTree::symbol) .filter(p -> p.type().isClass() && !p.type().symbol().isEnum() && !p.type().is("java.lang.String")) .filter(p -> !(springInjectionAnnotated && p.type().is("java.util.Collection"))) .forEach(p -> handleParameter(p, springInjectionAnnotated)); }
private void checkIssue(Type type, Tree reportTree, TypeTree typeTree) { if (type.isSubtypeOf("java.util.Set") && !type.isSubtypeOf("java.util.EnumSet") && type instanceof ParametrizedTypeJavaType) { ParametrizedTypeJavaType parametrizedType = (ParametrizedTypeJavaType) type; List<TypeVariableJavaType> typeParameters = parametrizedType.typeParameters(); Type variableType = typeTree.symbolType(); if(typeParameters.isEmpty() && variableType instanceof ParametrizedTypeJavaType) { // for java 7 diamond operator lookup declaration. parametrizedType = (ParametrizedTypeJavaType) variableType; typeParameters = parametrizedType.typeParameters(); } if(!typeParameters.isEmpty()) { Type typeParameter = parametrizedType.substitution(typeParameters.get(0)); if (typeParameter != null && typeParameter.symbol().isEnum()) { reportIssue(reportTree, "Convert this Set to an EnumSet."); } } } }
@Override public void visitNode(Tree tree) { if (!hasSemantic()) { return; } MethodTree methodTree = (MethodTree) tree; Symbol.MethodSymbol methodSymbol = methodTree.symbol(); if (!methodSymbol.isPublic() || !Boolean.FALSE.equals(methodTree.isOverriding()) || isOverloaded(methodSymbol)) { return; } boolean springInjectionAnnotated = isSpringInjectionAnnotated(methodSymbol.metadata()); methodTree.parameters().stream() .map(VariableTree::symbol) .filter(p -> p.type().isClass() && !p.type().symbol().isEnum() && !p.type().is("java.lang.String")) .filter(p -> !(springInjectionAnnotated && p.type().is("java.util.Collection"))) .forEach(p -> handleParameter(p, springInjectionAnnotated)); }
private static boolean isObject(Type operandType) { return operandType.erasure().isClass() && !operandType.symbol().isEnum(); }
private static boolean isObject(Type operandType) { return operandType.erasure().isClass() && !operandType.symbol().isEnum(); }
@Override public void visitNode(Tree tree) { TypeTree identifier = ((NewClassTree) tree).identifier(); Symbol.TypeSymbol newClassTypeSymbol = identifier.symbolType().symbol(); if (!newClassTypeSymbol.isEnum() && hasOnlyStaticMethodsAndFields(newClassTypeSymbol) && !instantiateOwnClass(identifier, newClassTypeSymbol)) { String message = "Remove this instantiation."; String name = getNewClassName(identifier); if (name != null) { message = "Remove this instantiation of \"{0}\"."; } reportIssue(identifier, MessageFormat.format(message, name)); } }
private static boolean isSwitchOverEnum(SwitchStatementTree switchStatementTree) { Type type = switchStatementTree.expression().symbolType(); return type.symbol().isEnum(); } }
@CheckForNull private static ExpressionTree enumExpressionFromSwitchOnEnum(CaseLabelTree tree) { Tree parent = tree.parent(); while (!parent.is(Tree.Kind.SWITCH_STATEMENT)) { parent = parent.parent(); } ExpressionTree enumExpression = ((SwitchStatementTree) parent).expression(); return enumExpression.symbolType().symbol().isEnum() ? enumExpression : null; }
private static boolean isEnum(ExpressionTree exp) { return exp.symbolType().symbol().isEnum(); } }
private static boolean isSwitchOnEnum(SwitchStatementTree switchStatementTree) { return switchStatementTree.expression().symbolType().symbol().isEnum(); }
private static boolean isSwitchOnEnum(SwitchStatementTree switchStatementTree) { return switchStatementTree.expression().symbolType().symbol().isEnum(); }
@CheckForNull private static ExpressionTree enumExpressionFromSwitchOnEnum(CaseLabelTree tree) { Tree parent = tree.parent(); while (!parent.is(Tree.Kind.SWITCH_STATEMENT)) { parent = parent.parent(); } ExpressionTree enumExpression = ((SwitchStatementTree) parent).expression(); return enumExpression.symbolType().symbol().isEnum() ? enumExpression : null; }
private static boolean isSwitchOverEnum(SwitchStatementTree switchStatementTree) { Type type = switchStatementTree.expression().symbolType(); return type.symbol().isEnum(); } }
@Override public void visitNode(Tree tree) { TypeTree identifier = ((NewClassTree) tree).identifier(); Symbol.TypeSymbol newClassTypeSymbol = identifier.symbolType().symbol(); if (!newClassTypeSymbol.isEnum() && hasOnlyStaticMethodsAndFields(newClassTypeSymbol) && !instantiateOwnClass(identifier, newClassTypeSymbol)) { String message = "Remove this instantiation."; String name = getNewClassName(identifier); if (name != null) { message = "Remove this instantiation of \"{0}\"."; } reportIssue(identifier, MessageFormat.format(message, name)); } }
@Override public void visitNode(Tree tree) { TypeTree identifier = ((NewClassTree) tree).identifier(); Symbol.TypeSymbol newClassTypeSymbol = identifier.symbolType().symbol(); if (!newClassTypeSymbol.isEnum() && hasOnlyStaticMethods(newClassTypeSymbol) && !instantiateOwnClass(identifier, newClassTypeSymbol)) { String message = "Remove this instantiation."; String name = getNewClassName(identifier); if (name != null) { message = "Remove this instantiation of \"{0}\"."; } addIssue(tree, MessageFormat.format(message, name)); } }
private boolean isObject(Type operandType) { return operandType.erasure().isClass() && !operandType.symbol().isEnum(); }
private static boolean isEnum(ExpressionTree exp) { return exp.symbolType().symbol().isEnum(); } }