If the last argument of a function is a suspend function,
suggest trailing lambda variant in completion.
This commit is contained in:
committed by
Stanislav Erokhin
parent
f9d550732e
commit
8e3fd0efc3
+4
-4
@@ -16,8 +16,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.resolve.calls.util
|
||||
|
||||
import org.jetbrains.kotlin.builtins.isExtensionFunctionType
|
||||
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||
import org.jetbrains.kotlin.builtins.isBuiltinExtensionFunctionalType
|
||||
import org.jetbrains.kotlin.builtins.isBuiltinFunctionalType
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||
@@ -43,7 +43,7 @@ fun createValueParametersForInvokeInFunctionType(
|
||||
}
|
||||
|
||||
fun getValueParametersCountFromFunctionType(type: KotlinType): Int {
|
||||
assert(type.isFunctionType) { "Not a function type: $type" }
|
||||
assert(type.isBuiltinFunctionalType) { "Not a function type: $type" }
|
||||
// Function type arguments = receiver? + parameters + return-type
|
||||
return type.arguments.size - (if (type.isExtensionFunctionType) 1 else 0) - 1
|
||||
return type.arguments.size - (if (type.isBuiltinExtensionFunctionalType) 1 else 0) - 1
|
||||
}
|
||||
|
||||
+2
-1
@@ -23,6 +23,7 @@ import com.intellij.codeInsight.lookup.LookupElementDecorator
|
||||
import com.intellij.codeInsight.lookup.LookupElementPresentation
|
||||
import com.intellij.codeInsight.lookup.impl.LookupCellRenderer
|
||||
import com.intellij.util.SmartList
|
||||
import org.jetbrains.kotlin.builtins.isBuiltinFunctionalType
|
||||
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.idea.completion.handlers.GenerateLambdaInfo
|
||||
@@ -138,7 +139,7 @@ class LookupElementFactory(
|
||||
val lastParameter = descriptor.valueParameters.lastOrNull() ?: return
|
||||
if (!descriptor.valueParameters.all { it == lastParameter || it.hasDefaultValue() }) return
|
||||
|
||||
if (lastParameter.original.type.isFunctionType) {
|
||||
if (lastParameter.original.type.isBuiltinFunctionalType) {
|
||||
val isSingleParameter = descriptor.valueParameters.size == 1
|
||||
|
||||
val parameterType = lastParameter.type
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
fun xfoo(p: suspend () -> Unit) {}
|
||||
|
||||
fun test() {
|
||||
xf<caret>
|
||||
}
|
||||
|
||||
// EXIST: { itemText:"xfoo", tailText:" {...} (p: suspend () -> Unit) (<root>)", typeText:"Unit" }
|
||||
// EXIST: { itemText:"xfoo", tailText:"(p: suspend () -> Unit) (<root>)", typeText:"Unit" }
|
||||
// NOTHING_ELSE
|
||||
+6
@@ -1668,6 +1668,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/highOrderFunctions/OptionalParameters.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("SuspendFunction.kt")
|
||||
public void testSuspendFunction() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/highOrderFunctions/SuspendFunction.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("idea/idea-completion/testData/basic/common/inStringLiterals")
|
||||
|
||||
+6
@@ -1668,6 +1668,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/highOrderFunctions/OptionalParameters.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("SuspendFunction.kt")
|
||||
public void testSuspendFunction() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/highOrderFunctions/SuspendFunction.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("idea/idea-completion/testData/basic/common/inStringLiterals")
|
||||
|
||||
Reference in New Issue
Block a user