Surround with folding region: do not lose range to select after commit

(WEB-16259)
This commit is contained in:
Alexander Zolotov
2015-04-20 17:23:13 +03:00
parent eae4d9f589
commit d732967110
@@ -23,6 +23,7 @@ import com.intellij.lang.surroundWith.SurroundDescriptor;
import com.intellij.lang.surroundWith.Surrounder;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.RangeMarker;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.text.StringUtil;
@@ -270,26 +271,27 @@ public class CustomFoldingSurroundDescriptor implements SurroundDescriptor {
final String startIndent = document.getText(new TextRange(document.getLineStartOffset(startLineNumber), startOffset));
int endOffset = lastElement.getTextRange().getEndOffset();
int delta = 0;
TextRange rangeToSelect = new TextRange(startOffset, startOffset);
TextRange rangeToSelect = TextRange.create(startOffset, startOffset);
String startText = myProvider.getStartString();
int descPos = startText.indexOf("?");
if (descPos >= 0) {
startText = startText.replace("?", DEFAULT_DESC_TEXT);
rangeToSelect = new TextRange(startOffset + descPos, startOffset + descPos + DEFAULT_DESC_TEXT.length());
rangeToSelect = TextRange.from(startOffset + descPos, DEFAULT_DESC_TEXT.length());
}
String startString = linePrefix + startText + "\n" + startIndent;
String endString = "\n" + linePrefix + myProvider.getEndString();
document.insertString(endOffset, endString);
delta += endString.length();
document.insertString(startOffset, startString);
delta += startString.length();
rangeToSelect = rangeToSelect.shiftRight(prefixLength);
PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project);
documentManager.commitDocument(documentManager.getDocument(psiFile));
adjustLineIndent(project, psiFile, language,
new TextRange(endOffset + delta - endString.length(), endOffset + delta));
adjustLineIndent(project, psiFile, language,
new TextRange(startOffset, startOffset + startString.length()));
RangeMarker rangeMarkerToSelect = document.createRangeMarker(rangeToSelect.shiftRight(prefixLength));
PsiDocumentManager.getInstance(project).commitDocument(document);
adjustLineIndent(project, psiFile, language, TextRange.from(endOffset + delta - endString.length(), endString.length()));
adjustLineIndent(project, psiFile, language, TextRange.from(startOffset, startString.length()));
rangeToSelect = TextRange.create(rangeMarkerToSelect.getStartOffset(), rangeMarkerToSelect.getEndOffset());
rangeMarkerToSelect.dispose();
return rangeToSelect;
}