Package org.jetbrains.plugins.clojure.psi.impl.list

Source Code of org.jetbrains.plugins.clojure.psi.impl.list.ClListBaseImpl

package org.jetbrains.plugins.clojure.psi.impl.list;

import com.intellij.openapi.util.Condition;
import com.intellij.psi.StubBasedPsiElement;
import com.intellij.psi.stubs.StubElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.plugins.clojure.psi.ClojureBaseElementImpl;
import org.jetbrains.plugins.clojure.psi.ClojurePsiElement;
import org.jetbrains.plugins.clojure.psi.api.ClList;
import org.jetbrains.plugins.clojure.psi.api.ClQuotedForm;
import org.jetbrains.plugins.clojure.psi.api.symbols.ClSymbol;
import org.jetbrains.plugins.clojure.lexer.ClojureTokenTypes;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.NotNull;
import com.intellij.psi.PsiElement;
import com.intellij.psi.stubs.NamedStub;
import com.intellij.psi.stubs.IStubElementType;
import com.intellij.psi.impl.source.tree.LeafPsiElement;
import com.intellij.lang.ASTNode;
import org.jetbrains.plugins.clojure.psi.stubs.api.ClDefStub;

import java.util.List;

/**
* @author ilyas
*/
public abstract class ClListBaseImpl<T extends StubElement> extends ClojureBaseElementImpl<T> implements ClList, StubBasedPsiElement<T> {

  public ClListBaseImpl(T stub, @NotNull IStubElementType nodeType) {
    super(stub, nodeType);
  }

  public ClListBaseImpl(ASTNode node) {
    super(node);
  }

  @Nullable
  public String getPresentableText() {
    final ClSymbol first = findChildByClass(ClSymbol.class);
    if (first == null) return null;
    final String text1 = getHeadText();
    PsiElement next = PsiTreeUtil.getNextSiblingOfType(first, ClSymbol.class);
    if (next == null) return text1;
    else return text1 + " " + next.getText();
  }

  @Nullable
  public String getHeadText() {
    PsiElement first = getFirstNonLeafElement();
    if (first == null) return null;
    return first.getText();
  }

  @Nullable
  public ClSymbol getFirstSymbol() {
    PsiElement child = getFirstChild();
    while (child instanceof LeafPsiElement) {
      child = child.getNextSibling();
    }
    if (child instanceof ClSymbol) {
      return (ClSymbol) child;
    }
    return null;
  }

  @NotNull
  public PsiElement getFirstBrace() {
    PsiElement element = findChildByType(ClojureTokenTypes.LEFT_PAREN);
    assert element != null;
    return element;
  }

  public PsiElement getSecondNonLeafElement() {
    PsiElement first = getFirstChild();
    while (first != null && isWrongElement(first)) {
      first = first.getNextSibling();
    }
    if (first == null) {
      return null;
    }
    PsiElement second = first.getNextSibling();
    while (second != null && isWrongElement(second)) {
      second = second.getNextSibling();
    }
    return second;
  }

  public PsiElement getLastBrace() {
    return findChildByType(ClojureTokenTypes.RIGHT_PAREN);
  }

}
TOP

Related Classes of org.jetbrains.plugins.clojure.psi.impl.list.ClListBaseImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.