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 static boolean isBooleanGetter(IdentifierTree simpleName) { String text = simpleName.identifierToken().text(); return text.startsWith("get") && !text.startsWith("getBoolean"); }
@Override public void visitIdentifier(IdentifierTree tree) { scan(tree.annotations()); pendingReferences.add(tree.name()); }
private static ProgramState handleOpenOptionAppend(ProgramState programState, IdentifierTree identifier) { if (identifier.symbolType().is("java.nio.file.StandardOpenOption") && "APPEND".equals(identifier.name())) { return programState.addConstraint(programState.peekValue(), new FileOutputStreamAppendConstraint(identifier)); } return programState; }
private static boolean shouldVerify(AssignmentExpressionTree assignment) { if (assignment.expression().is(Tree.Kind.NEW_CLASS) && assignment.variable().is(Tree.Kind.IDENTIFIER)) { IdentifierTree identifier = (IdentifierTree) assignment.variable(); boolean isMethodVariable = identifier.symbol().isVariableSymbol() && identifier.symbol().owner().isMethodSymbol(); boolean isSupportedClass = CLASSES.stream().anyMatch(identifier.symbolType()::isSubtypeOf) || CLASSES.stream().anyMatch(assignment.expression().symbolType()::isSubtypeOf); return isMethodVariable && isSupportedClass; } return false; }
if (tree.is(Tree.Kind.MEMBER_SELECT)) { MemberSelectExpressionTree mse = (MemberSelectExpressionTree) tree; if (JavaKeyword.CLASS.getValue().equals(mse.identifier().name())) { List<AnnotationTree> identifierAnnotations = identifierTree.annotations(); scan(identifierAnnotations); completeMetadata((JavaSymbol) identifierTree.symbol(), identifierAnnotations); Resolve.Resolution res = getSymbolOfMemberSelectExpression(mse, kind, resolveEnv); resolvedSymbol = res.symbol(); } else { identifierTree = (IdentifierTree) tree; Resolve.Resolution resolution = resolve.findIdent(resolveEnv, identifierTree.name(), kind); resolvedSymbol = resolution.symbol(); JavaType type = resolution.type();
private void addSymbol(IdentifierTree identifierTree, Tree root) { Symbol symbol = identifierTree.symbol(); if (targets.contains(symbol)) { updates.put(symbol, root); } } }
private void checkVariable(VariableTree varTree) { int line = varTree.simpleName().identifierToken().line(); if (varSameDeclaration || lastVarLine == line) { reportIssue(varTree.simpleName(), String.format("Declare \"%s\" on a separate line.", varTree.simpleName().name())); } varSameDeclaration = ",".equals(varTree.endToken().text()); lastVarLine = line; } }
@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 boolean isResourceType(Tree operand) { return operand instanceof IdentifierTree && Constants.SLING_RESOURCE_QUALIFIED_NAME .equals(((IdentifierTree) operand).symbolType().fullyQualifiedName()); }
@CheckForNull private static Symbol getFieldAccessedUsingSuperOrThis(ExpressionTree expressionTree) { if (expressionTree.is(Tree.Kind.MEMBER_SELECT)) { MemberSelectExpressionTree memberSelectTree = (MemberSelectExpressionTree) expressionTree; if (memberSelectTree.expression().is(Tree.Kind.IDENTIFIER)) { String identifierText = ((IdentifierTree) memberSelectTree.expression()).identifierToken().text(); if ("super".equals(identifierText) || "this".equals(identifierText)) { return memberSelectTree.identifier().symbol(); } } } return null; }
@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; }
@Override public void visitIdentifier(IdentifierTree tree) { scan(tree.annotations()); }
private static ProgramState handleOpenOptionAppend(ProgramState programState, IdentifierTree identifier) { if (identifier.symbolType().is("java.nio.file.StandardOpenOption") && "APPEND".equals(identifier.name())) { return programState.addConstraint(programState.peekValue(), new FileOutputStreamAppendConstraint(identifier)); } return programState; }
@Override public void visitIdentifier(IdentifierTree tree) { if (!packageName.isEmpty()) { packageName += "."; } packageName += tree.name(); } }
private static boolean shouldVerify(AssignmentExpressionTree assignment) { if (assignment.expression().is(Tree.Kind.NEW_CLASS) && assignment.variable().is(Tree.Kind.IDENTIFIER)) { IdentifierTree identifier = (IdentifierTree) assignment.variable(); boolean isMethodVariable = identifier.symbol().isVariableSymbol() && identifier.symbol().owner().isMethodSymbol(); boolean isSupportedClass = CLASSES.stream().anyMatch(identifier.symbolType()::isSubtypeOf) || CLASSES.stream().anyMatch(assignment.expression().symbolType()::isSubtypeOf); return isMethodVariable && isSupportedClass; } return false; }
if (tree.is(Tree.Kind.MEMBER_SELECT)) { MemberSelectExpressionTree mse = (MemberSelectExpressionTree) tree; if (JavaKeyword.CLASS.getValue().equals(mse.identifier().name())) { List<AnnotationTree> identifierAnnotations = identifierTree.annotations(); scan(identifierAnnotations); completeMetadata((JavaSymbol) identifierTree.symbol(), identifierAnnotations); Resolve.Resolution res = getSymbolOfMemberSelectExpression(mse, kind, resolveEnv); resolvedSymbol = res.symbol(); } else { identifierTree = (IdentifierTree) tree; Resolve.Resolution resolution = resolve.findIdent(resolveEnv, identifierTree.name(), kind); resolvedSymbol = resolution.symbol(); JavaType type = resolution.type();
@Override public void visitIdentifier(IdentifierTree tree) { Symbol symbol = tree.symbol(); if (forEachSymbols.containsKey(symbol)) { forEachSymbols.remove(symbol); } super.visitIdentifier(tree); } }