package com.intellij.javascript.flex.completion; import com.intellij.lang.javascript.completion.*; import com.intellij.lang.javascript.psi.JSExpressionStatement; import com.intellij.lang.javascript.psi.JSFile; import com.intellij.lang.javascript.psi.JSFunction; import com.intellij.lang.javascript.psi.JSReferenceExpression; import com.intellij.lang.javascript.psi.ecmal4.JSAttributeList; import com.intellij.lang.javascript.psi.ecmal4.JSAttributeNameValuePair; import com.intellij.lang.javascript.psi.ecmal4.JSImportStatement; import com.intellij.lang.javascript.psi.resolve.JSResolveUtil; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NonNls; /** * @author Konstantin.Ulitin */ public class ActionScriptCompletionKeywordsContributor extends JSCompletionKeywordsContributor { private static final @NonNls String[] accessModifiers = {"public", "private", "protected", "internal"}; @Override public boolean process(KeywordCompletionConsumer consumer, PsiElement context) { if (JSCompletionContributor.getInstance().isDoingSmartCodeCompleteAction()) return false; final PsiElement parent = context.getParent(); final PsiElement grandParent = parent != null ? parent.getParent() : null; final PsiElement grandGrandParent = grandParent != null ? grandParent.getParent() : null; if (parent instanceof JSReferenceExpression && ((JSReferenceExpression)parent).getQualifier() == null && (JSResolveUtil.isExprInTypeContext((JSReferenceExpression)parent) || grandParent instanceof JSExpressionStatement && (JSResolveUtil.isPlaceWhereNsCanBe(grandParent) || grandGrandParent instanceof JSFile && grandGrandParent.getContext() == null) || grandParent instanceof JSAttributeList || parent instanceof JSAttributeNameValuePair ) ) { if (!(grandParent instanceof JSImportStatement) && (grandParent instanceof JSAttributeList || JSResolveUtil.isPlaceWhereNsCanBe(grandParent) || grandGrandParent instanceof JSFile) && (!(grandParent instanceof JSFunction) || ((JSFunction)grandParent).getReturnTypeElement() != parent) ) { consumer.consume(JSLookupPriority.SMART_KEYWORDS_PRIORITY, true, accessModifiers); consumer.consume(JSLookupPriority.SMART_KEYWORDS_PRIORITY, true, "class", "function", "interface", "namespace", "package", "extends", "implements", "import", "override", "static", "dynamic", "var", "const", "use", "final"); } return false; } if (JSResolveUtil.isInPlaceWhereTypeCanBeDuringCompletion(parent) && JSResolveUtil.isPlaceWhereNsCanBe(grandParent) ) { consumer.consume(JSLookupPriority.KEYWORDS_PRIORITY, false, JSKeywordsCompletionProvider.TYPE_LITERAL_VALUES); consumer.consume(JSLookupPriority.KEYWORDS_PRIORITY, false, "function"); consumer.consume(JSLookupPriority.KEYWORDS_PRIORITY, true, accessModifiers); consumer.consume(JSLookupPriority.KEYWORDS_PRIORITY, true, "extends", "implements", "include", "import", "static", "override", "namespace", "class", "interface", "var", "use"); return false; } return true; } @Override public void appendSpecificKeywords(KeywordCompletionConsumer consumer) { consumer.consume(JSLookupPriority.NON_CONTEXT_KEYWORDS_PRIORITY, true, "is", "as", "class", "interface", "internal", "public", "protected", "native", "override", "dynamic", "extends", "implements", "import", "static", "namespace", "use", "super", "include", //"get", // do not add since it will stop the auto completion even iff we have common getXXX() //"set", "package" ); consumer.consume(JSLookupPriority.NON_CONTEXT_KEYWORDS_PRIORITY, false, "int", "uint"); } }