private static String getVariable(MemberExpressionTree memberExpression) { String variableName = CheckUtils.asString(memberExpression.object()); if (variableName.length() > 30) { variableName = "String"; } return variableName; }
@Override public void visitMemberExpression(MemberExpressionTree tree) { super.visitMemberExpression(tree); if (WebAPI.isWindow(tree)) { tree.addType(ObjectType.WebApiType.WINDOW); } if (WebAPI.isElement(tree)){ tree.addType(ObjectType.WebApiType.DOM_ELEMENT); } if (tree.is(Tree.Kind.BRACKET_MEMBER_EXPRESSION)){ Type arrayType = tree.object().types().getUniqueType(Type.Kind.ARRAY); if (arrayType != null && ((ArrayType) arrayType).elementType() != null){ tree.addType(((ArrayType) arrayType).elementType()); } } }
public MemberExpressionTree completeSuperMemberExpression(SuperTreeImpl superExpression, MemberExpressionTree partial) { if (partial.is(Kind.DOT_MEMBER_EXPRESSION)) { return ((DotMemberExpressionTreeImpl) partial).complete(superExpression); } return ((BracketMemberExpressionTreeImpl) partial).complete(superExpression); }
@Override public void visitMemberExpression(MemberExpressionTree tree) { if (tree.is(Tree.Kind.DOT_MEMBER_EXPRESSION)) { DotMemberExpressionTree dme = (DotMemberExpressionTree) tree; String obj = getObjectName(dme); String method = dme.property().name(); if (OBJECTS.contains(obj) && API_CALLS.contains(method)) { saveDebtLocation(tree, obj); } } else if (tree.is(Tree.Kind.BRACKET_MEMBER_EXPRESSION)) { String obj = getObjectName(tree); if (OBJECTS.contains(obj)) { saveDebtLocation(tree, obj); } } super.visitMemberExpression(tree); }
private void checkForIssues() { for (Map.Entry<String, StorageType> entry : storageTypes.entrySet()) { int cost = entry.getValue().count - 1; String message = String.format(MESSAGE, entry.getKey()); addIssue(entry.getValue().tree.object(), message).cost((double) cost); } }
private void checkMemberExpression(ProgramState currentState, CallExpressionTree callExpression, MemberExpressionTree memberExpression) { ExpressionTree object = memberExpression.object(); Optional<String> mutatingMethod = mutatingMethod(memberExpression.property()); if (!mutatingMethod.isPresent() || !object.is(Tree.Kind.IDENTIFIER_REFERENCE)) { return; } ((IdentifierTree) object).symbol().ifPresent(objectSymbol -> { if (isArray(objectSymbol, currentState) && isBeingPassedElsewhere(objectSymbol, callExpression)) { this.addUniqueIssue(callExpression, String.format(MESSAGE, mutatingMethod.get())); } }); }
@Override public void visitCallExpression(CallExpressionTree tree) { ExpressionTree callee = tree.callee(); if (isOpenDatabase(callee)) { addIssue(tree.callee(), MESSAGE); } else if (callee.is(Kind.DOT_MEMBER_EXPRESSION)) { MemberExpressionTree memberExpr = (MemberExpressionTree) callee; boolean isWindowObject = memberExpr.object().types().contains(WebApiType.WINDOW) || memberExpr.object().is(Kind.THIS); if (isWindowObject && isOpenDatabase(memberExpr.property())) { addIssue(memberExpr.property(), MESSAGE); } } super.visitCallExpression(tree); }
private static void addDeclaration( ListMultimap<String, Declaration> declarationsByObject, MemberExpressionTree memberExpression, VariableDeclarationTree declaration, InitializedBindingElementTree initializedBindingElement ) { declarationsByObject.put(CheckUtils.asString(memberExpression.object()), new Declaration(((JavaScriptTree) declaration).getKind(), initializedBindingElement)); }
@Override public void visitNode(Tree tree) { if (tree.is(Tree.Kind.DOT_MEMBER_EXPRESSION)) { ExpressionTree object = ((MemberExpressionTree) tree).object(); if (object.is(Tree.Kind.THIS) && scopeLevel == 0) { addIssue(object, MESSAGE); } return; } scopeLevel++; }
private static IdentifierTree callee(CallExpressionTree tree) { ExpressionTree callee = tree.callee(); while (callee.is(Tree.Kind.DOT_MEMBER_EXPRESSION)) { callee = ((MemberExpressionTree) callee).object(); } if (callee.is(Tree.Kind.IDENTIFIER_REFERENCE) && !callee.equals(tree.callee())) { return (IdentifierTree) callee; } return null; }
@Override public void visitMemberExpression(MemberExpressionTree tree) { if (SyntacticEquivalence.areEquivalent(tree.object(), nullExpression)) { check.addIssue(nullExpression, String.format(MESSAGE, CheckUtils.asString(nullExpression))); } super.visitMemberExpression(tree); }
private static IdentifierTree callee(CallExpressionTree tree) { ExpressionTree callee = tree.callee(); while (callee.is(Tree.Kind.DOT_MEMBER_EXPRESSION)) { callee = ((MemberExpressionTree) callee).object(); } if (callee.is(Tree.Kind.IDENTIFIER_REFERENCE) && !callee.equals(tree.callee())) { return (IdentifierTree) callee; } return null; }
@Override public void visitMemberExpression(MemberExpressionTree tree) { if (SyntacticEquivalence.areEquivalent(tree.object(), nullExpression)) { context.addIssue(NullDereferenceInConditionalCheck.this, nullExpression, String.format(MESSAGE_FORMAT, CheckUtils.asString(nullExpression))); } super.visitMemberExpression(tree); }
@Override public void visitNode(Tree tree) { if (tree.is(Tree.Kind.DOT_MEMBER_EXPRESSION)) { if (((MemberExpressionTree) tree).object().is(Tree.Kind.THIS) && scopeLevel == 0) { getContext().addIssue(this, tree, "Remove the use of \"this\"."); } return; } scopeLevel++; }
@Override public void beforeBlockElement(ProgramState currentState, Tree element, ProgramPoint programPoint) { if (programPoint instanceof MemberProgramPoint) { final Optional<ProgramState> result = programPoint.execute(currentState); if (!result.isPresent()) { final ExpressionTree memberOwner = ((MemberExpressionTree) element).object(); Symbol symbol = getSymbol(memberOwner); addUniqueIssue(memberOwner, symbol); } } else if (isForOfExpression(element)) { Symbol symbol = getSymbol((ExpressionTree) element); if (currentState.getConstraint(symbol).isStricterOrEqualTo(NULL_OR_UNDEFINED)) { addUniqueIssue(element, symbol); } } }