Change Signature: Add/remove constructor keyword on primary constructor when changing modifier list

This commit is contained in:
Alexey Sedunov
2015-09-07 18:58:25 +03:00
parent aa1de706c1
commit 794127a38b
12 changed files with 53 additions and 25 deletions
@@ -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(