package com.chrisfolger.needsmoredojo.intellij.reference;
import com.chrisfolger.needsmoredojo.core.settings.DojoSettings;
import com.intellij.javascript.JavaScriptReferenceContributor;
import com.intellij.lang.javascript.psi.*;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.patterns.ElementPattern;
import com.intellij.patterns.PlatformPatterns;
import com.intellij.psi.*;
import com.intellij.util.ProcessingContext;
import org.jetbrains.annotations.NotNull;
public class NlsLookupReferenceContributor extends JavaScriptReferenceContributor
{
@Override
public void registerReferenceProviders(PsiReferenceRegistrar registrar)
{
ElementPattern<JSLiteralExpression> pattern = PlatformPatterns.psiElement(JSLiteralExpression.class);
registrar.registerReferenceProvider(pattern, new PsiReferenceProvider() {
@NotNull
@Override
public PsiReference[] getReferencesByElement(@NotNull PsiElement psiElement, @NotNull ProcessingContext processingContext) {
PsiElement parent = psiElement.getParent();
DojoSettings settings = ServiceManager.getService(psiElement.getProject(), DojoSettings.class);
if(!settings.isNeedsMoreDojoEnabled())
{
return new PsiReference[0];
}
if(parent instanceof JSIndexedPropertyAccessExpression) {
JSIndexedPropertyAccessExpression accessor = (JSIndexedPropertyAccessExpression) parent;
PsiElement qualifier = accessor.getQualifier();
JSLiteralExpression literal = (JSLiteralExpression) psiElement;
if(!literal.isQuotedLiteral())
{
return new PsiReference[0];
}
return new PsiReference[] { new NlsLookupReference(qualifier, accessor, (JSLiteralExpression) psiElement) };
}
return new PsiReference[0];
}
});
}
}