From 47e3a267492750c9973b7825411b67d6e3e6cddb Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Tue, 21 May 2019 10:42:23 +0700 Subject: [PATCH] Fix "Create expect function" for primary constructor #KT-31518 Fixed --- .../quickfix/expectactual/AbstractCreateDeclarationFix.kt | 7 ++++++- .../expectPrimaryConstructor/common/A.after | 1 + .../expectPrimaryConstructor/common/A.kt | 1 + .../expectPrimaryConstructor/jvm/A.after | 4 ++++ .../multiModuleQuickFix/expectPrimaryConstructor/jvm/A.kt | 4 ++++ .../idea/quickfix/QuickFixMultiModuleTestGenerated.java | 5 +++++ 6 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 idea/testData/multiModuleQuickFix/expectPrimaryConstructor/common/A.after create mode 100644 idea/testData/multiModuleQuickFix/expectPrimaryConstructor/common/A.kt create mode 100644 idea/testData/multiModuleQuickFix/expectPrimaryConstructor/jvm/A.after create mode 100644 idea/testData/multiModuleQuickFix/expectPrimaryConstructor/jvm/A.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/AbstractCreateDeclarationFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/AbstractCreateDeclarationFix.kt index 84f8e81485b..6c62d5a1d78 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/AbstractCreateDeclarationFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/AbstractCreateDeclarationFix.kt @@ -77,7 +77,12 @@ abstract class AbstractCreateDeclarationFix( } } val generatedDeclaration = when { - targetClass != null -> targetClass.addDeclaration(generated as KtNamedDeclaration) + targetClass != null -> { + if (generated is KtPrimaryConstructor && targetClass is KtClass) + targetClass.createPrimaryConstructorIfAbsent().replace(generated) + else + targetClass.addDeclaration(generated as KtNamedDeclaration) + } else -> targetFile.add(generated) as KtElement } val reformatted = CodeStyleManager.getInstance(project).reformat(generatedDeclaration) diff --git a/idea/testData/multiModuleQuickFix/expectPrimaryConstructor/common/A.after b/idea/testData/multiModuleQuickFix/expectPrimaryConstructor/common/A.after new file mode 100644 index 00000000000..50650b6fe49 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/expectPrimaryConstructor/common/A.after @@ -0,0 +1 @@ +expect class A() \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/expectPrimaryConstructor/common/A.kt b/idea/testData/multiModuleQuickFix/expectPrimaryConstructor/common/A.kt new file mode 100644 index 00000000000..d1d8c72d0c5 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/expectPrimaryConstructor/common/A.kt @@ -0,0 +1 @@ +expect class A \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/expectPrimaryConstructor/jvm/A.after b/idea/testData/multiModuleQuickFix/expectPrimaryConstructor/jvm/A.after new file mode 100644 index 00000000000..6dcbfc71d7f --- /dev/null +++ b/idea/testData/multiModuleQuickFix/expectPrimaryConstructor/jvm/A.after @@ -0,0 +1,4 @@ +// "Create expected class in common module testModule_Common" "true" +// DISABLE-ERRORS + +actual class A actual constructor() \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/expectPrimaryConstructor/jvm/A.kt b/idea/testData/multiModuleQuickFix/expectPrimaryConstructor/jvm/A.kt new file mode 100644 index 00000000000..f879d321aa4 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/expectPrimaryConstructor/jvm/A.kt @@ -0,0 +1,4 @@ +// "Create expected function in common module testModule_Common" "true" +// DISABLE-ERRORS + +actual class A actual constructor() \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java index 4fb0daf914c..40315ec663f 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java @@ -434,6 +434,11 @@ public class QuickFixMultiModuleTestGenerated extends AbstractQuickFixMultiModul runTest("idea/testData/multiModuleQuickFix/expectNestedClass/"); } + @TestMetadata("expectPrimaryConstructor") + public void testExpectPrimaryConstructor() throws Exception { + runTest("idea/testData/multiModuleQuickFix/expectPrimaryConstructor/"); + } + @TestMetadata("expectProperty") public void testExpectProperty() throws Exception { runTest("idea/testData/multiModuleQuickFix/expectProperty/");