diff options
author | Tor Norbye <tnorbye@google.com> | 2014-07-25 13:10:36 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2014-07-25 13:10:36 -0700 |
commit | e5266e2343c8d275d79fa0be725180d0fe3a993c (patch) | |
tree | 0ba72f5de1949e0527874a799baa224cbe1537e0 /platform/structuralsearch/source/com/intellij/structuralsearch/DocumentBasedReplaceHandler.java | |
parent | b03a5855292feb8c331815f883fe64372aacd872 (diff) | |
parent | 2e5965e996aad62ab1338b09d54caaf99ff3dd6a (diff) | |
download | idea-e5266e2343c8d275d79fa0be725180d0fe3a993c.tar.gz |
Merge remote-tracking branch 'aosp/upstream-master' into merge
Conflicts:
.idea/modules.xml
Change-Id: I5e3d04bc83cdc26b2b56fca66b44b1dd8941b143
Diffstat (limited to 'platform/structuralsearch/source/com/intellij/structuralsearch/DocumentBasedReplaceHandler.java')
-rw-r--r-- | platform/structuralsearch/source/com/intellij/structuralsearch/DocumentBasedReplaceHandler.java | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/DocumentBasedReplaceHandler.java b/platform/structuralsearch/source/com/intellij/structuralsearch/DocumentBasedReplaceHandler.java new file mode 100644 index 000000000000..1f319b8f15e5 --- /dev/null +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/DocumentBasedReplaceHandler.java @@ -0,0 +1,55 @@ +package com.intellij.structuralsearch; + +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.RangeMarker; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiDocumentManager; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.structuralsearch.plugin.replace.ReplaceOptions; +import com.intellij.structuralsearch.plugin.replace.ReplacementInfo; +import com.intellij.structuralsearch.plugin.replace.impl.ReplacementInfoImpl; +import com.intellij.util.containers.HashMap; + +import java.util.Map; + +/** + * @author Eugene.Kudelevsky + */ +public class DocumentBasedReplaceHandler extends StructuralReplaceHandler { + private final Project myProject; + private final Map<ReplacementInfo, RangeMarker> myRangeMarkers = new HashMap<ReplacementInfo, RangeMarker>(); + + DocumentBasedReplaceHandler(Project project) { + myProject = project; + } + + public void replace(ReplacementInfo info, ReplaceOptions options) { + if (info.getMatchesCount() == 0) return; + assert info instanceof ReplacementInfoImpl; + PsiElement element = info.getMatch(0); + if (element == null) return; + PsiFile file = element instanceof PsiFile ? (PsiFile)element : element.getContainingFile(); + assert file != null; + RangeMarker rangeMarker = myRangeMarkers.get(info); + Document document = rangeMarker.getDocument(); + document.replaceString(rangeMarker.getStartOffset(), rangeMarker.getEndOffset(), info.getReplacement()); + PsiDocumentManager.getInstance(element.getProject()).commitDocument(document); + } + + @Override + public void prepare(ReplacementInfo info) { + assert info instanceof ReplacementInfoImpl; + MatchResult result = ((ReplacementInfoImpl)info).getMatchResult(); + PsiElement element = result.getMatch(); + PsiFile file = element instanceof PsiFile ? (PsiFile)element : element.getContainingFile(); + Document document = PsiDocumentManager.getInstance(myProject).getDocument(file); + TextRange textRange = result.getMatchRef().getElement().getTextRange(); + assert textRange != null; + RangeMarker rangeMarker = document.createRangeMarker(textRange); + rangeMarker.setGreedyToLeft(true); + rangeMarker.setGreedyToRight(true); + myRangeMarkers.put(info, rangeMarker); + } +} |