diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/util/functionTypeResolveUtils.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/util/functionTypeResolveUtils.kt index ef9f15fdb4f..73daca8b278 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/util/functionTypeResolveUtils.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/util/functionTypeResolveUtils.kt @@ -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 } diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/LookupElementFactory.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/LookupElementFactory.kt index d2bf07a70ab..b9473be9b14 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/LookupElementFactory.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/LookupElementFactory.kt @@ -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 diff --git a/idea/idea-completion/testData/basic/common/highOrderFunctions/SuspendFunction.kt b/idea/idea-completion/testData/basic/common/highOrderFunctions/SuspendFunction.kt new file mode 100644 index 00000000000..4b846083531 --- /dev/null +++ b/idea/idea-completion/testData/basic/common/highOrderFunctions/SuspendFunction.kt @@ -0,0 +1,9 @@ +fun xfoo(p: suspend () -> Unit) {} + +fun test() { + xf +} + +// EXIST: { itemText:"xfoo", tailText:" {...} (p: suspend () -> Unit) ()", typeText:"Unit" } +// EXIST: { itemText:"xfoo", tailText:"(p: suspend () -> Unit) ()", typeText:"Unit" } +// NOTHING_ELSE \ No newline at end of file diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java index 1edb08d2ada..408f4b4cd3f 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java @@ -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") diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java index 81d77a1f9ee..aad3d1211d9 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java @@ -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")