diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 82936fd7495..33e664b9fa6 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -233,11 +233,6 @@ order="after JetCompletionContributor" implementationClass="org.jetbrains.jet.plugin.liveTemplates.JetLiveTemplateCompletionContributor"/> - - diff --git a/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt b/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt index 8dad0bafa2f..e2acb8dc832 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt @@ -105,6 +105,8 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration, } KeywordCompletion().complete(parameters, collector) + + NamedParametersCompletion.complete(parameters, collector) } private fun addNonImported() { diff --git a/idea/src/org/jetbrains/jet/plugin/completion/KotlinNamedParametersContributor.kt b/idea/src/org/jetbrains/jet/plugin/completion/NamedParametersCompletion.kt similarity index 73% rename from idea/src/org/jetbrains/jet/plugin/completion/KotlinNamedParametersContributor.kt rename to idea/src/org/jetbrains/jet/plugin/completion/NamedParametersCompletion.kt index 175d244e107..73ac69ee08e 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/KotlinNamedParametersContributor.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/NamedParametersCompletion.kt @@ -16,13 +16,7 @@ package org.jetbrains.jet.plugin.completion -import com.intellij.codeInsight.completion.CompletionContributor -import com.intellij.codeInsight.completion.CompletionType -import com.intellij.patterns.PlatformPatterns import org.jetbrains.jet.lang.psi.JetValueArgument -import com.intellij.codeInsight.completion.CompletionProvider -import com.intellij.util.ProcessingContext -import com.intellij.codeInsight.completion.CompletionResultSet import com.intellij.codeInsight.completion.CompletionParameters import org.jetbrains.jet.lexer.JetTokens import com.intellij.psi.util.PsiTreeUtil @@ -31,13 +25,11 @@ import org.jetbrains.jet.plugin.references.JetReference import org.jetbrains.jet.lang.descriptors.FunctionDescriptor import com.intellij.codeInsight.lookup.LookupElementBuilder import org.jetbrains.jet.plugin.JetIcons -import org.jetbrains.jet.lang.resolve.name.Name import org.jetbrains.jet.plugin.quickfix.QuickFixUtil import org.jetbrains.jet.renderer.DescriptorRenderer import com.intellij.codeInsight.completion.InsertHandler import com.intellij.codeInsight.lookup.LookupElement import com.intellij.codeInsight.completion.InsertionContext -import com.intellij.psi.filters.position.FilterPattern import com.intellij.psi.filters.AndFilter import org.jetbrains.jet.lang.psi.JetValueArgumentName import com.intellij.psi.filters.position.ParentElementFilter @@ -46,8 +38,8 @@ import com.intellij.psi.filters.ClassFilter import org.jetbrains.jet.plugin.util.FirstChildInParentFilter import org.jetbrains.jet.lang.psi.psiUtil.getCallNameExpression -public class KotlinNamedParametersContributor : CompletionContributor() { - private val InNamedParameterFilter = AndFilter( +object NamedParametersCompletion { + private val positionFilter = AndFilter( LeafElementFilter(JetTokens.IDENTIFIER), OrFilter( AndFilter( @@ -56,26 +48,17 @@ public class KotlinNamedParametersContributor : CompletionContributor() { ), ParentElementFilter(ClassFilter(javaClass()), 2) ) - ); + ) - { - extend(CompletionType.BASIC, - PlatformPatterns.psiElement().and(FilterPattern(InNamedParameterFilter)), - object : CompletionProvider() { - override fun addCompletions(parameters: CompletionParameters, context: ProcessingContext, result: CompletionResultSet) { - doParamsCompletion(parameters, result) - } - }) - } + public fun complete(parameters: CompletionParameters, collector: LookupElementsCollector) { + val position = parameters.getPosition() + if (!positionFilter.isAcceptable(position, position)) return - private fun doParamsCompletion(parameters: CompletionParameters, result: CompletionResultSet) { - val valueArgument = PsiTreeUtil.getParentOfType(parameters.getPosition(), javaClass())!! + val valueArgument = PsiTreeUtil.getParentOfType(position, javaClass())!! val callElement = PsiTreeUtil.getParentOfType(valueArgument, javaClass()) ?: return val callSimpleName = callElement.getCallNameExpression() ?: return - val kotlinResultSet = result.addKotlinSorting(parameters) - val callReference = callSimpleName.getReference() as JetReference val functionDescriptors = callReference.resolveToDescriptors().map { it as? FunctionDescriptor }.filterNotNull() @@ -87,7 +70,7 @@ public class KotlinNamedParametersContributor : CompletionContributor() { for (parameter in funDescriptor.getValueParameters()) { val name = parameter.getName().asString() - if (result.getPrefixMatcher().prefixMatches(name) && name !in usedArguments) { + if (name !in usedArguments) { val lookupElement = LookupElementBuilder.create("$name") .withPresentableText("$name = ") .withTailText("${DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(parameter.getType())}") @@ -96,7 +79,7 @@ public class KotlinNamedParametersContributor : CompletionContributor() { .assignPriority(ItemPriority.NAMED_PARAMETER) lookupElement.putUserData(JetCompletionCharFilter.ACCEPT_EQ, true); - kotlinResultSet.addElement(lookupElement) + collector.addElement(lookupElement) } } }