From fdc0335b4ad41d9e14eb608e8590e92d7757b36b Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 27 Jun 2018 19:28:21 +0300 Subject: [PATCH] Add actual: handle (incorrect) case with expect function with body So #KT-23326 Fixed --- .../kotlin/idea/quickfix/expectactual/CreateActualFix.kt | 4 +++- .../classWithIncompilableFunction/header/header.kt | 6 ++++++ .../classWithIncompilableFunction/header/header.kt.after | 6 ++++++ .../classWithIncompilableFunction/jvm/My.kt | 4 ++++ .../classWithIncompilableFunction/jvm/My.kt.after | 7 +++++++ .../idea/quickfix/QuickFixMultiModuleTestGenerated.java | 5 +++++ 6 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 idea/testData/multiModuleQuickFix/classWithIncompilableFunction/header/header.kt create mode 100644 idea/testData/multiModuleQuickFix/classWithIncompilableFunction/header/header.kt.after create mode 100644 idea/testData/multiModuleQuickFix/classWithIncompilableFunction/jvm/My.kt create mode 100644 idea/testData/multiModuleQuickFix/classWithIncompilableFunction/jvm/My.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateActualFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateActualFix.kt index 9e8ac3bffdb..3c33e5f1f21 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateActualFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateActualFix.kt @@ -327,7 +327,9 @@ private fun KtPsiFactory.generateFunction( ): KtFunction { val returnType = descriptor.returnType val body = run { - if (returnType != null && !KotlinBuiltIns.isUnit(returnType)) { + if (expectedFunction.hasBody()) { + "" + } else if (returnType != null && !KotlinBuiltIns.isUnit(returnType)) { val delegation = getFunctionBodyTextFromTemplate( project, TemplateKind.FUNCTION, diff --git a/idea/testData/multiModuleQuickFix/classWithIncompilableFunction/header/header.kt b/idea/testData/multiModuleQuickFix/classWithIncompilableFunction/header/header.kt new file mode 100644 index 00000000000..ae500c7a161 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/classWithIncompilableFunction/header/header.kt @@ -0,0 +1,6 @@ +// DISABLE-ERRORS + +expect class My { + // Incompilable function + fun foo() {} +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/classWithIncompilableFunction/header/header.kt.after b/idea/testData/multiModuleQuickFix/classWithIncompilableFunction/header/header.kt.after new file mode 100644 index 00000000000..ae500c7a161 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/classWithIncompilableFunction/header/header.kt.after @@ -0,0 +1,6 @@ +// DISABLE-ERRORS + +expect class My { + // Incompilable function + fun foo() {} +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/classWithIncompilableFunction/jvm/My.kt b/idea/testData/multiModuleQuickFix/classWithIncompilableFunction/jvm/My.kt new file mode 100644 index 00000000000..468248da9de --- /dev/null +++ b/idea/testData/multiModuleQuickFix/classWithIncompilableFunction/jvm/My.kt @@ -0,0 +1,4 @@ +// "Add missing actual members" "true" +// DISABLE-ERRORS + +actual class My diff --git a/idea/testData/multiModuleQuickFix/classWithIncompilableFunction/jvm/My.kt.after b/idea/testData/multiModuleQuickFix/classWithIncompilableFunction/jvm/My.kt.after new file mode 100644 index 00000000000..e5f1d63ee4b --- /dev/null +++ b/idea/testData/multiModuleQuickFix/classWithIncompilableFunction/jvm/My.kt.after @@ -0,0 +1,7 @@ +// "Add missing actual members" "true" +// DISABLE-ERRORS + +actual class My { + // Incompilable function + actual fun foo() {} +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java index 9c3cb0c2f11..d67dca7e080 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java @@ -109,6 +109,11 @@ public class QuickFixMultiModuleTestGenerated extends AbstractQuickFixMultiModul runTest("idea/testData/multiModuleQuickFix/classSomeProperties/"); } + @TestMetadata("classWithIncompilableFunction") + public void testClassWithIncompilableFunction() throws Exception { + runTest("idea/testData/multiModuleQuickFix/classWithIncompilableFunction/"); + } + @TestMetadata("companionAbsence") public void testCompanionAbsence() throws Exception { runTest("idea/testData/multiModuleQuickFix/companionAbsence/");