Code completion: named parameter completion made not contributor

This commit is contained in:
Valentin Kipyatkov
2014-08-05 15:43:01 +04:00
parent c9b3c97ff5
commit 3e051d617c
3 changed files with 11 additions and 31 deletions
-5
View File
@@ -233,11 +233,6 @@
order="after JetCompletionContributor"
implementationClass="org.jetbrains.jet.plugin.liveTemplates.JetLiveTemplateCompletionContributor"/>
<completion.contributor language="jet"
id="KotlinNamedParametersContributor"
order="after JetLiveTemplateCompletionContributor"
implementationClass="org.jetbrains.jet.plugin.completion.KotlinNamedParametersContributor"/>
<completion.confidence language="jet" implementationClass="com.intellij.codeInsight.completion.UnfocusedNameIdentifier"/>
<completion.confidence language="jet"
implementationClass="org.jetbrains.jet.plugin.completion.confidence.UnfocusedPossibleFunctionParameter"/>
@@ -105,6 +105,8 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration,
}
KeywordCompletion().complete(parameters, collector)
NamedParametersCompletion.complete(parameters, collector)
}
private fun addNonImported() {
@@ -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<JetValueArgumentName>()), 2)
)
);
)
{
extend(CompletionType.BASIC,
PlatformPatterns.psiElement().and(FilterPattern(InNamedParameterFilter)),
object : CompletionProvider<CompletionParameters>() {
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<JetValueArgument>())!!
val valueArgument = PsiTreeUtil.getParentOfType(position, javaClass<JetValueArgument>())!!
val callElement = PsiTreeUtil.getParentOfType(valueArgument, javaClass<JetCallElement>()) ?: 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)
}
}
}