public static void changeModifier( PsiElement element, @Nullable JetModifierList modifierList, @Nullable PsiElement insertAnchor, JetToken[] modifiersThatCanBeReplaced, Project project, boolean toBeginning, JetModifierList listWithModifier) { PsiElement whiteSpace = JetPsiFactory.createWhiteSpace(project); if (modifierList == null) { if (listWithModifier != null) { if (insertAnchor != null) { listWithModifier = (JetModifierList) element.addBefore(listWithModifier, insertAnchor); element.addBefore(whiteSpace, insertAnchor); element.addBefore(whiteSpace, listWithModifier); } else { PsiElement firstChild = element.getFirstChild(); element.addBefore(listWithModifier, firstChild); element.addBefore(whiteSpace, firstChild); } } } else { boolean replaced = false; if (modifiersThatCanBeReplaced != null) { PsiElement toBeReplaced = null; PsiElement toReplace = null; for (JetToken modifierThatCanBeReplaced : modifiersThatCanBeReplaced) { if (modifierList.hasModifier(modifierThatCanBeReplaced)) { PsiElement modifierElement = modifierList.getModifierNode(modifierThatCanBeReplaced).getPsi(); assert modifierElement != null; if (!replaced && listWithModifier != null) { toBeReplaced = modifierElement; toReplace = listWithModifier.getFirstChild(); // modifierElement.replace(listWithModifier.getFirstChild()); replaced = true; } else { modifierList.deleteChildInternal(modifierElement.getNode()); } } } if (toBeReplaced != null && toReplace != null) { toBeReplaced.replace(toReplace); } } if (!replaced && listWithModifier != null) { if (toBeginning) { PsiElement firstChild = modifierList.getFirstChild(); modifierList.addBefore(listWithModifier.getFirstChild(), firstChild); modifierList.addBefore(whiteSpace, firstChild); } else { PsiElement lastChild = modifierList.getLastChild(); modifierList.addAfter(listWithModifier.getFirstChild(), lastChild); modifierList.addAfter(whiteSpace, lastChild); } } } }