private static Optional<ClassTree> getEnclosingType(Tree tree) { final Tree classBoundary = CheckUtils.getFirstAncestor(tree, Kind.CLASS_DECLARATION, Kind.CLASS_EXPRESSION, Kind.OBJECT_LITERAL); if (classBoundary.is(Kind.OBJECT_LITERAL)) { return Optional.empty(); } else { return Optional.ofNullable((ClassTree) classBoundary); } }
@CheckForNull private static MethodDeclarationTree getEnclosingConstructor(Tree tree) { FunctionTree function = (FunctionTree) CheckUtils.getFirstAncestor(tree, KindSet.FUNCTION_KINDS); if (function != null && isConstructor(function)) { return (MethodDeclarationTree) function; } return null; }
private static boolean insideCondition(SyntaxToken token) { Tree treeWithCondition = CheckUtils.getFirstAncestor(token, Kind.IF_STATEMENT, Kind.WHILE_STATEMENT, Kind.DO_WHILE_STATEMENT, Kind.FOR_STATEMENT, Kind.CONDITIONAL_EXPRESSION); if (treeWithCondition == null) { return false; } Tree condition = ((ConditionalTree) treeWithCondition).condition(); return condition != null && condition.isAncestorOf(token); } }
private static boolean isCollectionWrite(Usage usage) { ExpressionStatementTree expressionStatement = (ExpressionStatementTree) CheckUtils.getFirstAncestor(usage.identifierTree(), Kind.EXPRESSION_STATEMENT); if (expressionStatement != null) { return isElementWrite(expressionStatement, usage) || isWritingMethodCall(expressionStatement, usage) || isVariableWrite(expressionStatement, usage); } return false; }
@Override public void visitYieldExpression(YieldExpressionTree tree) { Tree firstFunctionAncestor = CheckUtils.getFirstAncestor(tree, KindSet.FUNCTION_KINDS); if (firstFunctionAncestor == null || !isGenerator(firstFunctionAncestor)) { addIssue(tree.yieldKeyword(), MESSAGE); } super.visitYieldExpression(tree); }
private boolean isSymbolShadowed(Tree tree) { Tree scopedTree = CheckUtils.getFirstAncestor(tree, KindSet.FUNCTION_KINDS, Kind.SCRIPT); Symbol symbolSymbol = getContext().getSymbolModel().getScope(scopedTree).lookupSymbol(SYMBOL); return !symbolSymbol.external() || hasWriteUsage(symbolSymbol); }
private static boolean isInitializedToNotCollection(Usage usage) { IdentifierTree identifier = usage.identifierTree(); Tree ancestor = CheckUtils.getFirstAncestor(identifier, Kind.INITIALIZED_BINDING_ELEMENT, Kind.VAR_DECLARATION, Kind.LET_DECLARATION, Kind.CONST_DECLARATION, Kind.SCRIPT); // "ancestor" should never be "null" here if (ancestor.is(Kind.INITIALIZED_BINDING_ELEMENT)) { return !isNewCollectionCreation(((InitializedBindingElementTree) ancestor).right()); } else if (ancestor.is(Kind.SCRIPT)) { return true; } return ancestor.parent().is(Kind.FOR_OF_STATEMENT, Kind.FOR_IN_STATEMENT); }