diff options
Diffstat (limited to 'platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/impl/ReplacerUtil.java')
-rw-r--r-- | platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/impl/ReplacerUtil.java | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/impl/ReplacerUtil.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/impl/ReplacerUtil.java new file mode 100644 index 000000000000..365ec74bc01e --- /dev/null +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/impl/ReplacerUtil.java @@ -0,0 +1,49 @@ +package com.intellij.structuralsearch.plugin.replace.impl; + +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.fileTypes.FileType; +import com.intellij.psi.PsiComment; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiWhiteSpace; +import com.intellij.structuralsearch.StructuralSearchProfile; +import com.intellij.structuralsearch.impl.matcher.MatcherImplUtil; +import com.intellij.structuralsearch.impl.matcher.PatternTreeContext; + +/** + * @author Eugene.Kudelevsky + */ +public class ReplacerUtil { + private ReplacerUtil() { + } + + public static PsiElement[] createTreeForReplacement(String replacement, PatternTreeContext treeContext, ReplacementContext context) { + FileType fileType = context.getOptions().getMatchOptions().getFileType(); + return MatcherImplUtil.createTreeFromText(replacement, treeContext, fileType, context.getProject()); + } + + public static PsiElement copySpacesAndCommentsBefore(PsiElement elementToReplace, + PsiElement[] patternElements, + String replacementToMake, + PsiElement elementParent) { + int i = 0; + while (true) { // if it goes out of bounds then deep error happens + if (!(patternElements[i] instanceof PsiComment || patternElements[i] instanceof PsiWhiteSpace)) { + break; + } + ++i; + if (patternElements.length == i) { + break; + } + } + + if (patternElements.length == i) { + Logger logger = Logger.getInstance(StructuralSearchProfile.class.getName()); + logger.error("Unexpected replacement structure:" + replacementToMake); + } + + if (i != 0) { + elementParent.addRangeBefore(patternElements[0], patternElements[i - 1], elementToReplace); + } + return patternElements[i]; + } +} |