diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/ExpectedInfos.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/ExpectedInfos.kt index 06bcd5885ad..1f486d452d7 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/ExpectedInfos.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/ExpectedInfos.kt @@ -188,7 +188,7 @@ class ExpectedInfos( if (parameter.hasDefaultValue()) return false // parameter is optional if (parameter.getVarargElementType() != null) return false // vararg arguments list can be empty // last parameter of functional type can be placed outside parenthesis: - if (parameter == parameters.last() && KotlinBuiltIns.isFunctionOrExtensionFunctionType(parameter.getType())) return false + if (parameter == parameters.last() && KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(parameter.getType())) return false return true } 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 bf7422df44a..d2a8fe1ea03 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 @@ -303,7 +303,7 @@ public class LookupElementFactory( 1 -> { val parameterType = parameters.single().getType() - if (KotlinBuiltIns.isFunctionOrExtensionFunctionType(parameterType)) { + if (KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(parameterType)) { val parameterCount = KotlinBuiltIns.getParameterTypeProjectionsFromFunctionType(parameterType).size() if (parameterCount <= 1) { // otherwise additional item with lambda template is to be added diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/LookupElementsCollector.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/LookupElementsCollector.kt index 1f3f3b24620..1b24471f9cf 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/LookupElementsCollector.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/LookupElementsCollector.kt @@ -106,7 +106,7 @@ class LookupElementsCollector( val parameters = descriptor.getValueParameters() if (parameters.size() == 1) { val parameterType = parameters.get(0).getType() - if (KotlinBuiltIns.isFunctionOrExtensionFunctionType(parameterType)) { + if (KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(parameterType)) { val parameterCount = KotlinBuiltIns.getParameterTypeProjectionsFromFunctionType(parameterType).size() if (parameterCount > 1) { var lookupElement = lookupElementFactory.createLookupElement(descriptor, true) diff --git a/idea/idea-completion/testData/handlers/basic/highOrderFunctions/ParameterTypeIsDerivedFromFunction.kt b/idea/idea-completion/testData/handlers/basic/highOrderFunctions/ParameterTypeIsDerivedFromFunction.kt new file mode 100644 index 00000000000..0e5f6da65c8 --- /dev/null +++ b/idea/idea-completion/testData/handlers/basic/highOrderFunctions/ParameterTypeIsDerivedFromFunction.kt @@ -0,0 +1,9 @@ +interface I : () -> Unit + +fun foo(i: I){} + +fun bar() { + +} + +// ELEMENT: foo diff --git a/idea/idea-completion/testData/handlers/basic/highOrderFunctions/ParameterTypeIsDerivedFromFunction.kt.after b/idea/idea-completion/testData/handlers/basic/highOrderFunctions/ParameterTypeIsDerivedFromFunction.kt.after new file mode 100644 index 00000000000..14ea2219a60 --- /dev/null +++ b/idea/idea-completion/testData/handlers/basic/highOrderFunctions/ParameterTypeIsDerivedFromFunction.kt.after @@ -0,0 +1,9 @@ +interface I : () -> Unit + +fun foo(i: I){} + +fun bar() { + foo() +} + +// ELEMENT: foo diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java index 7ceff4eafc6..e29bb1ea289 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java @@ -220,6 +220,12 @@ public class BasicCompletionHandlerTestGenerated extends AbstractBasicCompletion doTest(fileName); } + @TestMetadata("ParameterTypeIsDerivedFromFunction.kt") + public void testParameterTypeIsDerivedFromFunction() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/basic/highOrderFunctions/ParameterTypeIsDerivedFromFunction.kt"); + doTest(fileName); + } + @TestMetadata("ReplaceByLambdaTemplateNoClosingParenth.kt") public void testReplaceByLambdaTemplateNoClosingParenth() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/basic/highOrderFunctions/ReplaceByLambdaTemplateNoClosingParenth.kt"); diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/MoveLambdaOutsideParenthesesIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/MoveLambdaOutsideParenthesesIntention.kt index 53a9a56b0cc..06923854d19 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/MoveLambdaOutsideParenthesesIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/MoveLambdaOutsideParenthesesIntention.kt @@ -45,7 +45,7 @@ public class MoveLambdaOutsideParenthesesIntention : JetSelfTargetingIntention