PSI: Added addAnnotationEntry() function
This commit is contained in:
@@ -56,6 +56,12 @@ abstract class JetDeclarationImpl extends JetExpressionImpl implements JetDeclar
|
||||
AddRemoveModifierPackage.removeModifier(this, modifier);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public JetAnnotationEntry addAnnotationEntry(@NotNull JetAnnotationEntry annotationEntry) {
|
||||
return AddRemoveModifierPackage.addAnnotationEntry(this, annotationEntry);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public List<JetAnnotationEntry> getAnnotationEntries() {
|
||||
|
||||
@@ -29,4 +29,7 @@ public interface JetModifierListOwner extends PsiElement, JetAnnotated {
|
||||
|
||||
void addModifier(@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);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public JetAnnotationEntry addAnnotationEntry(@NotNull JetAnnotationEntry annotationEntry) {
|
||||
return AddRemoveModifierPackage.addAnnotationEntry(this, annotationEntry);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public List<JetAnnotationEntry> getAnnotationEntries() {
|
||||
|
||||
@@ -43,4 +43,16 @@ public class JetPrimaryConstructor : JetConstructor<JetPrimaryConstructor> {
|
||||
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
|
||||
|
||||
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.JetTokens.*
|
||||
import com.intellij.psi.PsiComment
|
||||
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.*
|
||||
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) {
|
||||
val modifierList = owner.getModifierList()
|
||||
val modifierList = owner.modifierList
|
||||
if (modifierList == null) {
|
||||
if (modifier == defaultVisibilityModifier) return
|
||||
|
||||
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)
|
||||
createModifierList(modifier.value, owner)
|
||||
}
|
||||
else {
|
||||
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) {
|
||||
val newModifier = JetPsiFactory(modifierList).createModifier(modifier)
|
||||
val modifierToReplace = MODIFIERS_TO_REPLACE[modifier]
|
||||
|
||||
Reference in New Issue
Block a user