package org.elixir_lang.psi.stub.type;
import com.intellij.psi.PsiNameIdentifierOwner;
import com.intellij.psi.stubs.IndexSink;
import com.intellij.psi.stubs.NamedStubBase;
import org.elixir_lang.psi.stub.call.Stubbic;
import org.elixir_lang.psi.stub.index.AllName;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public abstract class Named<S extends NamedStubBase<T>, T extends PsiNameIdentifierOwner> extends Element<S, T> {
public Named(@NonNls @NotNull String debugName) {
super(debugName);
}
public static <T extends Stubbic> void indexStubbic(@NotNull final T stubbic, @NotNull final IndexSink sink) {
String name = stubbic.getName();
if (name != null) {
sink.occurrence(AllName.KEY, name);
}
@SuppressWarnings("unchecked") Set<String> canonicalNameSet = stubbic.canonicalNameSet();
for (String canonicalName : canonicalNameSet) {
if (!canonicalName.equals(name)) {
sink.occurrence(AllName.KEY, canonicalName);
}
}
}
@Override
public void indexStub(@NotNull final S stub, @NotNull final IndexSink sink) {
if (stub instanceof Stubbic) {
indexStubbic((Stubbic) stub, sink);
} else {
String name = stub.getName();
if (name != null) {
sink.occurrence(AllName.KEY, name);
}
}
}
@NotNull
public String getExternalId() {
return "elixir." + super.toString();
}
}