package org.elixir_lang.beam.psi.stubs;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import com.intellij.psi.stubs.*;
import com.intellij.psi.tree.ICompositeElementType;
import org.elixir_lang.ElixirLanguage;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
public abstract class ModuleStubElementType<S extends StubElement, P extends PsiElement>
extends ILightStubElementType<S, P> implements ICompositeElementType {
protected ModuleStubElementType(@NotNull @NonNls String debugName) {
super(debugName, ElixirLanguage.INSTANCE);
}
@SuppressWarnings("MethodOverloadsMethodOfSuperclass")
public abstract P createPsi(@NotNull ASTNode node);
@Override
public S createStub(@NotNull P psi, StubElement parentStub) {
final String message = "Should not be called. Element=" + psi +
"; class" + psi.getClass() +
"; file=" + (psi.isValid() ? psi.getContainingFile() : "-");
throw new UnsupportedOperationException(message);
}
@NotNull
@Override
public String getExternalId() {
return "beam." + toString();
}
}