package org.fandev.lang.fan.psi.stubs.elements;
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.fandev.lang.fan.FanStubElementType;
import org.fandev.lang.fan.psi.api.statements.typeDefs.FanTypeDefinition;
import org.fandev.lang.fan.psi.stubs.FanTypeDefinitionStub;
import org.fandev.lang.fan.psi.stubs.impl.FanTypeDefinitionStubImpl;
import org.fandev.lang.fan.psi.stubs.index.FanShortClassNameIndex;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
/**
* @author Dror Bereznitsky
* @date Jan 10, 2009 12:25:41 AM
*/
public abstract class FanTypeDefinitionElementType<TypeDef extends FanTypeDefinition>
extends FanStubElementType<FanTypeDefinitionStub, TypeDef> {
public FanTypeDefinitionElementType(@NotNull final String debugName) {
super(debugName);
}
public FanTypeDefinitionStub createStub(final TypeDef psi, final StubElement parentStub) {
return new FanTypeDefinitionStubImpl(parentStub, this,
StringRef.fromString(psi.getName()), StringRef.fromString(psi.getPodName()));
}
public void serialize(final FanTypeDefinitionStub stub, final StubOutputStream dataStream) throws IOException {
dataStream.writeName(stub.getName());
dataStream.writeName(stub.getPodName());
}
public FanTypeDefinitionStub deserialize(final StubInputStream dataStream, final StubElement parentStub) throws IOException {
final StringRef name = dataStream.readName();
final StringRef podName = dataStream.readName();
return new FanTypeDefinitionStubImpl(parentStub, this, name, podName);
}
public void indexStub(final FanTypeDefinitionStub stub, final IndexSink sink) {
final String shortName = stub.getName();
if (shortName != null) {
sink.occurrence(FanShortClassNameIndex.KEY, shortName);
}
}
}