package org.elixir_lang.beam.psi.impl;
import com.intellij.psi.stubs.StubElement;
import org.elixir_lang.beam.psi.Module;
import org.elixir_lang.beam.psi.stubs.ModuleStub;
import org.elixir_lang.beam.psi.stubs.ModuleStubElementTypes;
import org.elixir_lang.psi.call.name.Function;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import static org.elixir_lang.psi.call.name.Function.DEFMODULE;
import static org.elixir_lang.psi.call.name.Module.KERNEL;
/**
* See {@link com.intellij.psi.impl.java.stubs.impl.PsiClassStubImpl}
*/
public class ModuleStubImpl<T extends Module> extends StubbicBase<T> implements ModuleStub<T> {
public static final int RESOLVED_FINAL_ARITY = 2;
public static final String RESOLVED_FUNCTION_NAME = DEFMODULE;
public static final String RESOLVED_MODULE_NAME = KERNEL;
public ModuleStubImpl(@NotNull StubElement parentStub,
@NotNull String name) {
super(parentStub, ModuleStubElementTypes.MODULE, name);
}
/**
* Arity of {@code defmodule .. do}.
*
* @return 2 (1 for name and 1 for do block)
*/
@Override
public Integer resolvedFinalArity() {
return RESOLVED_FINAL_ARITY;
}
/**
* @return {@link Function#DEFMODULE}
*/
@Nullable
@Override
public String resolvedFunctionName() {
return RESOLVED_FUNCTION_NAME;
}
/**
* @return {@link org.elixir_lang.psi.call.name.Module#KERNEL}
*/
@Nullable
@Override
public String resolvedModuleName() {
return RESOLVED_MODULE_NAME;
}
}