diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromUsageFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromUsageFix.kt index 09810d5db59..43fe9d8ec24 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromUsageFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createClass/CreateClassFromUsageFix.kt @@ -42,6 +42,7 @@ import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.psiUtil.allChildren +import org.jetbrains.kotlin.psi.psiUtil.containingClass import java.util.* enum class ClassKind(val keyword: String, val description: String) { @@ -101,14 +102,19 @@ open class CreateClassFromUsageFix protected constructor ( override fun invoke(project: Project, editor: Editor?, file: KtFile) { if (editor == null) return + val applicableParents = if (classInfo.kind == ClassKind.INTERFACE) + classInfo.applicableParents.filter { it != element?.containingClass() } + else + classInfo.applicableParents + if (ApplicationManager.getApplication().isUnitTestMode) { - val targetParent = classInfo.applicableParents.firstOrNull { + val targetParent = applicableParents.firstOrNull { it.allChildren.any { it is PsiComment && it.text == "// TARGET_PARENT:" } } ?: classInfo.applicableParents.last() return doInvoke(targetParent, editor, file) } - chooseContainerElementIfNecessary(classInfo.applicableParents, editor, "Choose class container", true, { it }) { + chooseContainerElementIfNecessary(applicableParents, editor, "Choose class container", true, { it }) { doInvoke(it, editor, file) } } diff --git a/idea/testData/quickfix/createFromUsage/createClass/delegationSpecifier/traitDelegatorToSuperclass2.kt b/idea/testData/quickfix/createFromUsage/createClass/delegationSpecifier/traitDelegatorToSuperclass2.kt new file mode 100644 index 00000000000..40b207ed66d --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/delegationSpecifier/traitDelegatorToSuperclass2.kt @@ -0,0 +1,7 @@ +// "Create interface 'A'" "true" +package p + +// TARGET_PARENT: +class Foo: A { + +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createClass/delegationSpecifier/traitDelegatorToSuperclass2.kt.after b/idea/testData/quickfix/createFromUsage/createClass/delegationSpecifier/traitDelegatorToSuperclass2.kt.after new file mode 100644 index 00000000000..a0eca92f6bb --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createClass/delegationSpecifier/traitDelegatorToSuperclass2.kt.after @@ -0,0 +1,11 @@ +// "Create interface 'A'" "true" +package p + +// TARGET_PARENT: +class Foo: A { + +} + +interface A { + +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index db35ea22383..3ea874495bd 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -2225,6 +2225,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createClass/delegationSpecifier/traitDelegatorToSuperclass.kt"); doTest(fileName); } + + @TestMetadata("traitDelegatorToSuperclass2.kt") + public void testTraitDelegatorToSuperclass2() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createClass/delegationSpecifier/traitDelegatorToSuperclass2.kt"); + doTest(fileName); + } } @TestMetadata("idea/testData/quickfix/createFromUsage/createClass/importDirective")