Formatter: Use formatter to automatically insert semicolons after the last enum entry when needed

This commit is contained in:
Alexey Sedunov
2015-10-23 18:29:57 +03:00
parent d060687775
commit 22393d4cd2
3 changed files with 52 additions and 19 deletions
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.stubs.KotlinPlaceHolderStub
import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes
import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes.*
import org.jetbrains.kotlin.utils.addToStdlib.lastIsInstanceOrNull
import java.util.*
class KtClassBody : KtElementImplStub<KotlinPlaceHolderStub<KtClassBody>>, KtDeclarationContainer {
@@ -58,22 +57,4 @@ class KtClassBody : KtElementImplStub<KotlinPlaceHolderStub<KtClassBody>>, KtDec
*/
val danglingAnnotations: List<KtAnnotationEntry>
get() = getStubOrPsiChildrenAsList(MODIFIER_LIST).flatMap { it.annotationEntries }
private fun addEnumEntriesTerminator() {
val klass = parent as? KtClass ?: return
if (!klass.isEnum()) return
val lastEntry = klass.declarations.lastIsInstanceOrNull<KtEnumEntry>()
if (KtPsiUtil.skipTrailingWhitespacesAndComments(lastEntry ?: firstChild)?.node?.elementType == KtTokens.SEMICOLON) return
super.addAfter(KtPsiFactory(this).createSemicolon(), lastEntry)
}
override fun addAfter(element: PsiElement, anchor: PsiElement?): PsiElement? {
return super.addAfter(element, anchor)
.apply {
if (element !is KtEnumEntry) {
addEnumEntriesTerminator()
}
}
}
}