package org.angularjs.codeInsight;
import com.intellij.lang.javascript.DialectDetector;
import com.intellij.lang.javascript.JavaScriptSpecificHandlersFactory;
import com.intellij.lang.javascript.ecmascript6.TypeScriptQualifiedItemProcessor;
import com.intellij.lang.javascript.psi.ecmal4.JSClass;
import com.intellij.lang.javascript.psi.impl.JSReferenceExpressionImpl;
import com.intellij.lang.javascript.psi.resolve.QualifiedItemProcessor;
import com.intellij.lang.javascript.psi.resolve.ResultSink;
import com.intellij.psi.PsiElement;
import com.intellij.psi.impl.source.resolve.ResolveCache;
import org.angularjs.index.AngularJS2IndexingHandler;
import org.jetbrains.annotations.NotNull;
/**
* @author Dennis.Ushakov
*/
public class AngularJSSpecificHandlersFactory extends JavaScriptSpecificHandlersFactory {
@NotNull
@Override
public ResolveCache.PolyVariantResolver<JSReferenceExpressionImpl> createReferenceExpressionResolver(
JSReferenceExpressionImpl referenceExpression, boolean ignorePerformanceLimits) {
return new AngularJSReferenceExpressionResolver(referenceExpression, ignorePerformanceLimits);
}
@Override
public <T extends ResultSink> QualifiedItemProcessor<T> createQualifiedItemProcessor(@NotNull T sink, @NotNull PsiElement place) {
JSClass clazz = AngularJS2IndexingHandler.findDirectiveClass(place);
if (clazz != null && DialectDetector.isTypeScript(clazz)) {
return new TypeScriptQualifiedItemProcessor<>(sink, place.getContainingFile());
}
return super.createQualifiedItemProcessor(sink, place);
}
}