private void checkVariableUsages() { for (VariableTree variableTree : variables) { Symbol symbol = variableTree.symbol(); if (symbol.usages().size() == assignments.get(symbol).size()) { IdentifierTree simpleName = variableTree.simpleName(); reportIssue(simpleName, "Remove this unused \"" + simpleName + "\" local variable."); } } }
private void checkVariableUsages() { for (VariableTree variableTree : variables) { Symbol symbol = variableTree.symbol(); if (symbol.usages().size() == assignments.get(symbol).size()) { addIssue(variableTree, "Remove this unused \"" + variableTree.simpleName() + "\" local variable."); } } }
private static boolean matchingParameters(List<VariableTree> parameters, Arguments arguments) { return arguments.size() == parameters.size() && IntStream.range(0, arguments.size()).allMatch(i -> { List<IdentifierTree> usages = parameters.get(i).symbol().usages(); return usages.size() == 1 && usages.get(0).equals(arguments.get(i)); }); }
private void checkVariableUsages() { for (VariableTree variableTree : variables) { Symbol symbol = variableTree.symbol(); if (symbol.usages().size() == assignments.get(symbol).size()) { IdentifierTree simpleName = variableTree.simpleName(); reportIssue(simpleName, "Remove this unused \"" + simpleName + "\" local variable."); } } }
private void createSymbol(IdentifierTree declaration, Tree tree) { org.sonar.plugins.java.api.semantic.Symbol semanticSymbol = semanticModel.getSymbol(tree); if (semanticSymbol == null) { semanticSymbol = Symbols.unknownSymbol; } createSymbol(declaration, semanticSymbol.usages()); }
private static boolean isReassigned(Symbol variableSymbol, Tree method) { Collection<IdentifierTree> usages = variableSymbol.usages(); ReAssignmentFinder reAssignmentFinder = new ReAssignmentFinder(usages); method.accept(reAssignmentFinder); return reAssignmentFinder.foundReAssignment; }
private static boolean isReassigned(Symbol variableSymbol, Tree method) { Collection<IdentifierTree> usages = variableSymbol.usages(); ReAssignmentFinder reAssignmentFinder = new ReAssignmentFinder(usages); method.accept(reAssignmentFinder); return reAssignmentFinder.foundReAssignment; }
private void createSymbol(IdentifierTree declaration, Tree tree) { org.sonar.plugins.java.api.semantic.Symbol semanticSymbol = semanticModel.getSymbol(tree); if (semanticSymbol == null) { semanticSymbol = Symbols.unknownSymbol; } createSymbol(declaration, semanticSymbol.usages()); }
@Override public void visitMethod(MethodTree tree) { List<VariableTree> parameters = tree.parameters(); if (argumentIndex >= 0 && argumentIndex <= (parameters.size() - 1)) { VariableTree variableTree = parameters.get(argumentIndex); scanner.checkIfMapVariableIsModified(variableTree.symbol().usages()); } super.visitMethod(tree); }
@Override public void visitNode(Tree tree) { TypeSymbol classSymbol = ((ClassTree) tree).symbol(); Set<Symbol> fieldsReadOnAnotherInstance = FieldsReadOnAnotherInstanceVisitor.getFrom(tree); classSymbol.memberSymbols().stream() .filter(PrivateFieldUsedLocallyCheck::isPrivateField) .filter(s -> !(s.isFinal() && s.isStatic())) .filter(s -> !hasAnnotation(s)) .filter(s -> !s.usages().isEmpty()) .filter(s -> !fieldsReadOnAnotherInstance.contains(s)) .forEach(s -> checkPrivateField(s, classSymbol)); }
private void createSymbol(IdentifierTree declaration, Tree tree) { org.sonar.plugins.java.api.semantic.Symbol semanticSymbol = semanticModel.getSymbol(tree); if (semanticSymbol == null) { semanticSymbol = Symbols.unknownSymbol; } createSymbol(declaration, semanticSymbol.usages()); }
@Override public void visitNode(Tree tree) { TypeSymbol classSymbol = ((ClassTree) tree).symbol(); Set<Symbol> fieldsReadOnAnotherInstance = FieldsReadOnAnotherInstanceVisitor.getFrom(tree); classSymbol.memberSymbols().stream() .filter(PrivateFieldUsedLocallyCheck::isPrivateField) .filter(s -> !(s.isFinal() && s.isStatic())) .filter(s -> !hasAnnotation(s)) .filter(s -> !s.usages().isEmpty()) .filter(s -> !fieldsReadOnAnotherInstance.contains(s)) .forEach(s -> checkPrivateField(s, classSymbol)); }
private boolean variableUsedOnlyToGetClass(IdentifierTree tree) { if ("this".equals(tree.name()) || "super".equals(tree.name())) { return false; } Symbol symbol = tree.symbol(); return symbol.usages().size() == 1 && hasBeenInitialized(tree); }
private static boolean onlyRethrows(CatchTree catchTree) { List<StatementTree> catchBody = catchTree.block().body(); if (catchBody.size() == 1) { return catchBody.get(0).is(Tree.Kind.THROW_STATEMENT) && catchTree.parameter().symbol().usages().contains(((ThrowStatementTree) catchBody.get(0)).expression()); } return false; } }
@Override public void visitVariable(VariableTree tree) { createSymbol(tree.simpleName(), tree.symbol().usages()); super.visitVariable(tree); }
@Override public void visitVariable(VariableTree tree) { createSymbol(tree.simpleName(), tree.symbol().usages()); super.visitVariable(tree); }
private void checkSymbol(Symbol symbol) { for (IdentifierTree usageIdentifier : symbol.usages()) { Tree parent = usageIdentifier.parent(); if (parent.is(Kind.MEMBER_SELECT) && ((MemberSelectExpressionTree) parent).expression().is(Kind.MEMBER_SELECT)) { reportIssue(parent, String.format(MESSAGE, symbol.name())); } } }
@Override protected void onMethodInvocationFound(MethodInvocationTree mit) { Tree parent = mit.parent(); if (parent.is(Tree.Kind.EXPRESSION_STATEMENT) || (parent.is(Tree.Kind.VARIABLE) && ((VariableTree) parent).symbol().usages().isEmpty())) { reportIssue(parent, "Do something with the \"" + mit.symbolType().name() + "\" value returned by \"" + mit.symbol().name() + "\"."); } }
@Override protected void onMethodInvocationFound(MethodInvocationTree mit) { Tree parent = mit.parent(); if (parent.is(Tree.Kind.EXPRESSION_STATEMENT) || (parent.is(Tree.Kind.VARIABLE) && ((VariableTree) parent).symbol().usages().isEmpty())) { reportIssue(parent, "Do something with the \"" + mit.symbolType().name() + "\" value returned by \"" + mit.symbol().name() + "\"."); } }
private static boolean usesNullKey(Symbol symbol) { List<IdentifierTree> usages = symbol.usages(); for (IdentifierTree usage : usages) { if (usage.parent().is(Tree.Kind.MEMBER_SELECT) && usage.parent().parent().is(Tree.Kind.METHOD_INVOCATION)) { MethodInvocationTree mit = (MethodInvocationTree) usage.parent().parent(); if (mapPut.matches(mit) && mit.arguments().get(0).is(Tree.Kind.NULL_LITERAL)) { return true; } } } return false; }