Add actual: handle parameters with val/var as compatible with property
So #KT-23762 Fixed
This commit is contained in:
@@ -48,7 +48,9 @@ class AddActualFix(
|
|||||||
val factory = KtPsiFactory(element)
|
val factory = KtPsiFactory(element)
|
||||||
val pureActualClass = factory.generateClassOrObjectByExpectedClass(
|
val pureActualClass = factory.generateClassOrObjectByExpectedClass(
|
||||||
project, expectedClass, actualNeeded = true,
|
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) {
|
for (declaration in pureActualClass.declarations) {
|
||||||
element.addDeclaration(declaration)
|
element.addDeclaration(declaration)
|
||||||
|
|||||||
@@ -230,6 +230,7 @@ internal fun KtPsiFactory.generateClassOrObjectByExpectedClass(
|
|||||||
name == it.name && when (this) {
|
name == it.name && when (this) {
|
||||||
is KtConstructor<*> -> it is KtConstructor<*> && areCompatible(this, it)
|
is KtConstructor<*> -> it is KtConstructor<*> && areCompatible(this, it)
|
||||||
is KtNamedFunction -> it is KtNamedFunction && 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
|
else -> this.javaClass == it.javaClass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// DISABLE-ERRORS
|
||||||
|
|
||||||
|
expect class My {
|
||||||
|
val name: String
|
||||||
|
|
||||||
|
val age: String
|
||||||
|
}
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
// DISABLE-ERRORS
|
||||||
|
|
||||||
|
expect class My {
|
||||||
|
val name: String
|
||||||
|
|
||||||
|
val age: String
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
// "Add missing actual members" "true"
|
||||||
|
// DISABLE-ERRORS
|
||||||
|
|
||||||
|
actual class <caret>My(actual val name: String)
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// "Add missing actual members" "true"
|
||||||
|
// DISABLE-ERRORS
|
||||||
|
|
||||||
|
actual class <caret>My(actual val name: String) {
|
||||||
|
actual val age: String
|
||||||
|
get() = TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||||
|
}
|
||||||
+5
@@ -99,6 +99,11 @@ public class QuickFixMultiModuleTestGenerated extends AbstractQuickFixMultiModul
|
|||||||
runTest("idea/testData/multiModuleQuickFix/classOverloadedFunction/");
|
runTest("idea/testData/multiModuleQuickFix/classOverloadedFunction/");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("classPropertyInConstructor")
|
||||||
|
public void testClassPropertyInConstructor() throws Exception {
|
||||||
|
runTest("idea/testData/multiModuleQuickFix/classPropertyInConstructor/");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("classSomeProperties")
|
@TestMetadata("classSomeProperties")
|
||||||
public void testClassSomeProperties() throws Exception {
|
public void testClassSomeProperties() throws Exception {
|
||||||
runTest("idea/testData/multiModuleQuickFix/classSomeProperties/");
|
runTest("idea/testData/multiModuleQuickFix/classSomeProperties/");
|
||||||
|
|||||||
Reference in New Issue
Block a user