Sort modifiers: process visibility & modality after others
Related to KT-22954
This commit is contained in:
@@ -239,6 +239,7 @@ public interface KtTokens {
|
||||
TokenSet RESERVED_VALUE_PARAMETER_MODIFIER_KEYWORDS = TokenSet.create(OUT_KEYWORD, VARARG_KEYWORD);
|
||||
|
||||
TokenSet VISIBILITY_MODIFIERS = TokenSet.create(PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD);
|
||||
TokenSet MODALITY_MODIFIERS = TokenSet.create(ABSTRACT_KEYWORD, FINAL_KEYWORD, SEALED_KEYWORD, OPEN_KEYWORD);
|
||||
|
||||
TokenSet WHITESPACES = TokenSet.create(TokenType.WHITE_SPACE);
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.diagnostics.Errors
|
||||
import org.jetbrains.kotlin.lexer.KotlinLexer
|
||||
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.lexer.KtTokens.MODALITY_MODIFIERS
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.stubs.KotlinClassOrObjectStub
|
||||
@@ -438,10 +439,6 @@ val KtModifierListOwner.isPublic: Boolean
|
||||
fun KtModifierListOwner.visibilityModifierType(): KtModifierKeywordToken? =
|
||||
visibilityModifier()?.node?.elementType as KtModifierKeywordToken?
|
||||
|
||||
private val MODALITY_MODIFIERS = TokenSet.create(
|
||||
KtTokens.ABSTRACT_KEYWORD, KtTokens.FINAL_KEYWORD, KtTokens.SEALED_KEYWORD, KtTokens.OPEN_KEYWORD
|
||||
)
|
||||
|
||||
fun KtDeclaration.modalityModifier() = modifierFromTokenSet(MODALITY_MODIFIERS)
|
||||
|
||||
fun KtStringTemplateExpression.isPlain() = entries.all { it is KtLiteralStringTemplateEntry }
|
||||
|
||||
@@ -69,8 +69,10 @@ private class SortModifiersFix(private val modifiers: List<KtModifierKeywordToke
|
||||
val owner = list.parent as? KtModifierListOwner ?: return
|
||||
|
||||
modifiers.forEach { owner.removeModifier(it) }
|
||||
// We add visibility / modality modifiers after all others,
|
||||
// because they can be redundant or not depending on others (e.g. override)
|
||||
modifiers
|
||||
.partition { it == KtTokens.FINAL_KEYWORD }
|
||||
.partition { it in KtTokens.VISIBILITY_MODIFIERS || it in KtTokens.MODALITY_MODIFIERS }
|
||||
.let { it.second + it.first }
|
||||
.forEach { owner.addModifier(it) }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user