"Create enum constant" quick fix: add before semicolon

#KT-33718 Fixed
This commit is contained in:
Toshiaki Kameyama
2019-09-05 20:16:01 +09:00
committed by Dmitry Gridin
parent 30c41e6720
commit 0497f0cba4
4 changed files with 40 additions and 2 deletions
@@ -40,8 +40,9 @@ private class Visitor(var range: TextRange) : KtTreeVisitorVoid() {
var delta = 0
val psiFactory = KtPsiFactory(klass)
if (declaration is KtEnumEntry) {
val comma = KtPsiFactory(klass).createComma()
val comma = psiFactory.createComma()
val nextEntry = declaration.nextSiblingOfSameType()
if (nextEntry != null && !declaration.containsToken(KtTokens.COMMA)) {
@@ -51,6 +52,11 @@ private class Visitor(var range: TextRange) : KtTreeVisitorVoid() {
val prevEntry = declaration.prevSiblingOfSameType()
if (prevEntry != null && !prevEntry.containsToken(KtTokens.COMMA)) {
val semicolon = prevEntry.allChildren.firstOrNull { it.node?.elementType == KtTokens.SEMICOLON }
if (semicolon != null) {
semicolon.delete()
declaration.add(psiFactory.createSemicolon())
}
prevEntry.add(comma)
delta += comma.textLength
}
@@ -60,7 +66,7 @@ private class Visitor(var range: TextRange) : KtTreeVisitorVoid() {
if (lastEntry != null && lastEntry.containsToken(KtTokens.SEMICOLON)) return
if (lastEntry == null && classBody.containsToken(KtTokens.SEMICOLON)) return
val semicolon = KtPsiFactory(klass).createSemicolon()
val semicolon = psiFactory.createSemicolon()
classBody.addAfter(semicolon, lastEntry)
delta += semicolon.textLength
}
@@ -0,0 +1,13 @@
// "Create enum constant 'D'" "true"
enum class Test {
A,
B,
C;
fun test() {
}
}
fun main() {
Test.D<caret>
}
@@ -0,0 +1,14 @@
// "Create enum constant 'D'" "true"
enum class Test {
A,
B,
C,
<caret>D;
fun test() {
}
}
fun main() {
Test.D
}
@@ -3295,6 +3295,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumEntryHasNoLineBreak.kt");
}
@TestMetadata("enumEntryHasSemicolon.kt")
public void testEnumEntryHasSemicolon() throws Exception {
runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumEntryHasSemicolon.kt");
}
@TestMetadata("enumEntryNoReceiver.kt")
public void testEnumEntryNoReceiver() throws Exception {
runTest("idea/testData/quickfix/createFromUsage/createClass/referenceExpression/enumEntryNoReceiver.kt");