package com.haskforce.stubs.types; import com.haskforce.HaskellLanguage; import com.haskforce.psi.HaskellFile; import com.haskforce.stubs.HaskellFileStub; import com.intellij.psi.PsiFile; import com.intellij.psi.StubBuilder; import com.intellij.psi.stubs.DefaultStubBuilder; import com.intellij.psi.stubs.StubElement; import com.intellij.psi.stubs.StubInputStream; import com.intellij.psi.stubs.StubOutputStream; import com.intellij.psi.tree.IStubFileElementType; import org.jetbrains.annotations.NotNull; import java.io.IOException; /** * Define how and when to create a stub for a Haskell file so we can index its contents. */ public class HaskellFileStubElementType extends IStubFileElementType<HaskellFileStub> { public static final int VERSION = 0; public static final IStubFileElementType INSTANCE = new HaskellFileStubElementType(); public HaskellFileStubElementType() { super("FILE", HaskellLanguage.INSTANCE); } @Override public StubBuilder getBuilder() { return new DefaultStubBuilder() { @NotNull @Override protected StubElement createStubForFile(@NotNull PsiFile file) { if (file instanceof HaskellFile) { return new HaskellFileStub((HaskellFile)file); } return super.createStubForFile(file); } }; } @Override public int getStubVersion() { return VERSION; } @Override public void serialize(@NotNull HaskellFileStub stub, @NotNull StubOutputStream dataStream) throws IOException { // TODO } @NotNull @Override public HaskellFileStub deserialize(@NotNull StubInputStream dataStream, StubElement parentStub) throws IOException { return new HaskellFileStub(null); } @NotNull @Override public String getExternalId() { return "haskell.FILE"; } }