package com.intellij.javascript.flex;
import com.intellij.javascript.flex.index.ActionScriptCustomIndexer;
import com.intellij.javascript.flex.resolve.*;
import com.intellij.lang.javascript.completion.JSLookupPriority;
import com.intellij.lang.javascript.dialects.JSDialectSpecificHandlersFactory;
import com.intellij.lang.javascript.flex.ActionScriptExpectedTypeEvaluator;
import com.intellij.lang.javascript.index.JSCustomIndexer;
import com.intellij.lang.javascript.index.JSIndexContentBuilder;
import com.intellij.lang.javascript.psi.ExpectedTypeEvaluator;
import com.intellij.lang.javascript.psi.JSExpression;
import com.intellij.lang.javascript.psi.ecmal4.JSQualifiedNamedElement;
import com.intellij.lang.javascript.psi.impl.JSReferenceExpressionImpl;
import com.intellij.lang.javascript.psi.resolve.*;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.source.resolve.ResolveCache;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Konstantin.Ulitin
*/
public class ActionScriptSpecificHandlersFactory extends JSDialectSpecificHandlersFactory {
@NotNull
@Override
public JSTypeEvaluator newTypeEvaluator(JSEvaluateContext context, JSTypeProcessor processor, boolean ecma) {
return new ActionScriptTypeEvaluator(context, processor, ecma);
}
@NotNull
@Override
public ResolveCache.PolyVariantResolver<JSReferenceExpressionImpl> createReferenceExpressionResolver(JSReferenceExpressionImpl referenceExpression,
boolean ignorePerformanceLimits) {
return new ActionScriptReferenceExpressionResolver(referenceExpression, ignorePerformanceLimits);
}
@NotNull
@Override
public ExpectedTypeEvaluator newExpectedTypeEvaluator(JSExpression parent) {
return new ActionScriptExpectedTypeEvaluator(parent);
}
@Nullable
public JSLookupPriority getSpecificCompletionVariantPriority(final PsiElement element) {
if (element instanceof JSQualifiedNamedElement) {
final String qName = ((JSQualifiedNamedElement)element).getQualifiedName();
if (qName != null && "avmplus".equals(StringUtil.getPackageName(qName))) {
return JSLookupPriority.NO_RELEVANT_SMARTNESS_PRIORITY;
}
}
return null;
}
@NotNull
@Override
public JSClassResolver getClassResolver() {
return ActionScriptClassResolver.getInstance();
}
@NotNull
@Override
public JSImportHandler getImportHandler() {
return ActionScriptImportHandler.getInstance();
}
@NotNull
@Override
public JSTypeHelper getTypeHelper() {
return ActionScriptTypeHelper.getInstance();
}
@NotNull
@Override
public JSCustomIndexer createCustomIndexer(@NotNull PsiFile file, @NotNull JSIndexContentBuilder indexBuilder) {
return new ActionScriptCustomIndexer(file, indexBuilder);
}
@NotNull
@Override
public AccessibilityProcessingHandler createAccessibilityProcessingHandler(@Nullable PsiElement place, boolean skipNsResolving) {
return new ActionScriptAccessibilityProcessingHandler(place, skipNsResolving);
}
}