"Create enum constant" quick fix: do not add redundant empty line

#KT-32981 Fixed
This commit is contained in:
Toshiaki Kameyama
2019-09-05 11:58:18 +09:00
committed by Dmitry Gridin
parent 5dddc464a5
commit d9d04fc556
6 changed files with 37 additions and 8 deletions
@@ -79,6 +79,7 @@ import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
import org.jetbrains.kotlin.types.typeUtil.isAnyOrNullableAny
import org.jetbrains.kotlin.types.typeUtil.isUnit
import org.jetbrains.kotlin.types.typeUtil.makeNullable
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
import java.util.*
import kotlin.math.max
@@ -1145,13 +1146,22 @@ internal fun <D : KtNamedDeclaration> placeDeclarationInContainer(
else -> throw AssertionError("Invalid containing element: ${container.text}")
}
if (declaration !is KtPrimaryConstructor) {
val parent = declarationInPlace.parent
calcNecessaryEmptyLines(declarationInPlace, false).let {
if (it > 0) parent.addBefore(psiFactory.createNewLine(it), declarationInPlace)
when (declaration) {
is KtEnumEntry -> {
val prevEnumEntry = declarationInPlace.siblings(forward = false, withItself = false).firstIsInstanceOrNull<KtEnumEntry>()
if ((prevEnumEntry?.prevSibling as? PsiWhiteSpace)?.text?.contains('\n') == true) {
val parent = declarationInPlace.parent
parent.addBefore(psiFactory.createNewLine(), declarationInPlace)
}
}
calcNecessaryEmptyLines(declarationInPlace, true).let {
if (it > 0) parent.addAfter(psiFactory.createNewLine(it), declarationInPlace)
!is KtPrimaryConstructor -> {
val parent = declarationInPlace.parent
calcNecessaryEmptyLines(declarationInPlace, false).let {
if (it > 0) parent.addBefore(psiFactory.createNewLine(it), declarationInPlace)
}
calcNecessaryEmptyLines(declarationInPlace, true).let {
if (it > 0) parent.addAfter(psiFactory.createNewLine(it), declarationInPlace)
}
}
}
return declarationInPlace
@@ -1,7 +1,6 @@
// "Create enum constant 'PUBLIC'" "true"
enum class TopicState {
PRIVATE,
<caret>PUBLIC
}
@@ -1,7 +1,6 @@
// "Create enum constant 'PUBLIC'" "true"
enum class TopicState {
PRIVATE,
<caret>PUBLIC
}
@@ -0,0 +1,8 @@
// "Create enum constant 'C'" "true"
enum class E {
A, B
}
fun foo() {
E.<caret>C
}
@@ -0,0 +1,8 @@
// "Create enum constant 'C'" "true"
enum class E {
A, B, <caret>C
}
fun foo() {
E.C
}
@@ -3290,6 +3290,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumEntryHasComma.kt");
}
@TestMetadata("enumEntryHasNoLineBreak.kt")
public void testEnumEntryHasNoLineBreak() throws Exception {
runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumEntryHasNoLineBreak.kt");
}
@TestMetadata("enumEntryNoReceiver.kt")
public void testEnumEntryNoReceiver() throws Exception {
runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumEntryNoReceiver.kt");