diff --git a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/ChangeToFunctionInvocationFixFactory.kt b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/ChangeToFunctionInvocationFixFactory.kt index 32592fde168b..422452568101 100644 --- a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/ChangeToFunctionInvocationFixFactory.kt +++ b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/ChangeToFunctionInvocationFixFactory.kt @@ -4,15 +4,20 @@ package org.jetbrains.kotlin.idea.k2.codeinsight.fixes import org.jetbrains.kotlin.analysis.api.fir.diagnostics.KaFirDiagnostic import org.jetbrains.kotlin.idea.codeinsight.api.applicators.fixes.KotlinQuickFixFactory import org.jetbrains.kotlin.idea.quickfix.ChangeToFunctionInvocationFix +import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.psi.KtTypeArgumentList +import org.jetbrains.kotlin.psi.psiUtil.getNextSiblingIgnoringWhitespaceAndComments internal object ChangeToFunctionInvocationFixFactory { val changeToFunctionInvocationFixFactory = KotlinQuickFixFactory.ModCommandBased { diagnostic: KaFirDiagnostic.FunctionCallExpected -> val expression = diagnostic.psi as? KtExpression ?: return@ModCommandBased emptyList() - - listOf( - ChangeToFunctionInvocationFix(expression) - ) + val next = expression.getNextSiblingIgnoringWhitespaceAndComments() + val parent = expression.parent + if (next is KtTypeArgumentList && parent is KtCallExpression) { + return@ModCommandBased listOf(ChangeToFunctionInvocationFix(parent)) + } + listOf(ChangeToFunctionInvocationFix(expression)) } } \ No newline at end of file diff --git a/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixTestGenerated.java b/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixTestGenerated.java index 24faf5b8d81c..ccab804c9f46 100644 --- a/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixTestGenerated.java +++ b/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixTestGenerated.java @@ -6119,6 +6119,11 @@ public abstract class HighLevelQuickFixTestGenerated extends AbstractHighLevelQu runTest("../../../idea/tests/testData/quickfix/variables/changeToFunctionInvocation/funInvWithoutParentheses.kt"); } + @TestMetadata("genericFunction.kt") + public void testGenericFunction() throws Exception { + runTest("../../../idea/tests/testData/quickfix/variables/changeToFunctionInvocation/genericFunction.kt"); + } + @TestMetadata("inStringTemplate.kt") public void testInStringTemplate() throws Exception { runTest("../../../idea/tests/testData/quickfix/variables/changeToFunctionInvocation/inStringTemplate.kt"); diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/K1QuickFixTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/K1QuickFixTestGenerated.java index 710a5b8bdab5..a5bcca4562e5 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/K1QuickFixTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/K1QuickFixTestGenerated.java @@ -17718,6 +17718,11 @@ public abstract class K1QuickFixTestGenerated extends AbstractK1QuickFixTest { runTest("testData/quickfix/variables/changeToFunctionInvocation/funInvWithoutParentheses.kt"); } + @TestMetadata("genericFunction.kt") + public void testGenericFunction() throws Exception { + runTest("testData/quickfix/variables/changeToFunctionInvocation/genericFunction.kt"); + } + @TestMetadata("inStringTemplate.kt") public void testInStringTemplate() throws Exception { runTest("testData/quickfix/variables/changeToFunctionInvocation/inStringTemplate.kt"); diff --git a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeToFunctionInvocation/genericFunction.kt b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeToFunctionInvocation/genericFunction.kt new file mode 100644 index 000000000000..2e4515c21b4c --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeToFunctionInvocation/genericFunction.kt @@ -0,0 +1,10 @@ +// "Change to function invocation" "true" +// ERROR: No value passed for parameter 'i' +fun foo(i: Int) = 42 + +fun main() { + val listFoo = foo +} + +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ChangeToFunctionInvocationFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ChangeToFunctionInvocationFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/variables/changeToFunctionInvocation/genericFunction.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeToFunctionInvocation/genericFunction.kt.after new file mode 100644 index 000000000000..5a4d3dada083 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/quickfix/variables/changeToFunctionInvocation/genericFunction.kt.after @@ -0,0 +1,10 @@ +// "Change to function invocation" "true" +// ERROR: No value passed for parameter 'i' +fun foo(i: Int) = 42 + +fun main() { + val listFoo = foo() +} + +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ChangeToFunctionInvocationFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ChangeToFunctionInvocationFix \ No newline at end of file