mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Surround with folding region: do not lose range to select after commit
(WEB-16259)
This commit is contained in:
+11
-9
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user