package org.elixir_lang.psi.stub.call; import com.intellij.psi.PsiReference; import org.elixir_lang.psi.call.Call; import org.jetbrains.annotations.Nullable; import java.util.Set; public interface Stubbic { /** * These names do not depend on aliases or nested modules. * * @return the canonical texts of the reference * @see PsiReference#getCanonicalText() */ Set<String> canonicalNameSet(); /** * Whether this call has a {@code do} block or a {@code :do} keyword, so it is a macro * * @return {@code true} if {@link Call#getDoBlock()} is NOT {@code null} or there is a {@code "do"} keyword argument * @see org.elixir_lang.psi.impl.ElixirPsiImplUtil#keywordArgument(Call, String) */ boolean hasDoBlockOrKeyword(); /** * The final arity that is non-{@code null}. * * @return {@link Call#resolvedSecondaryArity()} if it is not {@code null}; {@link Call#resolvedPrimaryArity()} if * it is not {@code null}; otherwise, {@code 0}. */ Integer resolvedFinalArity(); /** * @return name of the function/macro after taking into account any imports */ @Nullable String resolvedFunctionName(); /** * @return name of the qualifying module after taking into account any aliases */ @Nullable String resolvedModuleName(); @Nullable String getName(); }