private static boolean atLeastOneArgumentNotLiteral(ArgumentListTree arguments) { for (ExpressionTree expressionTree : arguments.arguments()) { if (!expressionTree.is(Kind.STRING_LITERAL)) { return true; } } return false; }
public boolean callExpressionWasLikelyIntended(ArgumentListTree argumentListTree) { return argumentListTree.arguments().size() == 1; } }
private static boolean atLeastOneArgumentNotLiteral(ArgumentListTree arguments) { for (ExpressionTree expressionTree : arguments.arguments()) { if (!expressionTree.is(Kind.STRING_LITERAL)) { return true; } } return false; }
private static boolean isAllowedUsage(@Nullable ArgumentListTree arguments, Kind allowedArgument) { if (arguments != null && arguments.arguments().size() == 1) { Tree argument = arguments.arguments().get(0); if (argument.is(allowedArgument)) { return !"false".equals(((LiteralTree) argument).value()); } } return false; }
@Override protected void visitSelector(String selector, CallExpressionTree tree) { Matcher matcher = elementUsedWithClassSelectorPattern.matcher(selector); // ignore 2 parameters to not consider such cases: $("div.className", someContext) if (tree.argumentClause().arguments().size() == 1 && matcher.matches()) { addIssue(tree, String.format(MESSAGE, matcher.group(1))); } } }
private static boolean hasCallbackArgumentWithSideEffects(CallExpressionTreeImpl callExpression) { for (Tree argument : callExpression.argumentClause().arguments()) { if (argument.is(KindSet.FUNCTION_KINDS) && ((FunctionTreeImpl) argument).outerScopeSymbolUsages().findAny().isPresent()) { return true; } } return false; }
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; }
/** * Returns true if the specified call has no side effects. * Returns false if the specified call has or may have side effects. */ private static boolean hasSideEffects(CallExpressionTree callExpression, ProgramState state) { SeparatedList<ExpressionTree> arguments = callExpression.argumentClause().arguments(); SymbolicValue calleeValue = state.peekStack(arguments.size()); if (calleeValue instanceof BuiltInFunctionSymbolicValue) { BuiltInFunctionSymbolicValue builtInFunction = (BuiltInFunctionSymbolicValue) calleeValue; return builtInFunction.hasSideEffect(); } return true; }
@Override public void visitCallExpression(CallExpressionTree tree) { if (tree.types().contains(ObjectType.FrameworkType.JQUERY_SELECTOR_OBJECT)) { SeparatedList<ExpressionTree> parameters = tree.argumentClause().arguments(); if (!parameters.isEmpty() && parameters.get(0).is(Tree.Kind.STRING_LITERAL)) { String value = ((LiteralTree) parameters.get(0)).value(); value = value.substring(1, value.length() - 1).trim(); visitSelector(value, tree); } } super.visitCallExpression(tree); }
private static boolean isIndexOfCall(ExpressionTree expression) { if (expression.is(Kind.CALL_EXPRESSION)) { CallExpressionTree callExpr = (CallExpressionTree) expression; if (callExpr.argumentClause().arguments().size() == 1 && callExpr.callee().is(Kind.DOT_MEMBER_EXPRESSION)) { DotMemberExpressionTree memberExpr = (DotMemberExpressionTree) ((CallExpressionTree) expression).callee(); return "indexOf".equals(memberExpr.property().name()); } } return false; }
private void visitSetMethodCall(CallExpressionTree tree) { Tree firstArgument = tree.argumentClause().arguments().get(0); if (firstArgument.is(Kind.OBJECT_LITERAL)) { checkForSpaceInPropertyNames((ObjectLiteralTree) firstArgument); } if (firstArgument.is(Kind.STRING_LITERAL)) { checkString(firstArgument); } }
private static LiteralTree getSelectorParameter(CallExpressionTree tree) { SeparatedList<ExpressionTree> parameters = tree.argumentClause().arguments(); if (parameters.size() == 1 && parameters.get(0).is(Tree.Kind.STRING_LITERAL) && !isElementCreation((LiteralTree) parameters.get(0))) { return (LiteralTree) parameters.get(0); } return null; }
private void checkArgumentToBeFunctionWithReturn(DotMemberExpressionTree callee, int argumentIndex, ProgramState currentState) { Tree parent = callee.parent(); if (parent.is(Kind.CALL_EXPRESSION)) { CallExpressionTree callExpressionTree = (CallExpressionTree) parent; if (callExpressionTree.argumentClause().arguments().size() > argumentIndex) { Tree argument = callExpressionTree.argumentClause().arguments().get(argumentIndex); if (argument.is(Kind.FUNCTION_EXPRESSION, Kind.ARROW_FUNCTION) && !hasReturnWithValue((FunctionTree)argument) && !isAsyncFunction((FunctionTree) argument)) { addUniqueIssue(functionToken((FunctionTree) argument), MESSAGE); } else if (argument.is(Kind.IDENTIFIER_REFERENCE)) { checkArgumentIdentifier((IdentifierTree) argument, currentState); } } } }
@Override public void visitCallExpression(CallExpressionTree tree) { if (isParseIntCall(tree.callee()) && tree.argumentClause().arguments().size() == 1) { addIssue(tree.callee(), MESSAGE); } super.visitCallExpression(tree); }
@Override public void visitCallExpression(CallExpressionTree tree) { if (tree.types().contains(Type.Kind.BACKBONE_MODEL) && !tree.argumentClause().arguments().isEmpty()) { Tree parameter = tree.argumentClause().arguments().get(0); if (parameter.is(Kind.OBJECT_LITERAL)) { PairPropertyTree defaultsProp = Backbone.getModelProperty((ObjectLiteralTree) parameter, "defaults"); if (defaultsProp != null && defaultsProp.value().is(Kind.OBJECT_LITERAL) && hasObjectOrArrayAttribute((ObjectLiteralTree) defaultsProp.value())) { addIssue(defaultsProp.key(), MESSAGE); } } } super.visitCallExpression(tree); }
@Override public void beforeBlockElement(ProgramState currentState, Tree element, ProgramPoint programPoint) { if (element.is(Kind.CALL_EXPRESSION)) { CallExpressionTree callExpressionTree = (CallExpressionTree) element; SymbolicValue calleeSV = currentState.peekStack(callExpressionTree.argumentClause().arguments().size()); Constraint constraint = currentState.getConstraint(calleeSV); if (constraint.isIncompatibleWith(Constraint.FUNCTION)) { addUniqueIssue(callExpressionTree.callee(), MESSAGE); } } } }
private void visitDefaults(CallExpressionTree tree) { Tree parameter = tree.argumentClause().arguments().get(0); if (parameter.is(Kind.OBJECT_LITERAL)) { PairPropertyTree defaultsProp = Backbone.getModelProperty((ObjectLiteralTree) parameter, "defaults"); if (defaultsProp != null && defaultsProp.value().is(Kind.OBJECT_LITERAL)) { checkForSpaceInPropertyNames((ObjectLiteralTree) defaultsProp.value()); } } }
@Override public void visitCallExpression(CallExpressionTree tree) { if (tree.callee().is(Kind.IDENTIFIER_REFERENCE)) { IdentifierTree callee = (IdentifierTree) tree.callee(); if (callee.scope().isGlobal()) { String name = callee.name(); SeparatedList<ExpressionTree> parameters = tree.argumentClause().arguments(); if (isAmdImport(name, parameters) || isCommonJsImport(name, parameters)) { addIssue(tree.callee(), String.format(MESSAGE, name)); } } } }
@Override public void visitCallExpression(CallExpressionTree tree) { if (tree.types().contains(Type.Kind.BACKBONE_MODEL) && !tree.argumentClause().arguments().isEmpty()) { visitDefaults(tree); } if (tree.callee().is(Kind.DOT_MEMBER_EXPRESSION) && isBackboneSetMethod((DotMemberExpressionTree) tree.callee())) { visitSetMethodCall(tree); } super.visitCallExpression(tree); }
@Override public void visitCallExpression(CallExpressionTree callExpression) { List<String> argumentNames = names(callExpression.argumentClause().arguments()); if (argumentNames != null) { FunctionTree functionDeclaration = functionDeclaration(callExpression); if (functionDeclaration != null) { List<String> parameterNames = names(parameters(functionDeclaration)); if (parameterNames != null && haveSameNamesAndDifferentOrders(argumentNames, parameterNames)) { addIssue(callExpression.argumentClause(), message(functionDeclaration)) .secondary(functionDeclaration.parameterClause()); } } } super.visitCallExpression(callExpression); }