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 c936cd717e4..60706308191 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateActualFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateActualFix.kt @@ -259,6 +259,9 @@ internal fun KtPsiFactory.generateClassOrObjectByExpectedClass( it.delete() } else { it.addModifier(KtTokens.ACTUAL_KEYWORD) + if (it is KtFunction) { + it.removeParameterDefaultValues() + } } } } @@ -343,6 +346,17 @@ private fun KtPsiFactory.generateFunction( if (returnType != null && KotlinBuiltIns.isUnit(returnType)) { typeReference = null } + removeParameterDefaultValues() + } +} + +private fun KtFunction.removeParameterDefaultValues() { + for (valueParameter in valueParameters) { + val defaultValue = valueParameter.defaultValue + if (defaultValue != null) { + val equalsToken = valueParameter.equalsToken + valueParameter.deleteChildRange(equalsToken, defaultValue) + } } } diff --git a/idea/testData/multiModuleQuickFix/defaultParameterInExpected/common/common.kt b/idea/testData/multiModuleQuickFix/defaultParameterInExpected/common/common.kt new file mode 100644 index 00000000000..2e5db0903b7 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/defaultParameterInExpected/common/common.kt @@ -0,0 +1,5 @@ +// "Create actual interface for module testModule_JVM (JVM)" "true" + +expect interface I { + fun f(p: Int = 1) +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/defaultParameterInExpected/common/common.kt.after b/idea/testData/multiModuleQuickFix/defaultParameterInExpected/common/common.kt.after new file mode 100644 index 00000000000..0f50f23a596 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/defaultParameterInExpected/common/common.kt.after @@ -0,0 +1,5 @@ +// "Create actual interface for module testModule_JVM (JVM)" "true" + +expect interface I { + fun f(p: Int = 1) +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/defaultParameterInExpected/jvm/I.kt b/idea/testData/multiModuleQuickFix/defaultParameterInExpected/jvm/I.kt new file mode 100644 index 00000000000..ab8c0c3f4f4 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/defaultParameterInExpected/jvm/I.kt @@ -0,0 +1 @@ +// to be created \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/defaultParameterInExpected/jvm/I.kt.after b/idea/testData/multiModuleQuickFix/defaultParameterInExpected/jvm/I.kt.after new file mode 100644 index 00000000000..e8d5501140a --- /dev/null +++ b/idea/testData/multiModuleQuickFix/defaultParameterInExpected/jvm/I.kt.after @@ -0,0 +1,4 @@ +// to be created +actual interface I { + actual fun f(p: Int) +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/defaultParameterInExpectedClass/common/common.kt b/idea/testData/multiModuleQuickFix/defaultParameterInExpectedClass/common/common.kt new file mode 100644 index 00000000000..be7f0f67ea4 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/defaultParameterInExpectedClass/common/common.kt @@ -0,0 +1,5 @@ +// "Create actual class for module testModule_JVM (JVM)" "true" + +expect class C { + fun f(p: Int = 1) +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/defaultParameterInExpectedClass/common/common.kt.after b/idea/testData/multiModuleQuickFix/defaultParameterInExpectedClass/common/common.kt.after new file mode 100644 index 00000000000..9c56f454197 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/defaultParameterInExpectedClass/common/common.kt.after @@ -0,0 +1,5 @@ +// "Create actual class for module testModule_JVM (JVM)" "true" + +expect class C { + fun f(p: Int = 1) +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/defaultParameterInExpectedClass/jvm/C.kt b/idea/testData/multiModuleQuickFix/defaultParameterInExpectedClass/jvm/C.kt new file mode 100644 index 00000000000..ab8c0c3f4f4 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/defaultParameterInExpectedClass/jvm/C.kt @@ -0,0 +1 @@ +// to be created \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/defaultParameterInExpectedClass/jvm/C.kt.after b/idea/testData/multiModuleQuickFix/defaultParameterInExpectedClass/jvm/C.kt.after new file mode 100644 index 00000000000..5b29bcf3732 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/defaultParameterInExpectedClass/jvm/C.kt.after @@ -0,0 +1,4 @@ +// to be created +actual class C { + actual fun f(p: Int) {} +} \ 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 9a6ccdc3066..8b179e36000 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java @@ -129,6 +129,16 @@ public class QuickFixMultiModuleTestGenerated extends AbstractQuickFixMultiModul runTest("idea/testData/multiModuleQuickFix/createVarInExpectClass/"); } + @TestMetadata("defaultParameterInExpected") + public void testDefaultParameterInExpected() throws Exception { + runTest("idea/testData/multiModuleQuickFix/defaultParameterInExpected/"); + } + + @TestMetadata("defaultParameterInExpectedClass") + public void testDefaultParameterInExpectedClass() throws Exception { + runTest("idea/testData/multiModuleQuickFix/defaultParameterInExpectedClass/"); + } + @TestMetadata("deprecatedHeader") public void testDeprecatedHeader() throws Exception { runTest("idea/testData/multiModuleQuickFix/deprecatedHeader/");