package org.jetbrains.plugins.clojure.psi.impl; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; import com.intellij.psi.ResolveState; import com.intellij.psi.scope.PsiScopeProcessor; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.clojure.psi.ClojurePsiElementImpl; import org.jetbrains.plugins.clojure.psi.ClojurePsiElement; import org.jetbrains.plugins.clojure.psi.api.ClVector; import org.jetbrains.plugins.clojure.psi.api.symbols.ClSymbol; import org.jetbrains.plugins.clojure.lexer.ClojureTokenTypes; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; /** * @author ilyas */ public class ClVectorImpl extends ClojurePsiElementImpl implements ClVector { public ClVectorImpl(ASTNode node) { super(node, "ClVector"); } @NotNull public PsiElement getFirstBrace() { PsiElement element = findChildByType(ClojureTokenTypes.LEFT_SQUARE); assert element != null; return element; } public PsiElement getLastBrace() { return findChildByType(ClojureTokenTypes.RIGHT_SQUARE); } @Nullable public String getHeadText() { PsiElement first = getFirstNonLeafElement(); if (first == null) return null; return first.getText(); } public ClSymbol[] getOddSymbols() { final ClojurePsiElement[] elems = findChildrenByClass(ClojurePsiElement.class); final ArrayList<ClSymbol> res = new ArrayList<ClSymbol>(); for (int i = 0; i < elems.length; i++) { ClojurePsiElement elem = elems[i]; if (i % 2 == 0 && elem instanceof ClSymbol) { res.add((ClSymbol) elem); } } return res.toArray(new ClSymbol[res.size()]); } }