diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/InitializePropertyQuickFixFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/InitializePropertyQuickFixFactory.kt index 98485ac64de..db9d319fa4f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/InitializePropertyQuickFixFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/InitializePropertyQuickFixFactory.kt @@ -159,7 +159,7 @@ object InitializePropertyQuickFixFactory : KotlinIntentionActionsFactory() { val descriptor = descriptorsToProcess.next() val constructorPointer = descriptor.source.getPsi()?.createSmartPointer() val config = configureChangeSignature(propertyDescriptor) - val changeSignature = { runChangeSignature(project, descriptor, config, element, text) } + val changeSignature = { runChangeSignature(project, descriptor, config, element.containingClassOrObject!!, text) } changeSignature.runRefactoringWithPostprocessing(project, "refactoring.changeSignature") { val constructorOrClass = constructorPointer?.element @@ -186,7 +186,10 @@ object InitializePropertyQuickFixFactory : KotlinIntentionActionsFactory() { listOf(classDescriptor.unsubstitutedPrimaryConstructor!!) } else { - classDescriptor.secondaryConstructors + classDescriptor.secondaryConstructors.filter { + val constructor = it.source.getPsi() as? KtSecondaryConstructor + constructor != null && !constructor.getDelegationCall().isCallToThis + } } project.runWithElementsToShortenIsEmptyIgnored { diff --git a/idea/testData/quickfix/initializeWithConstructorParameter/constructorWithThisDelegation.kt b/idea/testData/quickfix/initializeWithConstructorParameter/constructorWithThisDelegation.kt new file mode 100644 index 00000000000..667b8456fd5 --- /dev/null +++ b/idea/testData/quickfix/initializeWithConstructorParameter/constructorWithThisDelegation.kt @@ -0,0 +1,8 @@ +// "Initialize with constructor parameter" "true" +open class RGrandAccessor(x: Int) {} + +open class RAccessor : RGrandAccessor { + val f: Int + constructor(p: Boolean) : super(1) + constructor(p: String) : this(true) +} \ No newline at end of file diff --git a/idea/testData/quickfix/initializeWithConstructorParameter/constructorWithThisDelegation.kt.after b/idea/testData/quickfix/initializeWithConstructorParameter/constructorWithThisDelegation.kt.after new file mode 100644 index 00000000000..fae794984c1 --- /dev/null +++ b/idea/testData/quickfix/initializeWithConstructorParameter/constructorWithThisDelegation.kt.after @@ -0,0 +1,11 @@ +// "Initialize with constructor parameter" "true" +open class RGrandAccessor(x: Int) {} + +open class RAccessor : RGrandAccessor { + val f: Int + constructor(p: Boolean, f: Int) : super(1) { + this.f = f + } + + constructor(p: String) : this(true, 0) +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 94e64d9525f..6c8a6998fad 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -4442,6 +4442,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/initializeWithConstructorParameter"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true); } + @TestMetadata("constructorWithThisDelegation.kt") + public void testConstructorWithThisDelegation() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/initializeWithConstructorParameter/constructorWithThisDelegation.kt"); + doTest(fileName); + } + @TestMetadata("localVar.kt") public void testLocalVar() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/initializeWithConstructorParameter/localVar.kt");