summaryrefslogtreecommitdiff
path: root/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/impl/ReplacerUtil.java
diff options
context:
space:
mode:
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.java49
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];
+ }
+}