@Nullable private static FunctionTree getFunction(CallExpressionTree tree) { Set<Type> types = tree.callee().types(); if (types.size() == 1 && types.iterator().next().kind().equals(Type.Kind.FUNCTION)) { return ((FunctionType) types.iterator().next()).functionTree(); } return null; }
@CheckForNull private static FunctionTree functionDeclaration(CallExpressionTree tree) { TypeSet types = tree.callee().types(); FunctionType functionType = (FunctionType) types.getUniqueType(Type.Kind.FUNCTION); return functionType == null ? null : functionType.functionTree(); }
@Override public void visitNewExpression(NewExpressionTree tree) { ExpressionTree expression = tree.expression(); if (!expression.types().isEmpty() && isNotConstructor(expression.types())) { getContext().addIssue(this, expression, String.format("Replace %s with a constructor function.", CheckUtils.asString(expression))); } super.visitNewExpression(tree); }
@Override public void visitParenthesisedExpression(ParenthesisedExpressionTree tree) { super.visitParenthesisedExpression(tree); ((ParenthesisedExpressionTreeImpl) tree).addTypes(tree.expression().types()); }
private void inferType(Tree identifier, ExpressionTree assignedTree) { super.scan(assignedTree); if (identifier instanceof IdentifierTree) { Symbol symbol = ((IdentifierTree) identifier).symbol(); if (symbol != null) { addTypes(symbol, assignedTree.types()); } } }
private static boolean lastIsFunction(SeparatedList<ExpressionTree> parameters) { return (parameters.get(parameters.size() - 1)).types().contains(Type.Kind.FUNCTION); }
@Override public void visitIfStatement(IfStatementTree tree) { ExpressionTree condition = tree.condition(); if (condition.types().containsOnly(Type.Kind.JQUERY_SELECTOR_OBJECT)) { addIssue(condition, MESSAGE); } super.visitIfStatement(tree); }
@Override public void visitNewExpression(NewExpressionTree tree) { super.visitNewExpression(tree); if (tree.expression().types().contains(Type.Kind.BACKBONE_MODEL)) { ((NewExpressionTreeImpl) tree).addType(ObjectType.FrameworkType.BACKBONE_MODEL_OBJECT); } }
private static boolean isReplaceExclusion(IdentifierTree property, ArgumentListTree arguments) { if ("replace".equals(property.name()) && arguments.arguments().size() == 2) { Tree secondArgument = arguments.arguments().get(1); return !((ExpressionTree) secondArgument).types().containsOnly(Type.Kind.STRING); } return false; }
private void checkJQueryProperty(ExpressionTree expressionTree, List<String> deprecated, String parentheses) { if (expressionTree.is(Tree.Kind.DOT_MEMBER_EXPRESSION)) { ExpressionTree object = ((DotMemberExpressionTree) expressionTree).object(); IdentifierTree property = ((DotMemberExpressionTree) expressionTree).property(); if (object.types().contains(ObjectType.FrameworkType.JQUERY_OBJECT) && propertyIsDeprecated(property, deprecated)) { addIssue(property, String.format(MESSAGE, property.name() + parentheses)); } } }
private void checkSelectorProperty(ExpressionTree expressionTree, List<String> deprecated, String parentheses) { if (expressionTree.is(Tree.Kind.DOT_MEMBER_EXPRESSION)) { ExpressionTree object = ((DotMemberExpressionTree) expressionTree).object(); IdentifierTree property = ((DotMemberExpressionTree) expressionTree).property(); if (object.types().contains(ObjectType.FrameworkType.JQUERY_SELECTOR_OBJECT) && propertyIsDeprecated(property, deprecated)) { addIssue(property, String.format(MESSAGE, property.name() + parentheses)); } } }
@Override public void visitAssignmentExpression(AssignmentExpressionTree tree) { if (tree.variable().is(Tree.Kind.BRACKET_MEMBER_EXPRESSION)) { BracketMemberExpressionTree memberExpression = (BracketMemberExpressionTree) tree.variable(); if (memberExpression.object().types().containsOnly(Kind.ARRAY)) { ExpressionTree arrayIndex = memberExpression.property(); if (arrayIndex.types().containsOnly(Kind.STRING)) { addIssue(arrayIndex, String.format(MESSAGE, CheckUtils.asString(memberExpression.object()))); } } } super.visitAssignmentExpression(tree); } }
@Override public void visitIfStatement(IfStatementTree tree) { ExpressionTree condition = tree.condition(); if (condition.types().containsOnly(Type.Kind.JQUERY_SELECTOR_OBJECT)) { getContext().addIssue(this, condition, "Use the \"length\" property to see whether this selection contains elements."); } super.visitIfStatement(tree); }
private void checkJQueryProperty(ExpressionTree expressionTree, List<String> deprecated, String parentheses) { if (expressionTree.is(Tree.Kind.DOT_MEMBER_EXPRESSION)){ ExpressionTree object = ((DotMemberExpressionTree) expressionTree).object(); IdentifierTree property = ((DotMemberExpressionTree) expressionTree).property(); if (object.types().contains(ObjectType.FrameworkType.JQUERY_OBJECT) && propertyIsDeprecated(property, deprecated)){ getContext().addIssue(this, property, String.format(MESSAGE, property.name() + parentheses)); } } }
private void checkSelectorProperty(ExpressionTree expressionTree, List<String> deprecated, String parentheses) { if (expressionTree.is(Tree.Kind.DOT_MEMBER_EXPRESSION)){ ExpressionTree object = ((DotMemberExpressionTree) expressionTree).object(); IdentifierTree property = ((DotMemberExpressionTree) expressionTree).property(); if (object.types().contains(ObjectType.FrameworkType.JQUERY_SELECTOR_OBJECT) && propertyIsDeprecated(property, deprecated)){ getContext().addIssue(this, property, String.format(MESSAGE, property.name() + parentheses)); } } }
public static boolean isElementList(ExpressionTree tree) { if (tree.is(Tree.Kind.CALL_EXPRESSION) && ((CallExpressionTree) tree).callee().is(Tree.Kind.DOT_MEMBER_EXPRESSION)) { DotMemberExpressionTree callee = (DotMemberExpressionTree) ((CallExpressionTree) tree).callee(); if (callee.object().types().contains(Type.Kind.DOCUMENT) && DOCUMENT_METHODS_TO_GET_ELEMENTS.contains(callee.property().name())) { return true; } } return false; }
@Override public void visitAssignmentExpression(AssignmentExpressionTree tree) { if (tree.variable().is(Kind.DOT_MEMBER_EXPRESSION) && tree.expression().types().containsOnlyAndUnique(Type.Kind.FUNCTION)) { DotMemberExpressionTree lhs = (DotMemberExpressionTree) tree.variable(); if (lhs.object().is(Kind.DOT_MEMBER_EXPRESSION)) { DotMemberExpressionTree prototype = (DotMemberExpressionTree) lhs.object(); if ("prototype".equals(prototype.property().name()) && prototype.object().is(Kind.IDENTIFIER_REFERENCE) && prototype.object().types().contains(Type.Kind.FUNCTION)) { addIssue(lhs, String.format(MESSAGE, ((IdentifierTree) prototype.object()).name(), lhs.property().name())); } } } super.visitAssignmentExpression(tree); } }
@Override public void visitCallExpression(CallExpressionTree tree) { if (tree.callee().is(Tree.Kind.DOT_MEMBER_EXPRESSION)) { DotMemberExpressionTree callee = (DotMemberExpressionTree) tree.callee(); boolean isWindow = callee.object().types().contains(Type.Kind.WINDOW) || hasWindowLikeName(callee.object()); if (isWindow && CheckUtils.asString(callee.property()).equals(POST_MESSAGE)) { addIssue(callee.property(), MESSAGE); } } super.visitCallExpression(tree); }
@Override public void visitCallExpression(CallExpressionTree tree) { if (tree.callee().is(Tree.Kind.DOT_MEMBER_EXPRESSION)){ DotMemberExpressionTree callee = (DotMemberExpressionTree) tree.callee(); boolean isWindow = callee.object().types().contains(Type.Kind.WINDOW) || hasWindowLikeName(callee.object()); if (isWindow && CheckUtils.asString(callee.property()).equals(POST_MESSAGE)){ getContext().addIssue(this, callee.property(), MESSAGE); } } super.visitCallExpression(tree); }
@Override public void visitNode(Tree tree) { Tree expression = ((ExpressionStatementTree) tree).expression(); if (expression.is(Kind.CALL_EXPRESSION)) { ExpressionTree callee = ((CallExpressionTree) expression).callee(); if (callee.is(Kind.DOT_MEMBER_EXPRESSION)) { DotMemberExpressionTree memberExpression = (DotMemberExpressionTree) callee; if (memberExpression.object().types().containsOnly(Type.Kind.STRING) && !isReplaceExclusion(memberExpression.property(), ((CallExpressionTree) expression).argumentClause())) { addIssue(memberExpression.property(), String.format(MESSAGE, getVariable(memberExpression))); } } } }