package requirejs;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
public class RequirejsReference implements PsiReference {
PsiElement element;
TextRange textRange;
public RequirejsReference(PsiElement element, TextRange textRange) {
this.element = element;
this.textRange = textRange;
}
@Override
public PsiElement getElement() {
return this.element;
}
protected boolean isSettingsValid() {
return element.getProject().getComponent(RequirejsProjectComponent.class).isSettingsValid();
}
@Nullable
@Override
public PsiElement resolve() {
if (!isSettingsValid()) {
return null;
}
return element.getProject().getComponent(RequirejsProjectComponent.class).requireResolve(element);
}
@Override
public String toString() {
return getCanonicalText();
}
@Override
public boolean isSoft() {
return false;
}
@NotNull
@Override
public Object[] getVariants() {
ArrayList<LookupElement> completionResultSet = new ArrayList<LookupElement>();
if (! isSettingsValid()) {
return completionResultSet.toArray();
}
List<String> files = element
.getProject()
.getComponent(RequirejsProjectComponent.class)
.getCompletion(element);
for (String file : files) {
completionResultSet.add(
LookupElementBuilder
.create(element, file)
.withInsertHandler(
RequirejsInsertHandler.getInstance()
)
);
}
return completionResultSet.toArray();
}
@Override
public boolean isReferenceTo(PsiElement psiElement) {
return false;
}
@Override
public PsiElement bindToElement(@NotNull PsiElement psiElement) throws IncorrectOperationException {
throw new IncorrectOperationException();
}
@Override
public PsiElement handleElementRename(String s) throws IncorrectOperationException {
throw new IncorrectOperationException();
}
@Override
public TextRange getRangeInElement() {
return textRange;
}
@NotNull
@Override
public String getCanonicalText() {
return element.getText();
}
}