private static boolean isJavaLangOverride(MemberSelectExpressionTree annotationType) { MemberSelectExpressionTree mse = annotationType; if(isOverride(mse.identifier()) && mse.expression().is(Kind.MEMBER_SELECT)) { mse = (MemberSelectExpressionTree) mse.expression(); return "lang".equals(mse.identifier().name()) && mse.expression().is(Kind.IDENTIFIER) && "java".equals(((IdentifierTree) mse.expression()).name()); } return false; }
@Override public void visitMemberSelectExpression(MemberSelectExpressionTree tree) { scan(tree.annotations()); scan(tree.expression()); scan(tree.identifier()); }
private static IdentifierTree getIdentifier(ExpressionTree methodSelect) { if (methodSelect.is(Tree.Kind.IDENTIFIER)) { return (IdentifierTree) methodSelect; } return ((MemberSelectExpressionTree) methodSelect).identifier(); }
@Override public void visitMemberSelectExpression(MemberSelectExpressionTree tree) { if (tree.expression().is(Tree.Kind.IDENTIFIER) || tree.expression().is(Tree.Kind.MEMBER_SELECT)) { //Check only first identifier of a member select expression : in a.b.c we are only interested in a. scan(tree.expression()); } }
@Nullable private static IdentifierTree getVariableIdentifier(ExpressionTree expressionTree) { if (expressionTree.is(Tree.Kind.IDENTIFIER)) { return (IdentifierTree) expressionTree; } else if (expressionTree.is(Tree.Kind.MEMBER_SELECT)) { return ((MemberSelectExpressionTree) expressionTree).identifier(); } return null; }
@Override public void visitMemberSelectExpression(MemberSelectExpressionTree tree) { // skip annotations and identifier, a method parameter will only be used in expression side (before the dot) scan(tree.expression()); }
private static boolean isSuperClone(MemberSelectExpressionTree tree) { return "clone".equals(tree.identifier().name()) && tree.expression().is(Kind.IDENTIFIER) && "super".equals(((IdentifierTree) tree.expression()).name()); }
private static Optional<Symbol> symbol(ExpressionTree tree) { switch (tree.kind()) { case IDENTIFIER: return Optional.of(((IdentifierTree) tree).symbol()); case MEMBER_SELECT: return Optional.of(((MemberSelectExpressionTree) tree).identifier().symbol()); default: return Optional.empty(); } }
@Override public void visitMemberSelectExpression(MemberSelectExpressionTree tree) { scan(tree.annotations()); scan(tree.expression()); scan(tree.identifier()); }
@Override public void visitMemberSelectExpression(MemberSelectExpressionTree tree) { scan(tree.expression()); // ignore identifier, because if it is this, it is a qualified this. }
private void buildMemberSelect(MemberSelectExpressionTree mse) { currentBlock.elements.add(mse); // int.class or String[].class are memberSelectExpression which expression part is not an expression. if (!"class".equals(mse.identifier().name())) { build(mse.expression()); } }
private static Optional<Symbol> symbolFromVariable(ExpressionTree variable) { if (variable.is(IDENTIFIER)) { return Optional.of(((IdentifierTree) variable).symbol()); } if (variable.is(MEMBER_SELECT)) { return Optional.of(((MemberSelectExpressionTree) variable).identifier().symbol()); } return Optional.empty(); }
@Override public void visitMemberSelectExpression(MemberSelectExpressionTree tree) { scan(tree.annotations()); scan(tree.expression()); scan(tree.identifier()); }
private static Optional<MethodInvocationTree> previousMITInChain(MethodInvocationTree mit) { ExpressionTree methodSelect = mit.methodSelect(); if (methodSelect.is(Tree.Kind.MEMBER_SELECT)) { ExpressionTree expression = ((MemberSelectExpressionTree) methodSelect).expression(); if (expression.is(Tree.Kind.METHOD_INVOCATION)) { MethodInvocationTree previousInvocation = (MethodInvocationTree) expression; return Optional.of(previousInvocation); } } return Optional.empty(); }
private static String fullName(MemberSelectExpressionTree tree) { if (tree.expression().is(Tree.Kind.IDENTIFIER)) { return ((IdentifierTree) tree.expression()).name() + "." + tree.identifier().name(); } return fullName((MemberSelectExpressionTree) tree.expression()) + "." + tree.identifier().name(); }
private static boolean isSystem(ExpressionTree expression) { IdentifierTree identifierTree = null; if (expression.is(Tree.Kind.IDENTIFIER)) { identifierTree = (IdentifierTree) expression; } else if (expression.is(Tree.Kind.MEMBER_SELECT)) { identifierTree = ((MemberSelectExpressionTree) expression).identifier(); } return identifierTree != null && "System".equals(identifierTree.name()); }
@Override public void visitMemberSelectExpression(MemberSelectExpressionTree tree) { scan(tree.annotations()); scan(tree.identifier().annotations()); pendingReferences.add(ExpressionsHelper.concatenate(tree)); //Don't visit identifiers of a member select expression. if (!tree.expression().is(Tree.Kind.IDENTIFIER)) { scan(tree.expression()); } }
private static Tree issueTree(MethodInvocationTree syntaxNode) { ExpressionTree methodSelect = syntaxNode.methodSelect(); if (methodSelect.is(Tree.Kind.MEMBER_SELECT)) { return ((MemberSelectExpressionTree) methodSelect).expression(); } return syntaxNode; } }
private void checkJavaLangNPE(MemberSelectExpressionTree memberSelectTree) { ExpressionTree expression = memberSelectTree.expression(); if (expression.is(Kind.MEMBER_SELECT)) { MemberSelectExpressionTree mse = (MemberSelectExpressionTree) expression; if ("lang".equals(mse.identifier().name()) && mse.expression().is(Kind.IDENTIFIER) && "java".equals(((IdentifierTree) mse.expression()).name())) { addIssue(memberSelectTree.identifier()); } } }
@Override public void visitMemberSelectExpression(MemberSelectExpressionTree tree) { if (JavaKeyword.CLASS.getValue().equals(tree.identifier().name())) { // skip visit of class literal (MyType.class) return; } super.visitMemberSelectExpression(tree); }