package org.elixir_lang.scope_processor;
import com.intellij.psi.PsiElement;
import com.intellij.psi.ResolveState;
import com.intellij.psi.scope.BaseScopeProcessor;
import org.elixir_lang.psi.QualifiableAlias;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class Module extends BaseScopeProcessor {
/*
* Fields
*/
private final QualifiableAlias usage;
private QualifiableAlias declaration = null;
/*
* Constructors
*/
public Module(QualifiableAlias usage) {
this.usage = usage;
}
@Nullable
public QualifiableAlias declaration() {
return declaration;
}
/**
* @param element candidate element.
* @param state current state of resolver.
* @return false to stop processing.
*/
@Override
public boolean execute(@NotNull final PsiElement element, @NotNull final ResolveState state) {
boolean keepProcessing = true;
if (element instanceof QualifiableAlias) {
QualifiableAlias qualifiableAlias = (QualifiableAlias) element;
String qualifiableAliasFullyQualifiedName = qualifiableAlias.fullyQualifiedName();
if (qualifiableAlias.isModuleName() &&
qualifiableAliasFullyQualifiedName != null &&
qualifiableAliasFullyQualifiedName.equals(usage.fullyQualifiedName())) {
declaration = qualifiableAlias;
keepProcessing = false;
}
}
return keepProcessing;
}
}