diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddWhenRemainingBranchesFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddWhenRemainingBranchesFix.kt index 81a005148ea..758d6818ccb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddWhenRemainingBranchesFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddWhenRemainingBranchesFix.kt @@ -24,10 +24,13 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.quoteIfNeeded import org.jetbrains.kotlin.idea.intentions.ImportAllMembersIntention +import org.jetbrains.kotlin.idea.refactoring.isMultiLine import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult class AddWhenRemainingBranchesFix( @@ -77,16 +80,20 @@ class AddWhenRemainingBranchesFix( val elseBranch = element.entries.find { it.isElse } val psiFactory = KtPsiFactory(element) + if (missingCases.isNotEmpty() && !element.isMultiLine()) { + element.addBefore(psiFactory.createNewLine(), whenCloseBrace) + } + for (case in missingCases) { val branchConditionText = when (case) { UnknownMissingCase, NullMissingCase, is BooleanMissingCase -> case.branchConditionText is ClassMissingCase -> if (case.classIsSingleton) { - case.classFqName.quoteIfNeeded().asString() + "" } else { - "is " + case.classFqName.quoteIfNeeded().asString() - } + "is " + } + case.descriptor.fqNameSafe.quoteIfNeeded().asString() } val entry = psiFactory.createWhenEntry("$branchConditionText -> TODO()") if (elseBranch != null) { @@ -96,6 +103,8 @@ class AddWhenRemainingBranchesFix( } } + ShortenReferences.DEFAULT.process(element) + if (withImport) { importAllEntries(element) } diff --git a/idea/testData/quickfix/when/addRemainingBranchesAnotherPackage.after.kt b/idea/testData/quickfix/when/addRemainingBranchesAnotherPackage.after.kt new file mode 100644 index 00000000000..824f91d9456 --- /dev/null +++ b/idea/testData/quickfix/when/addRemainingBranchesAnotherPackage.after.kt @@ -0,0 +1,15 @@ +// "Add remaining branches" "true" + +package u + +import e.OwnEnum +import e.getOwnEnum + +fun mainContext() { + val ownLocal = getOwnEnum() + when (ownLocal) { + OwnEnum.RED -> TODO() + OwnEnum.GREEN -> TODO() + OwnEnum.BLUE -> TODO() + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/when/addRemainingBranchesAnotherPackage.before.Dependency.kt b/idea/testData/quickfix/when/addRemainingBranchesAnotherPackage.before.Dependency.kt new file mode 100644 index 00000000000..c55d81d026c --- /dev/null +++ b/idea/testData/quickfix/when/addRemainingBranchesAnotherPackage.before.Dependency.kt @@ -0,0 +1,5 @@ +package e + +enum class OwnEnum { RED, GREEN, BLUE } + +fun getOwnEnum(): OwnEnum = OwnEnum.RED \ No newline at end of file diff --git a/idea/testData/quickfix/when/addRemainingBranchesAnotherPackage.before.Main.kt b/idea/testData/quickfix/when/addRemainingBranchesAnotherPackage.before.Main.kt new file mode 100644 index 00000000000..2938c0cf340 --- /dev/null +++ b/idea/testData/quickfix/when/addRemainingBranchesAnotherPackage.before.Main.kt @@ -0,0 +1,10 @@ +// "Add remaining branches" "true" + +package u + +import e.getOwnEnum + +fun mainContext() { + val ownLocal = getOwnEnum() + when (ownLocal) {} +} \ No newline at end of file diff --git a/idea/testData/quickfix/when/addRemainingBranchesAnotherPackageAll.after.kt b/idea/testData/quickfix/when/addRemainingBranchesAnotherPackageAll.after.kt new file mode 100644 index 00000000000..e7183838c34 --- /dev/null +++ b/idea/testData/quickfix/when/addRemainingBranchesAnotherPackageAll.after.kt @@ -0,0 +1,16 @@ +// "Add remaining branches with import" "true" + +package u + +import e.OwnEnum +import e.OwnEnum.* +import e.getOwnEnum + +fun mainContext() { + val ownLocal = getOwnEnum() + when (ownLocal) { + RED -> TODO() + GREEN -> TODO() + BLUE -> TODO() + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/when/addRemainingBranchesAnotherPackageAll.before.Dependency.kt b/idea/testData/quickfix/when/addRemainingBranchesAnotherPackageAll.before.Dependency.kt new file mode 100644 index 00000000000..c55d81d026c --- /dev/null +++ b/idea/testData/quickfix/when/addRemainingBranchesAnotherPackageAll.before.Dependency.kt @@ -0,0 +1,5 @@ +package e + +enum class OwnEnum { RED, GREEN, BLUE } + +fun getOwnEnum(): OwnEnum = OwnEnum.RED \ No newline at end of file diff --git a/idea/testData/quickfix/when/addRemainingBranchesAnotherPackageAll.before.Main.kt b/idea/testData/quickfix/when/addRemainingBranchesAnotherPackageAll.before.Main.kt new file mode 100644 index 00000000000..052aca41d90 --- /dev/null +++ b/idea/testData/quickfix/when/addRemainingBranchesAnotherPackageAll.before.Main.kt @@ -0,0 +1,10 @@ +// "Add remaining branches with import" "true" + +package u + +import e.getOwnEnum + +fun mainContext() { + val ownLocal = getOwnEnum() + when (ownLocal) {} +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java index 75f20b0589b..e7d529a225a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java @@ -4203,6 +4203,16 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes KotlinTestUtils.runTest(this::doTestWithExtraFile, TargetBackend.ANY, testDataFilePath); } + @TestMetadata("addRemainingBranchesAnotherPackage.before.Main.kt") + public void testAddRemainingBranchesAnotherPackage() throws Exception { + runTest("idea/testData/quickfix/when/addRemainingBranchesAnotherPackage.before.Main.kt"); + } + + @TestMetadata("addRemainingBranchesAnotherPackageAll.before.Main.kt") + public void testAddRemainingBranchesAnotherPackageAll() throws Exception { + runTest("idea/testData/quickfix/when/addRemainingBranchesAnotherPackageAll.before.Main.kt"); + } + public void testAllFilesPresentInWhen() throws Exception { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/when"), Pattern.compile("^(\\w+)\\.((before\\.Main\\.\\w+)|(test))$"), TargetBackend.ANY, true); }