PSI: Added addAnnotationEntry() function
This commit is contained in:
@@ -56,6 +56,12 @@ abstract class JetDeclarationImpl extends JetExpressionImpl implements JetDeclar
|
|||||||
AddRemoveModifierPackage.removeModifier(this, modifier);
|
AddRemoveModifierPackage.removeModifier(this, modifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public JetAnnotationEntry addAnnotationEntry(@NotNull JetAnnotationEntry annotationEntry) {
|
||||||
|
return AddRemoveModifierPackage.addAnnotationEntry(this, annotationEntry);
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public List<JetAnnotationEntry> getAnnotationEntries() {
|
public List<JetAnnotationEntry> getAnnotationEntries() {
|
||||||
|
|||||||
@@ -29,4 +29,7 @@ public interface JetModifierListOwner extends PsiElement, JetAnnotated {
|
|||||||
|
|
||||||
void addModifier(@NotNull JetModifierKeywordToken modifier);
|
void addModifier(@NotNull JetModifierKeywordToken modifier);
|
||||||
void removeModifier(@NotNull JetModifierKeywordToken modifier);
|
void removeModifier(@NotNull JetModifierKeywordToken modifier);
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
JetAnnotationEntry addAnnotationEntry(@NotNull JetAnnotationEntry annotationEntry);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,6 +60,12 @@ public class JetModifierListOwnerStub<T extends StubElement<?>> extends JetEleme
|
|||||||
AddRemoveModifierPackage.removeModifier(this, modifier);
|
AddRemoveModifierPackage.removeModifier(this, modifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public JetAnnotationEntry addAnnotationEntry(@NotNull JetAnnotationEntry annotationEntry) {
|
||||||
|
return AddRemoveModifierPackage.addAnnotationEntry(this, annotationEntry);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public List<JetAnnotationEntry> getAnnotationEntries() {
|
public List<JetAnnotationEntry> getAnnotationEntries() {
|
||||||
|
|||||||
@@ -43,4 +43,16 @@ public class JetPrimaryConstructor : JetConstructor<JetPrimaryConstructor> {
|
|||||||
addBefore(newModifierList, parameterList)
|
addBefore(newModifierList, parameterList)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun addAnnotationEntry(annotationEntry: JetAnnotationEntry): JetAnnotationEntry {
|
||||||
|
val modifierList = getModifierList()
|
||||||
|
return if (modifierList != null) {
|
||||||
|
modifierList.addBefore(annotationEntry, modifierList.firstChild) as JetAnnotationEntry
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
val parameterList = getValueParameterList()!!
|
||||||
|
val newModifierList = JetPsiFactory(getProject()).createModifierList(annotationEntry.text)
|
||||||
|
(addBefore(newModifierList, parameterList) as JetModifierList).annotationEntries.first()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,33 +16,44 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.psi.addRemoveModifier
|
package org.jetbrains.kotlin.psi.addRemoveModifier
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiComment
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
|
import com.intellij.psi.PsiWhiteSpace
|
||||||
import org.jetbrains.kotlin.lexer.JetModifierKeywordToken
|
import org.jetbrains.kotlin.lexer.JetModifierKeywordToken
|
||||||
import org.jetbrains.kotlin.lexer.JetTokens.*
|
import org.jetbrains.kotlin.lexer.JetTokens.*
|
||||||
import com.intellij.psi.PsiComment
|
import org.jetbrains.kotlin.psi.*
|
||||||
import com.intellij.psi.PsiWhiteSpace
|
|
||||||
import org.jetbrains.kotlin.psi.JetModifierListOwner
|
|
||||||
import org.jetbrains.kotlin.psi.JetPsiFactory
|
|
||||||
import com.intellij.psi.PsiElement
|
|
||||||
import org.jetbrains.kotlin.psi.JetAnnotation
|
|
||||||
import org.jetbrains.kotlin.psi.JetModifierList
|
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.siblings
|
import org.jetbrains.kotlin.psi.psiUtil.siblings
|
||||||
|
|
||||||
|
private fun createModifierList(text: String, owner: JetModifierListOwner): JetModifierList {
|
||||||
|
val newModifierList = JetPsiFactory(owner).createModifierList(text)
|
||||||
|
val anchor = owner.firstChild!!
|
||||||
|
.siblings(forward = true)
|
||||||
|
.dropWhile { it is PsiComment || it is PsiWhiteSpace }
|
||||||
|
.first()
|
||||||
|
return owner.addBefore(newModifierList, anchor) as JetModifierList
|
||||||
|
}
|
||||||
|
|
||||||
internal fun addModifier(owner: JetModifierListOwner, modifier: JetModifierKeywordToken, defaultVisibilityModifier: JetModifierKeywordToken) {
|
internal fun addModifier(owner: JetModifierListOwner, modifier: JetModifierKeywordToken, defaultVisibilityModifier: JetModifierKeywordToken) {
|
||||||
val modifierList = owner.getModifierList()
|
val modifierList = owner.modifierList
|
||||||
if (modifierList == null) {
|
if (modifierList == null) {
|
||||||
if (modifier == defaultVisibilityModifier) return
|
if (modifier == defaultVisibilityModifier) return
|
||||||
|
createModifierList(modifier.value, owner)
|
||||||
val newModifierList = JetPsiFactory(owner).createModifierList(modifier)
|
|
||||||
val anchor = owner.getFirstChild()!!.siblings(forward = true)
|
|
||||||
.dropWhile { it is PsiComment || it is PsiWhiteSpace }
|
|
||||||
.first()
|
|
||||||
owner.addBefore(newModifierList, anchor)
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
addModifier(modifierList, modifier, defaultVisibilityModifier)
|
addModifier(modifierList, modifier, defaultVisibilityModifier)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal fun addAnnotationEntry(owner: JetModifierListOwner, annotationEntry: JetAnnotationEntry): JetAnnotationEntry {
|
||||||
|
val modifierList = owner.modifierList
|
||||||
|
return if (modifierList == null) {
|
||||||
|
createModifierList(annotationEntry.text, owner).annotationEntries.first()
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
modifierList.addBefore(annotationEntry, modifierList.firstChild) as JetAnnotationEntry
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
internal fun addModifier(modifierList: JetModifierList, modifier: JetModifierKeywordToken, defaultVisibilityModifier: JetModifierKeywordToken) {
|
internal fun addModifier(modifierList: JetModifierList, modifier: JetModifierKeywordToken, defaultVisibilityModifier: JetModifierKeywordToken) {
|
||||||
val newModifier = JetPsiFactory(modifierList).createModifier(modifier)
|
val newModifier = JetPsiFactory(modifierList).createModifier(modifier)
|
||||||
val modifierToReplace = MODIFIERS_TO_REPLACE[modifier]
|
val modifierToReplace = MODIFIERS_TO_REPLACE[modifier]
|
||||||
|
|||||||
Reference in New Issue
Block a user