in tools/ideabuck/src/com/facebook/buck/intellij/ideabuck/util/BuckPsiUtils.java [198:330]
private static void visitSymbols(PsiElement psiElement, SymbolVisitor visitor) {
if (psiElement == null) {
return;
}
Consumer<PsiElement> recurse = e -> visitSymbols(e, visitor);
if (psiElement instanceof BuckFile) {
Stream.of(((BuckFile) psiElement).getChildren()).forEach(recurse);
} else if (psiElement instanceof BuckIdentifier) {
visitor.visit(((BuckIdentifier) psiElement).getName(), psiElement);
} else if (psiElement instanceof BuckLoadCall) {
((BuckLoadCall) psiElement).getLoadArgumentList().forEach(recurse);
} else if (psiElement instanceof BuckLoadArgument) {
BuckIdentifier identifier = ((BuckLoadArgument) psiElement).getIdentifier();
if (identifier != null) {
recurse.accept(identifier);
} else {
BuckString nameElement = ((BuckLoadArgument) psiElement).getString();
visitor.visit(nameElement.getValue(), nameElement);
}
} else if (psiElement instanceof BuckFunctionDefinition) {
recurse.accept(((BuckFunctionDefinition) psiElement).getIdentifier());
} else if (psiElement instanceof BuckParameterList) {
((BuckParameterList) psiElement).getParameterList().forEach(recurse::accept);
} else if (psiElement instanceof BuckParameter) {
recurse.accept(((BuckParameter) psiElement).getIdentifier());
} else if (psiElement instanceof BuckStatement) {
recurse.accept(((BuckStatement) psiElement).getSimpleStatement());
recurse.accept(((BuckStatement) psiElement).getCompoundStatement());
} else if (psiElement instanceof BuckIfStatement) {
List<BuckExpression> expressionList = ((BuckIfStatement) psiElement).getExpressionList();
expressionList.forEach(recurse);
List<BuckSuite> suiteList = ((BuckIfStatement) psiElement).getSuiteList();
suiteList.forEach(recurse);
} else if (psiElement instanceof BuckSimpleStatement) {
((BuckSimpleStatement) psiElement).getSmallStatementList().forEach(recurse);
} else if (psiElement instanceof BuckCompoundStatement) {
recurse.accept(((BuckCompoundStatement) psiElement).getForStatement());
recurse.accept(((BuckCompoundStatement) psiElement).getIfStatement());
recurse.accept(((BuckCompoundStatement) psiElement).getFunctionDefinition());
} else if (psiElement instanceof BuckForStatement) {
recurse.accept(((BuckForStatement) psiElement).getSimpleExpressionList());
recurse.accept(((BuckForStatement) psiElement).getSuite());
} else if (psiElement instanceof BuckSmallStatement) {
recurse.accept(((BuckSmallStatement) psiElement).getExpressionStatement());
recurse.accept(((BuckSmallStatement) psiElement).getLoadCall());
} else if (psiElement instanceof BuckSuite) {
recurse.accept(((BuckSuite) psiElement).getSimpleStatement());
((BuckSuite) psiElement).getStatementList().forEach(recurse);
} else if (psiElement instanceof BuckExpressionStatement) {
List<BuckExpressionList> list =
((BuckExpressionStatement) psiElement).getExpressionListList();
list.subList(0, list.size() - 1).forEach(recurse::accept);
} else if (psiElement instanceof BuckExpressionList) {
((BuckExpressionList) psiElement).getExpressionList().forEach(recurse);
} else if (psiElement instanceof BuckExpressionListOrComprehension) {
BuckExpressionListOrComprehension beloc = ((BuckExpressionListOrComprehension) psiElement);
if (beloc.getComprehensionFor() == null) {
recurse.accept(((BuckExpressionListOrComprehension) psiElement).getComprehensionFor());
}
} else if (psiElement instanceof BuckComprehensionFor) {
recurse.accept(((BuckComprehensionFor) psiElement).getSimpleExpressionList());
} else if (psiElement instanceof BuckExpression) {
recurse.accept(((BuckExpression) psiElement).getOrExpressionList().get(0));
recurse.accept(((BuckExpression) psiElement).getExpression());
} else if (psiElement instanceof BuckOrExpression) {
List<BuckAndExpression> list = ((BuckOrExpression) psiElement).getAndExpressionList();
if (list.size() == 1) {
recurse.accept(list.get(0));
}
} else if (psiElement instanceof BuckAndExpression) {
List<BuckNotExpression> list = ((BuckAndExpression) psiElement).getNotExpressionList();
if (list.size() == 1) {
recurse.accept(list.get(0));
}
} else if (psiElement instanceof BuckNotExpression) {
recurse.accept(((BuckNotExpression) psiElement).getComparisonExpression());
} else if (psiElement instanceof BuckComparisonExpression) {
List<BuckSimpleExpression> list =
((BuckComparisonExpression) psiElement).getSimpleExpressionList();
if (list.size() == 1) {
recurse.accept(list.get(0));
}
} else if (psiElement instanceof BuckSimpleExpressionList) {
(((BuckSimpleExpressionList) psiElement).getSimpleExpressionList()).forEach(recurse);
} else if (psiElement instanceof BuckSimpleExpression) {
List<BuckXorExpression> list = ((BuckSimpleExpression) psiElement).getXorExpressionList();
if (list.size() == 1) {
recurse.accept(list.get(0));
}
} else if (psiElement instanceof BuckXorExpression) {
List<BuckBitwiseAndExpression> list =
((BuckXorExpression) psiElement).getBitwiseAndExpressionList();
if (list.size() == 1) {
recurse.accept(list.get(0));
}
} else if (psiElement instanceof BuckBitwiseAndExpression) {
List<BuckShiftExpression> list =
((BuckBitwiseAndExpression) psiElement).getShiftExpressionList();
if (list.size() == 1) {
recurse.accept(list.get(0));
}
} else if (psiElement instanceof BuckShiftExpression) {
List<BuckArithmeticExpression> list =
((BuckShiftExpression) psiElement).getArithmeticExpressionList();
if (list.size() == 1) {
recurse.accept(list.get(0));
}
} else if (psiElement instanceof BuckArithmeticExpression) {
List<BuckTermExpression> list =
((BuckArithmeticExpression) psiElement).getTermExpressionList();
if (list.size() == 1) {
recurse.accept(list.get(0));
}
} else if (psiElement instanceof BuckTermExpression) {
List<BuckFactorExpression> list = ((BuckTermExpression) psiElement).getFactorExpressionList();
if (list.size() == 1) {
recurse.accept(list.get(0));
}
} else if (psiElement instanceof BuckFactorExpression) {
recurse.accept(((BuckFactorExpression) psiElement).getPowerExpression());
} else if (psiElement instanceof BuckPowerExpression) {
BuckPowerExpression powerExpression = (BuckPowerExpression) psiElement;
if (powerExpression.getExpressionTrailerList().isEmpty()
&& powerExpression.getFactorExpression() == null) {
recurse.accept(powerExpression.getAtomicExpression());
}
} else if (psiElement instanceof BuckAtomicExpression) {
recurse.accept(((BuckAtomicExpression) psiElement).getExpressionListOrComprehension());
recurse.accept(((BuckAtomicExpression) psiElement).getIdentifier());
} else {
LOG.info("Unparsed: " + psiElement.getNode().getElementType());
}
}