Code completion: named parameter completion made not contributor
This commit is contained in:
@@ -233,11 +233,6 @@
|
|||||||
order="after JetCompletionContributor"
|
order="after JetCompletionContributor"
|
||||||
implementationClass="org.jetbrains.jet.plugin.liveTemplates.JetLiveTemplateCompletionContributor"/>
|
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="com.intellij.codeInsight.completion.UnfocusedNameIdentifier"/>
|
||||||
<completion.confidence language="jet"
|
<completion.confidence language="jet"
|
||||||
implementationClass="org.jetbrains.jet.plugin.completion.confidence.UnfocusedPossibleFunctionParameter"/>
|
implementationClass="org.jetbrains.jet.plugin.completion.confidence.UnfocusedPossibleFunctionParameter"/>
|
||||||
|
|||||||
@@ -105,6 +105,8 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration,
|
|||||||
}
|
}
|
||||||
|
|
||||||
KeywordCompletion().complete(parameters, collector)
|
KeywordCompletion().complete(parameters, collector)
|
||||||
|
|
||||||
|
NamedParametersCompletion.complete(parameters, collector)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addNonImported() {
|
private fun addNonImported() {
|
||||||
|
|||||||
+9
-26
@@ -16,13 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.plugin.completion
|
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 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 com.intellij.codeInsight.completion.CompletionParameters
|
||||||
import org.jetbrains.jet.lexer.JetTokens
|
import org.jetbrains.jet.lexer.JetTokens
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
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 org.jetbrains.jet.lang.descriptors.FunctionDescriptor
|
||||||
import com.intellij.codeInsight.lookup.LookupElementBuilder
|
import com.intellij.codeInsight.lookup.LookupElementBuilder
|
||||||
import org.jetbrains.jet.plugin.JetIcons
|
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.plugin.quickfix.QuickFixUtil
|
||||||
import org.jetbrains.jet.renderer.DescriptorRenderer
|
import org.jetbrains.jet.renderer.DescriptorRenderer
|
||||||
import com.intellij.codeInsight.completion.InsertHandler
|
import com.intellij.codeInsight.completion.InsertHandler
|
||||||
import com.intellij.codeInsight.lookup.LookupElement
|
import com.intellij.codeInsight.lookup.LookupElement
|
||||||
import com.intellij.codeInsight.completion.InsertionContext
|
import com.intellij.codeInsight.completion.InsertionContext
|
||||||
import com.intellij.psi.filters.position.FilterPattern
|
|
||||||
import com.intellij.psi.filters.AndFilter
|
import com.intellij.psi.filters.AndFilter
|
||||||
import org.jetbrains.jet.lang.psi.JetValueArgumentName
|
import org.jetbrains.jet.lang.psi.JetValueArgumentName
|
||||||
import com.intellij.psi.filters.position.ParentElementFilter
|
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.plugin.util.FirstChildInParentFilter
|
||||||
import org.jetbrains.jet.lang.psi.psiUtil.getCallNameExpression
|
import org.jetbrains.jet.lang.psi.psiUtil.getCallNameExpression
|
||||||
|
|
||||||
public class KotlinNamedParametersContributor : CompletionContributor() {
|
object NamedParametersCompletion {
|
||||||
private val InNamedParameterFilter = AndFilter(
|
private val positionFilter = AndFilter(
|
||||||
LeafElementFilter(JetTokens.IDENTIFIER),
|
LeafElementFilter(JetTokens.IDENTIFIER),
|
||||||
OrFilter(
|
OrFilter(
|
||||||
AndFilter(
|
AndFilter(
|
||||||
@@ -56,26 +48,17 @@ public class KotlinNamedParametersContributor : CompletionContributor() {
|
|||||||
),
|
),
|
||||||
ParentElementFilter(ClassFilter(javaClass<JetValueArgumentName>()), 2)
|
ParentElementFilter(ClassFilter(javaClass<JetValueArgumentName>()), 2)
|
||||||
)
|
)
|
||||||
);
|
)
|
||||||
|
|
||||||
{
|
public fun complete(parameters: CompletionParameters, collector: LookupElementsCollector) {
|
||||||
extend(CompletionType.BASIC,
|
val position = parameters.getPosition()
|
||||||
PlatformPatterns.psiElement().and(FilterPattern(InNamedParameterFilter)),
|
if (!positionFilter.isAcceptable(position, position)) return
|
||||||
object : CompletionProvider<CompletionParameters>() {
|
|
||||||
override fun addCompletions(parameters: CompletionParameters, context: ProcessingContext, result: CompletionResultSet) {
|
|
||||||
doParamsCompletion(parameters, result)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun doParamsCompletion(parameters: CompletionParameters, result: CompletionResultSet) {
|
val valueArgument = PsiTreeUtil.getParentOfType(position, javaClass<JetValueArgument>())!!
|
||||||
val valueArgument = PsiTreeUtil.getParentOfType(parameters.getPosition(), javaClass<JetValueArgument>())!!
|
|
||||||
|
|
||||||
val callElement = PsiTreeUtil.getParentOfType(valueArgument, javaClass<JetCallElement>()) ?: return
|
val callElement = PsiTreeUtil.getParentOfType(valueArgument, javaClass<JetCallElement>()) ?: return
|
||||||
val callSimpleName = callElement.getCallNameExpression() ?: return
|
val callSimpleName = callElement.getCallNameExpression() ?: return
|
||||||
|
|
||||||
val kotlinResultSet = result.addKotlinSorting(parameters)
|
|
||||||
|
|
||||||
val callReference = callSimpleName.getReference() as JetReference
|
val callReference = callSimpleName.getReference() as JetReference
|
||||||
|
|
||||||
val functionDescriptors = callReference.resolveToDescriptors().map { it as? FunctionDescriptor }.filterNotNull()
|
val functionDescriptors = callReference.resolveToDescriptors().map { it as? FunctionDescriptor }.filterNotNull()
|
||||||
@@ -87,7 +70,7 @@ public class KotlinNamedParametersContributor : CompletionContributor() {
|
|||||||
|
|
||||||
for (parameter in funDescriptor.getValueParameters()) {
|
for (parameter in funDescriptor.getValueParameters()) {
|
||||||
val name = parameter.getName().asString()
|
val name = parameter.getName().asString()
|
||||||
if (result.getPrefixMatcher().prefixMatches(name) && name !in usedArguments) {
|
if (name !in usedArguments) {
|
||||||
val lookupElement = LookupElementBuilder.create("$name")
|
val lookupElement = LookupElementBuilder.create("$name")
|
||||||
.withPresentableText("$name = ")
|
.withPresentableText("$name = ")
|
||||||
.withTailText("${DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(parameter.getType())}")
|
.withTailText("${DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderType(parameter.getType())}")
|
||||||
@@ -96,7 +79,7 @@ public class KotlinNamedParametersContributor : CompletionContributor() {
|
|||||||
.assignPriority(ItemPriority.NAMED_PARAMETER)
|
.assignPriority(ItemPriority.NAMED_PARAMETER)
|
||||||
lookupElement.putUserData(JetCompletionCharFilter.ACCEPT_EQ, true);
|
lookupElement.putUserData(JetCompletionCharFilter.ACCEPT_EQ, true);
|
||||||
|
|
||||||
kotlinResultSet.addElement(lookupElement)
|
collector.addElement(lookupElement)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user