Fixed Code completion does not work inside function variable invocation
#KT-4978 Fixed
This commit is contained in:
@@ -18,10 +18,7 @@ package org.jetbrains.jet.plugin.completion;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Collections2;
|
||||
import com.intellij.codeInsight.completion.CompletionParameters;
|
||||
import com.intellij.codeInsight.completion.CompletionResultSet;
|
||||
import com.intellij.codeInsight.completion.CompletionType;
|
||||
import com.intellij.codeInsight.completion.JavaCompletionContributor;
|
||||
import com.intellij.codeInsight.completion.*;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
@@ -69,18 +66,20 @@ class CompletionSession {
|
||||
JetScope scope = expressionBindingContext.get(BindingContext.RESOLUTION_SCOPE, jetReference.getExpression());
|
||||
|
||||
inDescriptor = scope != null ? scope.getContainingDeclaration() : null;
|
||||
|
||||
Condition<DeclarationDescriptor> descriptorFilter = new Condition<DeclarationDescriptor>() {
|
||||
@Override
|
||||
public boolean value(DeclarationDescriptor descriptor) {
|
||||
return isVisibleDescriptor(descriptor);
|
||||
}
|
||||
};
|
||||
this.jetResult = new JetCompletionResultSet(
|
||||
WeigherPackage.addJetSorting(result, parameters),
|
||||
resolveSession,
|
||||
expressionBindingContext,
|
||||
descriptorFilter);
|
||||
|
||||
// set prefix matcher here to override default one which relies on CompletionUtil.findReferencePrefix()
|
||||
// which sometimes works incorrectly for Kotlin
|
||||
result = result.withPrefixMatcher(CompletionUtil.findJavaIdentifierPrefix(parameters));
|
||||
|
||||
result = WeigherPackage.addJetSorting(result, parameters);
|
||||
|
||||
this.jetResult = new JetCompletionResultSet(result, resolveSession, expressionBindingContext, descriptorFilter);
|
||||
}
|
||||
|
||||
public void completeForReference() {
|
||||
|
||||
@@ -65,12 +65,10 @@ public class JetTypesCompletionHelper {
|
||||
@NotNull CompletionParameters parameters,
|
||||
@NotNull final JetCompletionResultSet jetCompletionResult
|
||||
) {
|
||||
CompletionResultSet tempResult = jetCompletionResult.getResult().withPrefixMatcher(
|
||||
CompletionUtil.findReferenceOrAlphanumericPrefix(parameters));
|
||||
JavaClassNameCompletionContributor.addAllClasses(
|
||||
parameters,
|
||||
false,
|
||||
JavaCompletionSorting.addJavaSorting(parameters, tempResult).getPrefixMatcher(),
|
||||
JavaCompletionSorting.addJavaSorting(parameters, jetCompletionResult.getResult()).getPrefixMatcher(),
|
||||
new Consumer<LookupElement>() {
|
||||
@Override
|
||||
public void consume(LookupElement lookupElement) {
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
fun f(p: (String) -> Unit, s: String) {
|
||||
p(<caret>)
|
||||
}
|
||||
|
||||
// EXIST: s
|
||||
// EXIST: StringBuilder
|
||||
@@ -0,0 +1,5 @@
|
||||
fun f(p: (String) -> Unit, s: String) {
|
||||
p(<caret>)
|
||||
}
|
||||
|
||||
// EXIST: s
|
||||
@@ -189,6 +189,11 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
|
||||
doTest("idea/testData/completion/basic/common/FunctionCompletionFormatting.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("FunctionVariableCallArgument.kt")
|
||||
public void testFunctionVariableCallArgument() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/FunctionVariableCallArgument.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("HigherOrderFunction1.kt")
|
||||
public void testHigherOrderFunction1() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/HigherOrderFunction1.kt");
|
||||
|
||||
@@ -189,6 +189,11 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
|
||||
doTest("idea/testData/completion/basic/common/FunctionCompletionFormatting.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("FunctionVariableCallArgument.kt")
|
||||
public void testFunctionVariableCallArgument() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/FunctionVariableCallArgument.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("HigherOrderFunction1.kt")
|
||||
public void testHigherOrderFunction1() throws Exception {
|
||||
doTest("idea/testData/completion/basic/common/HigherOrderFunction1.kt");
|
||||
|
||||
@@ -266,6 +266,11 @@ public class JvmSmartCompletionTestGenerated extends AbstractJvmSmartCompletionT
|
||||
doTest("idea/testData/completion/smart/InsideIdentifier.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("InvokeFunctionVariable.kt")
|
||||
public void testInvokeFunctionVariable() throws Exception {
|
||||
doTest("idea/testData/completion/smart/InvokeFunctionVariable.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("JavaEnumMembers.kt")
|
||||
public void testJavaEnumMembers() throws Exception {
|
||||
doTest("idea/testData/completion/smart/JavaEnumMembers.kt");
|
||||
|
||||
Reference in New Issue
Block a user