[FIR-IDE] Fix completion check for generic extensions
Generic candidate extensions are completed in partial mode when there is not enough information for type parameter in return position. Partial completion mode in single candidate resolver leads to unconditionally failing candidate. Providing noExpectedType instead of null guarantees full completion.
This commit is contained in:
+11
@@ -0,0 +1,11 @@
|
||||
// FIR_COMPARISON
|
||||
class Generic<T>
|
||||
|
||||
fun <A : String, B, C> Generic<A>.extension(arg: (A) -> B): B = TODO()
|
||||
|
||||
fun test() {
|
||||
val v = Generic<String>()
|
||||
v.ext<caret>
|
||||
}
|
||||
|
||||
// EXIST: extension
|
||||
+5
@@ -1433,6 +1433,11 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
|
||||
runTest("idea/idea-completion/testData/basic/common/extensions/NoMemberExtensionsFromCompanionObject.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("ParametrizedExpectedType.kt")
|
||||
public void testParametrizedExpectedType() throws Exception {
|
||||
runTest("idea/idea-completion/testData/basic/common/extensions/ParametrizedExpectedType.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("StarTypeArg.kt")
|
||||
public void testStarTypeArg() throws Exception {
|
||||
runTest("idea/idea-completion/testData/basic/common/extensions/StarTypeArg.kt");
|
||||
|
||||
+5
@@ -1433,6 +1433,11 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
|
||||
runTest("idea/idea-completion/testData/basic/common/extensions/NoMemberExtensionsFromCompanionObject.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("ParametrizedExpectedType.kt")
|
||||
public void testParametrizedExpectedType() throws Exception {
|
||||
runTest("idea/idea-completion/testData/basic/common/extensions/ParametrizedExpectedType.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("StarTypeArg.kt")
|
||||
public void testStarTypeArg() throws Exception {
|
||||
runTest("idea/idea-completion/testData/basic/common/extensions/StarTypeArg.kt");
|
||||
|
||||
+5
@@ -1433,6 +1433,11 @@ public class HighLevelJvmBasicCompletionTestGenerated extends AbstractHighLevelJ
|
||||
runTest("idea/idea-completion/testData/basic/common/extensions/NoMemberExtensionsFromCompanionObject.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("ParametrizedExpectedType.kt")
|
||||
public void testParametrizedExpectedType() throws Exception {
|
||||
runTest("idea/idea-completion/testData/basic/common/extensions/ParametrizedExpectedType.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("StarTypeArg.kt")
|
||||
public void testStarTypeArg() throws Exception {
|
||||
runTest("idea/idea-completion/testData/basic/common/extensions/StarTypeArg.kt");
|
||||
|
||||
+2
-1
@@ -90,7 +90,8 @@ class SingleCandidateResolver(
|
||||
candidate = candidate
|
||||
)
|
||||
}
|
||||
val completionResult = firCallCompleter.completeCall(fakeCall, resolutionParameters.expectedType)
|
||||
val expectedType = resolutionParameters.expectedType ?: bodyResolveComponents.noExpectedType
|
||||
val completionResult = firCallCompleter.completeCall(fakeCall, expectedType)
|
||||
return if (completionResult.callCompleted) {
|
||||
completionResult.result
|
||||
} else null
|
||||
|
||||
Reference in New Issue
Block a user