private static void visitSymbols()

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());
    }
  }