private void checkUsage(IdentifierTree parameterUsage, MethodTree methodTree) { Tree parameterParent = parameterUsage.parent(); while (!parameterParent.equals(methodTree) && !assertReported.contains(parameterParent)) { if (parameterParent.is(Tree.Kind.ASSERT_STATEMENT)) { assertReported.add((AssertStatementTree) parameterParent); reportIssue(parameterParent, "Replace this assert with a proper check."); return; } parameterParent = parameterParent.parent(); } } }
@CheckForNull private static SynchronizedStatementTree getParentSynchronizedStatement(IdentifierTree usage) { Tree parent = usage.parent(); while (parent != null && !parent.is(Tree.Kind.SYNCHRONIZED_STATEMENT)) { parent = parent.parent(); } if (parent == null) { return null; } return (SynchronizedStatementTree) parent; }
@CheckForNull private static SynchronizedStatementTree getParentSynchronizedStatement(IdentifierTree usage) { Tree parent = usage.parent(); while (parent != null && !parent.is(Tree.Kind.SYNCHRONIZED_STATEMENT)) { parent = parent.parent(); } if (parent == null) { return null; } return (SynchronizedStatementTree) parent; }
private void checkUsage(IdentifierTree parameterUsage, MethodTree methodTree) { Tree parameterParent = parameterUsage.parent(); while (!parameterParent.equals(methodTree) && !assertReported.contains(parameterParent)) { if (parameterParent.is(Tree.Kind.ASSERT_STATEMENT)) { assertReported.add((AssertStatementTree) parameterParent); reportIssue(parameterParent, "Replace this assert with a proper check."); return; } parameterParent = parameterParent.parent(); } } }
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; }
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; }
private static boolean isSimpleNameOfVariableTreeOrVariableIsDeprecated(IdentifierTree identifierTree) { Tree parent = identifierTree.parent(); return parent.is(Tree.Kind.VARIABLE) && (identifierTree.equals(((VariableTree) parent).simpleName()) || ((VariableTree) parent).symbol().isDeprecated()); }
private static boolean isMethodIdentifier(IdentifierTree identifier) { Tree parent = identifier.parent(); while (parent != null && !parent.is(Tree.Kind.METHOD_INVOCATION, Tree.Kind.METHOD_REFERENCE)) { parent = parent.parent(); } if (parent == null) { return false; } if (parent.is(Tree.Kind.METHOD_INVOCATION)) { return identifier.equals(ExpressionUtils.methodName((MethodInvocationTree) parent)); } else { return identifier.equals(((MethodReferenceTree) parent).method()); } }
private static boolean isSimpleNameOfVariableTreeOrVariableIsDeprecated(IdentifierTree identifierTree) { Tree parent = identifierTree.parent(); return parent.is(Tree.Kind.VARIABLE) && (identifierTree.equals(((VariableTree) parent).simpleName()) || ((VariableTree) parent).symbol().isDeprecated()); }
private static boolean isMethodIdentifier(IdentifierTree identifier) { Tree parent = identifier.parent(); while (parent != null && !parent.is(Tree.Kind.METHOD_INVOCATION, Tree.Kind.METHOD_REFERENCE)) { parent = parent.parent(); } if (parent == null) { return false; } if (parent.is(Tree.Kind.METHOD_INVOCATION)) { return identifier.equals(methodName((MethodInvocationTree) parent)); } else { return identifier.equals(((MethodReferenceTree) parent).method()); } }
private static boolean isMethodIdentifier(IdentifierTree identifier) { Tree parent = identifier.parent(); while (parent != null && !parent.is(Tree.Kind.METHOD_INVOCATION, Tree.Kind.METHOD_REFERENCE)) { parent = parent.parent(); } if (parent == null) { return false; } if (parent.is(Tree.Kind.METHOD_INVOCATION)) { return identifier.equals(ExpressionUtils.methodName((MethodInvocationTree) parent)); } else { return identifier.equals(((MethodReferenceTree) parent).method()); } }
@Override public void visitIdentifier(IdentifierTree tree) { super.visitIdentifier(tree); if ("class".equals(tree.name()) || methodReferences.isEmpty()) { return; } if (parentIs(tree, Tree.Kind.MEMBER_SELECT)) { MemberSelectExpressionTree parent = (MemberSelectExpressionTree) tree.parent(); // Exclude identifiers used in member select, except for instance creation // New class may use member select to denote an inner class if (tree.equals(parent.identifier()) && !parentIs(parent, Tree.Kind.NEW_CLASS) && !refToEnclosingClass(tree)) { return; } } visitTerminalIdentifier(tree); }
@Override public void visitIdentifier(IdentifierTree tree) { super.visitIdentifier(tree); if ("class".equals(tree.name()) || methodReferences.isEmpty()) { return; } if (parentIs(tree, Tree.Kind.MEMBER_SELECT)) { MemberSelectExpressionTree parent = (MemberSelectExpressionTree) tree.parent(); // Exclude identifiers used in member select, except for instance creation // New class may use member select to denote an inner class if (tree.equals(parent.identifier()) && !parentIs(parent, Tree.Kind.NEW_CLASS) && !refToEnclosingClass(tree)) { return; } } visitTerminalIdentifier(tree); }
private void checkIfMapVariableIsModified(List<IdentifierTree> usagesOfMVM) { for (IdentifierTree modifiableValueMapUsageIdentifier : usagesOfMVM) { Tree usageOfMVM = modifiableValueMapUsageIdentifier.parent(); if (usageOfMVM != null) { if (usageOfMVM.is(Tree.Kind.ARGUMENTS)) { visitMethodWithMVM(modifiableValueMapUsageIdentifier, usageOfMVM); } else if (usageOfMVM.is(Tree.Kind.MEMBER_SELECT) && isSomeoneCallingMutableMethodsOnMap((MemberSelectExpressionTree) usageOfMVM)) { isModified = true; break; } } } }
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())); } } }
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())); } } }
private void checkCollectionAssignments(List<IdentifierTree> usages) { for (IdentifierTree usage : usages) { Tree parentTree = usage.parent(); if (parentTree.is(Tree.Kind.ASSIGNMENT)) { AssignmentExpressionTree assignment = (AssignmentExpressionTree) parentTree; ExpressionTree expression = assignment.expression(); if (usage.equals(assignment.variable()) && !expression.is(Tree.Kind.NULL_LITERAL) && isUnserializableCollection(expression.symbolType())) { reportIssue(usage); } } } }
private void checkCollectionAssignments(List<IdentifierTree> usages) { for (IdentifierTree usage : usages) { Tree parentTree = usage.parent(); if (parentTree.is(Tree.Kind.ASSIGNMENT)) { AssignmentExpressionTree assignment = (AssignmentExpressionTree) parentTree; ExpressionTree expression = assignment.expression(); if (usage.equals(assignment.variable()) && !expression.is(Tree.Kind.NULL_LITERAL) && isUnserializableCollection(expression.symbolType())) { reportIssue(usage); } } } }
private void checkIdentifier(IdentifierTree identifier) { Symbol.TypeSymbol enclosingClass = identifier.symbol().enclosingClass(); if (enclosingClass != null && enclosingClass.type().is("java.lang.System") && identifier.symbolType().is("java.io.InputStream") && identifier.name().equals("in") && !isClosingStream(identifier.parent())) { reportIssue(identifier); } }
private void checkIdentifier(IdentifierTree identifier) { Symbol.TypeSymbol enclosingClass = identifier.symbol().enclosingClass(); if (enclosingClass != null && enclosingClass.type().is("java.lang.System") && identifier.symbolType().is("java.io.InputStream") && identifier.name().equals("in") && !isClosingStream(identifier.parent())) { reportIssue(identifier); } }