blob: 365ec74bc01e4db263da7db9a0f0bb4d74e5701e [file] [log] [blame]
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];
}
}