private static ReferFilter collectReferFilter()

in src/java/org/jetbrains/plugins/clojure/psi/impl/ImportOwner.java [263:299]


  private static ReferFilter collectReferFilter(ClVector vector, ClSymbol firstSymbol) {
    final ReferFilter result = new ReferFilter();
    for (PsiElement child : vector.getChildren()) {
      if (child instanceof ClKeyword) {
        final String keywordName = ((ClKeyword) child).getName();
        final boolean isOnly = keywordName.equals(ClojureKeywords.ONLY);
        final boolean isExclude = keywordName.equals(ClojureKeywords.EXCLUDE);
        final boolean isRename = keywordName.equals(ClojureKeywords.RENAME);
        if (isOnly || isExclude) {
          final PsiElement list = ClojurePsiUtil.getNextNonWhiteSpace(child);
          if (list instanceof ClVector || list instanceof ClList) {
            ClListLike listLike = (ClListLike) list;
            final ClSymbol[] symbols = listLike.getAllSymbols();
            for (ClSymbol symbol : symbols) {
              if (isOnly) {
                result.addOnly(symbol.getNameString());
              } else if (isExclude) {
                result.addExclude(symbol.getNameString());
              }
            }
          }
        } else if (isRename) {
          final PsiElement map = ClojurePsiUtil.getNextNonWhiteSpace(child);
          if (map instanceof ClMap) {
            for (ClMapEntry entry : ((ClMap) map).getEntries()) {
              final ClojurePsiElement key = entry.getKey();
              final ClojurePsiElement value = entry.getValue();
              if (key instanceof ClSymbol && value instanceof ClSymbol) {
                result.addRename(((ClSymbol) key).getNameString(), (ClSymbol) value);
              }
            }
          }
        }
      }
    }
    return result;
  }