private void checkExpression(DotMemberExpressionTree expression) { if (!expression.object().is(Kind.IDENTIFIER_REFERENCE) || !expression.property().is(Kind.PROPERTY_IDENTIFIER)) { return; } String object = ((IdentifierTree) expression.object()).name(); String property = (expression.property()).name(); if (ARGUMENTS.equals(object)) { checkArgumentsProperty(expression, property); } else if (scope.contains(object)) { checkFunctionsProperty(expression, object, property); } }
private static boolean isBackboneSetMethod(DotMemberExpressionTree dotExpr) { return CheckUtils.asString(dotExpr.property()).equals(SET) && dotExpr.object().types().contains(Type.Kind.BACKBONE_MODEL_OBJECT); }
private static boolean isChangedPropertyAccess(DotMemberExpressionTree tree) { return tree.property().name().equals(CHANGED) && tree.object().types().contains(Type.Kind.BACKBONE_MODEL_OBJECT); }
private void checkExpression(DotMemberExpressionTree expression) { if (!expression.object().is(Kind.IDENTIFIER_REFERENCE) || !expression.property().is(Kind.IDENTIFIER_NAME)) { return; } String object = ((IdentifierTree) expression.object()).name(); String property = (expression.property()).name(); if (ARGUMENTS.equals(object)) { checkArgumentsProperty(expression, property); } else if (scope.contains(object)) { checkFunctionsProperty(expression, object, property); } }
private boolean isBackboneSetMethod(DotMemberExpressionTree dotExpr) { return CheckUtils.asString(dotExpr.property()).equals(SET) && dotExpr.object().types().contains(Type.Kind.BACKBONE_MODEL_OBJECT); }
@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); }
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 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); }
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)); } } }
/** * Returns true for "NaN" and "Number.NaN" */ private static boolean isNaN(ExpressionTree expression) { if (expression.is(Kind.DOT_MEMBER_EXPRESSION)) { DotMemberExpressionTree memberExpression = (DotMemberExpressionTree) expression; return isIdentifier(memberExpression.object(), "Number") && isIdentifier(memberExpression.property(), NAN); } else { return isIdentifier(expression, NAN); } }
private static boolean sameValue(IdentifierTree variable, ExpressionTree expression) { if (SyntacticEquivalence.areEquivalent(variable, expression)) { return true; } if (expression.is(Kind.CALL_EXPRESSION) && ((CallExpressionTree) expression).callee().is(Kind.DOT_MEMBER_EXPRESSION)) { DotMemberExpressionTree callee = (DotMemberExpressionTree) ((CallExpressionTree) expression).callee(); String method = callee.property().name(); return sameValue(variable, callee.object()) && METHODS_WITH_SIDE_EFFECTS.contains(method); } 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)){ 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; }
private static boolean isWritingMethodCall(ExpressionStatementTree statement, Usage usage) { if (statement.expression().is(Kind.CALL_EXPRESSION)) { ExpressionTree callee = ((CallExpressionTree) statement.expression()).callee(); if (callee.is(Kind.DOT_MEMBER_EXPRESSION)) { DotMemberExpressionTree memberExpression = (DotMemberExpressionTree) callee; return memberExpression.object() == usage.identifierTree() && WRITING_METHODS.contains(memberExpression.property().name()); } } return false; }
protected boolean isSelectorObject(ExpressionTree expressionTree) { if (isDirectJQuerySelectorObject(expressionTree)){ return true; } if (expressionTree.is(Tree.Kind.CALL_EXPRESSION) && ((CallExpressionTree)expressionTree).callee().is(Tree.Kind.DOT_MEMBER_EXPRESSION)){ DotMemberExpressionTree callee = (DotMemberExpressionTree) ((CallExpressionTree)expressionTree).callee(); return isSelectorObject(callee.object()) && isJQuerySelectorMethod(callee.property()); } return false; }
@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))); } } } }
@Override public void visitBinaryExpression(BinaryExpressionTree tree) { if (tree.is(Tree.Kind.LESS_THAN, Tree.Kind.GREATER_THAN_OR_EQUAL_TO) && isZeroLiteral(tree.rightOperand()) && tree.leftOperand().is(Tree.Kind.DOT_MEMBER_EXPRESSION)) { DotMemberExpressionTree leftOperand = ((DotMemberExpressionTree) tree.leftOperand()); if (isLengthOrSizeProperty(leftOperand)) { String propertyName = leftOperand.property().name(); addIssue(tree, String.format("Fix this expression; %s of \"%s\" is always greater or equal to zero.", propertyName, CheckUtils.asString(leftOperand.object()))); } } super.visitBinaryExpression(tree); }