void (ReplacementInfo info, PsiElement elementToReplace, String replacementToMake, PsiElement elementParent) { final LanguageFileType fileType = myReplaceOptions.getMatchOptions().getFileType(); assert fileType != null; PsiElement[] replacements = MatcherImplUtil.createTreeFromText(replacementToMake, PatternTreeContext.Block, fileType, myProject); if (replacements.length > 0 && !(replacements[0] instanceof XmlAttribute) && !(replacements[0] instanceof XmlTagChild)) { replacements = new PsiElement[] { replacements[0].getParent() }; } if (replacements.length > 1) { elementParent.addRangeBefore(replacements[0], replacements[replacements.length - 1], elementToReplace); } else if (replacements.length == 1) { elementToReplace.replace(replacements[0]); return; } final int matchSize = info.getMatchesCount(); for (int i = 0; i < matchSize; ++i) { final PsiElement match = info.getMatch(i); if (match == null) continue; final PsiElement element = StructuralSearchUtil.getPresentableElement(match); final PsiElement prevSibling = element.getPrevSibling(); element.getParent().deleteChildRange(XmlMatchUtil.isWhiteSpace(prevSibling) ? prevSibling : element, element); } }