Ejemplo n.º 1
0
 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);
       }
     }
   }
 }