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.base.Predicate;
|
||||||
import com.google.common.collect.Collections2;
|
import com.google.common.collect.Collections2;
|
||||||
import com.intellij.codeInsight.completion.CompletionParameters;
|
import com.intellij.codeInsight.completion.*;
|
||||||
import com.intellij.codeInsight.completion.CompletionResultSet;
|
|
||||||
import com.intellij.codeInsight.completion.CompletionType;
|
|
||||||
import com.intellij.codeInsight.completion.JavaCompletionContributor;
|
|
||||||
import com.intellij.codeInsight.lookup.LookupElement;
|
import com.intellij.codeInsight.lookup.LookupElement;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.util.Condition;
|
import com.intellij.openapi.util.Condition;
|
||||||
@@ -69,18 +66,20 @@ class CompletionSession {
|
|||||||
JetScope scope = expressionBindingContext.get(BindingContext.RESOLUTION_SCOPE, jetReference.getExpression());
|
JetScope scope = expressionBindingContext.get(BindingContext.RESOLUTION_SCOPE, jetReference.getExpression());
|
||||||
|
|
||||||
inDescriptor = scope != null ? scope.getContainingDeclaration() : null;
|
inDescriptor = scope != null ? scope.getContainingDeclaration() : null;
|
||||||
|
|
||||||
Condition<DeclarationDescriptor> descriptorFilter = new Condition<DeclarationDescriptor>() {
|
Condition<DeclarationDescriptor> descriptorFilter = new Condition<DeclarationDescriptor>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean value(DeclarationDescriptor descriptor) {
|
public boolean value(DeclarationDescriptor descriptor) {
|
||||||
return isVisibleDescriptor(descriptor);
|
return isVisibleDescriptor(descriptor);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
this.jetResult = new JetCompletionResultSet(
|
|
||||||
WeigherPackage.addJetSorting(result, parameters),
|
// set prefix matcher here to override default one which relies on CompletionUtil.findReferencePrefix()
|
||||||
resolveSession,
|
// which sometimes works incorrectly for Kotlin
|
||||||
expressionBindingContext,
|
result = result.withPrefixMatcher(CompletionUtil.findJavaIdentifierPrefix(parameters));
|
||||||
descriptorFilter);
|
|
||||||
|
result = WeigherPackage.addJetSorting(result, parameters);
|
||||||
|
|
||||||
|
this.jetResult = new JetCompletionResultSet(result, resolveSession, expressionBindingContext, descriptorFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void completeForReference() {
|
public void completeForReference() {
|
||||||
|
|||||||
@@ -65,12 +65,10 @@ public class JetTypesCompletionHelper {
|
|||||||
@NotNull CompletionParameters parameters,
|
@NotNull CompletionParameters parameters,
|
||||||
@NotNull final JetCompletionResultSet jetCompletionResult
|
@NotNull final JetCompletionResultSet jetCompletionResult
|
||||||
) {
|
) {
|
||||||
CompletionResultSet tempResult = jetCompletionResult.getResult().withPrefixMatcher(
|
|
||||||
CompletionUtil.findReferenceOrAlphanumericPrefix(parameters));
|
|
||||||
JavaClassNameCompletionContributor.addAllClasses(
|
JavaClassNameCompletionContributor.addAllClasses(
|
||||||
parameters,
|
parameters,
|
||||||
false,
|
false,
|
||||||
JavaCompletionSorting.addJavaSorting(parameters, tempResult).getPrefixMatcher(),
|
JavaCompletionSorting.addJavaSorting(parameters, jetCompletionResult.getResult()).getPrefixMatcher(),
|
||||||
new Consumer<LookupElement>() {
|
new Consumer<LookupElement>() {
|
||||||
@Override
|
@Override
|
||||||
public void consume(LookupElement lookupElement) {
|
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");
|
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")
|
@TestMetadata("HigherOrderFunction1.kt")
|
||||||
public void testHigherOrderFunction1() throws Exception {
|
public void testHigherOrderFunction1() throws Exception {
|
||||||
doTest("idea/testData/completion/basic/common/HigherOrderFunction1.kt");
|
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");
|
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")
|
@TestMetadata("HigherOrderFunction1.kt")
|
||||||
public void testHigherOrderFunction1() throws Exception {
|
public void testHigherOrderFunction1() throws Exception {
|
||||||
doTest("idea/testData/completion/basic/common/HigherOrderFunction1.kt");
|
doTest("idea/testData/completion/basic/common/HigherOrderFunction1.kt");
|
||||||
|
|||||||
@@ -266,6 +266,11 @@ public class JvmSmartCompletionTestGenerated extends AbstractJvmSmartCompletionT
|
|||||||
doTest("idea/testData/completion/smart/InsideIdentifier.kt");
|
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")
|
@TestMetadata("JavaEnumMembers.kt")
|
||||||
public void testJavaEnumMembers() throws Exception {
|
public void testJavaEnumMembers() throws Exception {
|
||||||
doTest("idea/testData/completion/smart/JavaEnumMembers.kt");
|
doTest("idea/testData/completion/smart/JavaEnumMembers.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user