/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.lang.psi;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import com.intellij.psi.stubs.IStubElementType;
import com.intellij.psi.stubs.IndexSink;
import com.intellij.psi.stubs.StubElement;
import gw.lang.parser.IParsedElement;
import gw.plugin.ij.lang.GosuElementType;
import gw.plugin.ij.lang.GosuLanguage;
import gw.plugin.ij.lang.IGosuElementType;
import org.jetbrains.annotations.NotNull;
public abstract class GosuStubElementType<S extends StubElement, T extends IGosuPsiElement> extends IStubElementType<S, T> implements IGosuElementType {
private final Class<? extends IParsedElement> peType;
public GosuStubElementType(@NotNull String debugName, Class<? extends IParsedElement> peType) {
super(debugName, GosuLanguage.instance());
this.peType = peType;
}
public GosuStubElementType(@NotNull Class<? extends IParsedElement> peType) {
super(GosuElementType.getDebugName(peType), GosuLanguage.instance());
this.peType = peType;
}
public abstract PsiElement createElement(final ASTNode node);
public void indexStub(final S stub, final IndexSink sink) {
}
@NotNull
public String getExternalId() {
return "gosu." + super.toString();
}
public Class<? extends IParsedElement> getParsedElementType() {
return peType;
}
}