package org.jetbrains.plugins.clojure.psi.stubs.elements;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import com.intellij.psi.stubs.IndexSink;
import com.intellij.psi.stubs.StubElement;
import com.intellij.psi.stubs.StubInputStream;
import com.intellij.psi.stubs.StubOutputStream;
import com.intellij.util.io.StringRef;
import org.jetbrains.plugins.clojure.parser.ClojureElementTypes;
import org.jetbrains.plugins.clojure.psi.ClStubElementType;
import org.jetbrains.plugins.clojure.psi.api.ClKeyword;
import org.jetbrains.plugins.clojure.psi.impl.ClKeywordImpl;
import org.jetbrains.plugins.clojure.psi.stubs.api.ClKeywordStub;
import org.jetbrains.plugins.clojure.psi.stubs.impl.ClKeywordStubImpl;
import org.jetbrains.plugins.clojure.psi.stubs.index.ClojureKeywordIndex;
import java.io.IOException;
/**
* @author ilyas
*/
public class ClKeywordElementType extends ClStubElementType<ClKeywordStub, ClKeyword> {
public ClKeywordElementType() {
super("key definition");
}
public void serialize(ClKeywordStub stub, StubOutputStream dataStream) throws IOException {
dataStream.writeName(stub.getName());
}
public ClKeywordStub deserialize(StubInputStream dataStream, StubElement parentStub) throws IOException {
StringRef ref = dataStream.readName();
return new ClKeywordStubImpl(parentStub, ref, this);
}
public PsiElement createElement(ASTNode node) {
return new ClKeywordImpl(node);
}
public ClKeyword createPsi(ClKeywordStub stub) {
return new ClKeywordImpl(stub, ClojureElementTypes.KEYWORD);
}
public ClKeywordStub createStub(ClKeyword psi, StubElement parentStub) {
return new ClKeywordStubImpl(parentStub, StringRef.fromString(psi.getName()), ClojureElementTypes.KEYWORD);
}
@Override
public void indexStub(ClKeywordStub stub, IndexSink sink) {
final String name = stub.getName();
if (name != null) {
sink.occurrence(ClojureKeywordIndex.KEY, name);
}
}
}