| 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]; |
| } |
| } |