diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/AddActualFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/AddActualFix.kt index 842d2dc9eee..4fa913889fe 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/AddActualFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/AddActualFix.kt @@ -48,7 +48,9 @@ class AddActualFix( val factory = KtPsiFactory(element) val pureActualClass = factory.generateClassOrObjectByExpectedClass( project, expectedClass, actualNeeded = true, - existingDeclarations = element.declarations + listOfNotNull(element.primaryConstructor) + existingDeclarations = element.declarations + + element.primaryConstructor?.valueParameters?.filter { it.hasValOrVar() }.orEmpty() + + listOfNotNull(element.primaryConstructor) ) for (declaration in pureActualClass.declarations) { element.addDeclaration(declaration) 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 1eade559279..9e8ac3bffdb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateActualFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateActualFix.kt @@ -230,6 +230,7 @@ internal fun KtPsiFactory.generateClassOrObjectByExpectedClass( name == it.name && when (this) { is KtConstructor<*> -> it is KtConstructor<*> && areCompatible(this, it) is KtNamedFunction -> it is KtNamedFunction && areCompatible(this, it) + is KtProperty -> it is KtProperty || it is KtParameter && it.hasValOrVar() else -> this.javaClass == it.javaClass } } diff --git a/idea/testData/multiModuleQuickFix/classPropertyInConstructor/header/header.kt b/idea/testData/multiModuleQuickFix/classPropertyInConstructor/header/header.kt new file mode 100644 index 00000000000..bc7f25227ce --- /dev/null +++ b/idea/testData/multiModuleQuickFix/classPropertyInConstructor/header/header.kt @@ -0,0 +1,7 @@ +// DISABLE-ERRORS + +expect class My { + val name: String + + val age: String +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/classPropertyInConstructor/header/header.kt.after b/idea/testData/multiModuleQuickFix/classPropertyInConstructor/header/header.kt.after new file mode 100644 index 00000000000..bc7f25227ce --- /dev/null +++ b/idea/testData/multiModuleQuickFix/classPropertyInConstructor/header/header.kt.after @@ -0,0 +1,7 @@ +// DISABLE-ERRORS + +expect class My { + val name: String + + val age: String +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/classPropertyInConstructor/jvm/My.kt b/idea/testData/multiModuleQuickFix/classPropertyInConstructor/jvm/My.kt new file mode 100644 index 00000000000..55076209b6b --- /dev/null +++ b/idea/testData/multiModuleQuickFix/classPropertyInConstructor/jvm/My.kt @@ -0,0 +1,4 @@ +// "Add missing actual members" "true" +// DISABLE-ERRORS + +actual class My(actual val name: String) \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/classPropertyInConstructor/jvm/My.kt.after b/idea/testData/multiModuleQuickFix/classPropertyInConstructor/jvm/My.kt.after new file mode 100644 index 00000000000..7fb6389cb41 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/classPropertyInConstructor/jvm/My.kt.after @@ -0,0 +1,7 @@ +// "Add missing actual members" "true" +// DISABLE-ERRORS + +actual class My(actual val name: String) { + actual val age: String + get() = TODO("not implemented") //To change body of created functions use File | Settings | File Templates. +} \ 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 2377f495aab..9c3cb0c2f11 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java @@ -99,6 +99,11 @@ public class QuickFixMultiModuleTestGenerated extends AbstractQuickFixMultiModul runTest("idea/testData/multiModuleQuickFix/classOverloadedFunction/"); } + @TestMetadata("classPropertyInConstructor") + public void testClassPropertyInConstructor() throws Exception { + runTest("idea/testData/multiModuleQuickFix/classPropertyInConstructor/"); + } + @TestMetadata("classSomeProperties") public void testClassSomeProperties() throws Exception { runTest("idea/testData/multiModuleQuickFix/classSomeProperties/");