Search in sources :

Example 96 with Type

use of org.sonar.plugins.java.api.semantic.Type in project sonar-java by SonarSource.

the class AbsOnNegativeCheck method checkForIssue.

private void checkForIssue(ExpressionTree tree) {
    if (tree.is(Tree.Kind.MEMBER_SELECT)) {
        Symbol identifierSymbol = ((MemberSelectExpressionTree) tree).identifier().symbol();
        Type ownerType = identifierSymbol.owner().type();
        if ("MIN_VALUE".equals(identifierSymbol.name()) && (ownerType.is("java.lang.Integer") || ownerType.is("java.lang.Long"))) {
            reportIssue(tree, "Use the original value instead.");
        }
    } else {
        MethodInvocationTree nestedTree = extractMethodInvocation(tree);
        if (nestedTree != null && NEGATIVE_METHODS.anyMatch(nestedTree)) {
            reportIssue(nestedTree, "Use the original value instead.");
        }
    }
}
Also used : Type(org.sonar.plugins.java.api.semantic.Type) Symbol(org.sonar.plugins.java.api.semantic.Symbol) MethodInvocationTree(org.sonar.plugins.java.api.tree.MethodInvocationTree)

Example 97 with Type

use of org.sonar.plugins.java.api.semantic.Type in project sonar-java by SonarSource.

the class MembersDifferOnlyByCapitalizationCheck method retrieveMembers.

private static List<Symbol> retrieveMembers(Symbol.TypeSymbol classSymbol) {
    List<Symbol> results = Lists.newLinkedList();
    results.addAll(extractMembers(classSymbol, false));
    for (Type parentInterface : classSymbol.interfaces()) {
        results.addAll(extractMembers(parentInterface.symbol(), true));
    }
    Type superClass = classSymbol.superClass();
    if (superClass != null) {
        results.addAll(extractMembers(superClass.symbol(), true));
    }
    return results;
}
Also used : Type(org.sonar.plugins.java.api.semantic.Type) Symbol(org.sonar.plugins.java.api.semantic.Symbol)

Example 98 with Type

use of org.sonar.plugins.java.api.semantic.Type in project sonar-java by SonarSource.

the class PrimitiveWrappersInTernaryOperatorCheck method visitNode.

@Override
public void visitNode(Tree tree) {
    ConditionalExpressionTree cet = (ConditionalExpressionTree) tree;
    Type trueExpressionType = cet.trueExpression().symbolType();
    Type falseExpressionType = cet.falseExpression().symbolType();
    if (dissimilarPrimitiveTypeWrappers(trueExpressionType, falseExpressionType)) {
        reportIssue(cet.questionToken(), "Add an explicit cast to match types of operands.");
    }
}
Also used : JavaType(org.sonar.java.resolve.JavaType) Type(org.sonar.plugins.java.api.semantic.Type) ConditionalExpressionTree(org.sonar.plugins.java.api.tree.ConditionalExpressionTree)

Example 99 with Type

use of org.sonar.plugins.java.api.semantic.Type in project sonar-java by SonarSource.

the class PrintfFailCheck method verifyParameters.

private void verifyParameters(MethodInvocationTree mit, List<ExpressionTree> args, List<String> params) {
    int index = 0;
    for (String rawParam : params) {
        String param = rawParam;
        int argIndex = index;
        if (param.contains("$")) {
            argIndex = getIndex(param) - 1;
            if (argIndex == -1) {
                reportIssue(mit, "Arguments are numbered starting from 1.");
                return;
            }
            param = param.substring(param.indexOf('$') + 1);
        } else if (param.charAt(0) == '<') {
            // refers to previous argument
            argIndex = Math.max(0, argIndex - 1);
        } else {
            index++;
        }
        ExpressionTree argExpressionTree = args.get(argIndex);
        Type argType = argExpressionTree.symbolType();
        checkNumerical(mit, param, argType);
        checkTimeConversion(mit, param, argType);
    }
}
Also used : Type(org.sonar.plugins.java.api.semantic.Type) ExpressionTree(org.sonar.plugins.java.api.tree.ExpressionTree)

Example 100 with Type

use of org.sonar.plugins.java.api.semantic.Type in project sonar-java by SonarSource.

the class PrintfFailCheck method checkFormatting.

private void checkFormatting(MethodInvocationTree mit, boolean isMessageFormat) {
    if (mit.arguments().stream().map(ExpressionTree::symbolType).anyMatch(Type::isUnknown)) {
        // method resolved but not all the parameters are
        return;
    }
    ExpressionTree formatStringTree;
    List<ExpressionTree> args;
    // Check type of first argument:
    if (mit.arguments().get(0).symbolType().is("java.lang.String")) {
        formatStringTree = mit.arguments().get(0);
        args = mit.arguments().subList(1, mit.arguments().size());
    } else {
        // format method with "Locale" first argument, skip that one.
        formatStringTree = mit.arguments().get(1);
        args = mit.arguments().subList(2, mit.arguments().size());
    }
    if (formatStringTree.is(Tree.Kind.STRING_LITERAL)) {
        String formatString = LiteralUtils.trimQuotes(((LiteralTree) formatStringTree).value());
        if (isMessageFormat) {
            handleMessageFormat(mit, formatString, args);
        } else {
            handlePrintfFormat(mit, formatString, args);
        }
    }
}
Also used : Type(org.sonar.plugins.java.api.semantic.Type) ExpressionTree(org.sonar.plugins.java.api.tree.ExpressionTree)

Aggregations

Type (org.sonar.plugins.java.api.semantic.Type)164 Test (org.junit.Test)67 Symbol (org.sonar.plugins.java.api.semantic.Symbol)23 ExpressionTree (org.sonar.plugins.java.api.tree.ExpressionTree)23 MethodJavaSymbol (org.sonar.java.resolve.JavaSymbol.MethodJavaSymbol)18 ClassTree (org.sonar.plugins.java.api.tree.ClassTree)18 IdentifierTree (org.sonar.plugins.java.api.tree.IdentifierTree)17 MethodInvocationTree (org.sonar.plugins.java.api.tree.MethodInvocationTree)17 MethodTree (org.sonar.plugins.java.api.tree.MethodTree)17 JavaType (org.sonar.java.resolve.JavaType)16 Tree (org.sonar.plugins.java.api.tree.Tree)15 VariableTree (org.sonar.plugins.java.api.tree.VariableTree)13 MemberSelectExpressionTree (org.sonar.plugins.java.api.tree.MemberSelectExpressionTree)12 SymbolicValue (org.sonar.java.se.symbolicvalues.SymbolicValue)11 AssignmentExpressionTree (org.sonar.plugins.java.api.tree.AssignmentExpressionTree)10 ArrayList (java.util.ArrayList)9 TypeTree (org.sonar.plugins.java.api.tree.TypeTree)9 VisibleForTesting (com.google.common.annotations.VisibleForTesting)8 RelationalSymbolicValue (org.sonar.java.se.symbolicvalues.RelationalSymbolicValue)8 CompilationUnitTree (org.sonar.plugins.java.api.tree.CompilationUnitTree)8