Change Signature: Add/remove constructor keyword on primary constructor when changing modifier list
This commit is contained in:
@@ -17,9 +17,10 @@
|
||||
package org.jetbrains.kotlin.psi
|
||||
|
||||
import com.intellij.lang.ASTNode
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.lexer.JetModifierKeywordToken
|
||||
import org.jetbrains.kotlin.lexer.JetTokens
|
||||
import org.jetbrains.kotlin.psi.addRemoveModifier.*
|
||||
import org.jetbrains.kotlin.psi.addRemoveModifier.addModifier
|
||||
import org.jetbrains.kotlin.psi.stubs.KotlinPlaceHolderStub
|
||||
import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes
|
||||
|
||||
@@ -31,16 +32,29 @@ public class JetPrimaryConstructor : JetConstructor<JetPrimaryConstructor> {
|
||||
|
||||
override fun getContainingClassOrObject() = getParent() as JetClassOrObject
|
||||
|
||||
private fun getOrCreateConstructorKeyword(): PsiElement {
|
||||
return getConstructorKeyword() ?: addBefore(JetPsiFactory(this).createConstructorKeyword(), valueParameterList!!)
|
||||
}
|
||||
|
||||
override fun addModifier(modifier: JetModifierKeywordToken) {
|
||||
val modifierList = getModifierList()
|
||||
val modifierList = modifierList
|
||||
if (modifierList != null) {
|
||||
addModifier(modifierList, modifier, JetTokens.PUBLIC_KEYWORD)
|
||||
if (this.modifierList == null) {
|
||||
getConstructorKeyword()?.delete()
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (modifier == JetTokens.PUBLIC_KEYWORD) return
|
||||
val parameterList = getValueParameterList()!!
|
||||
val newModifierList = JetPsiFactory(getProject()).createModifierList(modifier)
|
||||
addBefore(newModifierList, parameterList)
|
||||
val newModifierList = JetPsiFactory(this).createModifierList(modifier)
|
||||
addBefore(newModifierList, getOrCreateConstructorKeyword())
|
||||
}
|
||||
}
|
||||
|
||||
override fun removeModifier(modifier: JetModifierKeywordToken) {
|
||||
super.removeModifier(modifier)
|
||||
if (modifierList == null) {
|
||||
getConstructorKeyword()?.delete()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -66,6 +66,9 @@ internal fun addModifier(modifierList: JetModifierList, modifier: JetModifierKey
|
||||
if (modifier == defaultVisibilityModifier) { // do not insert explicit 'internal' keyword (or 'public' for primary constructor)
|
||||
//TODO: code style option
|
||||
modifierToReplace?.delete()
|
||||
if (modifierList.firstChild == null) {
|
||||
modifierList.delete()
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -98,7 +101,12 @@ internal fun addModifier(modifierList: JetModifierList, modifier: JetModifierKey
|
||||
}
|
||||
|
||||
internal fun removeModifier(owner: JetModifierListOwner, modifier: JetModifierKeywordToken) {
|
||||
owner.getModifierList()?.getModifier(modifier)?.delete()
|
||||
owner.getModifierList()?.let {
|
||||
it.getModifier(modifier)?.delete()
|
||||
if (it.firstChild == null) {
|
||||
it.delete()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val MODIFIERS_TO_REPLACE = mapOf(
|
||||
|
||||
Reference in New Issue
Block a user