mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-131342 Commenting XML line containing just - produces invalid XML
This commit is contained in:
+2
-3
@@ -532,12 +532,11 @@ public class CommentByBlockCommentHandler extends MultiCaretCodeInsightActionHan
|
||||
|
||||
static TextRange processDocument(Document document, RangeMarker marker, Commenter commenter, boolean escape) {
|
||||
if (commenter instanceof EscapingCommenter) {
|
||||
TextRange range = TextRange.create(marker.getStartOffset(), marker.getEndOffset());
|
||||
if (escape) {
|
||||
((EscapingCommenter)commenter).escape(document, range);
|
||||
((EscapingCommenter)commenter).escape(document, marker);
|
||||
}
|
||||
else {
|
||||
((EscapingCommenter)commenter).unescape(document, range);
|
||||
((EscapingCommenter)commenter).unescape(document, marker);
|
||||
}
|
||||
}
|
||||
return TextRange.create(marker.getStartOffset(), marker.getEndOffset());
|
||||
|
||||
+2
@@ -600,6 +600,8 @@ public class CommentByLineCommentHandler extends MultiCaretCodeInsightActionHand
|
||||
String prefix = commenter.getLineCommentPrefix();
|
||||
int endOffset = document.getLineEndOffset(line);
|
||||
RangeMarker marker = document.createRangeMarker(offset, endOffset);
|
||||
marker.setGreedyToLeft(true);
|
||||
marker.setGreedyToRight(true);
|
||||
if (prefix != null) {
|
||||
if (commenter instanceof CommenterWithLineSuffix) {
|
||||
endOffset = CharArrayUtil.shiftBackward(document.getCharsSequence(), endOffset, " \t");
|
||||
|
||||
@@ -17,14 +17,14 @@ package com.intellij.codeInsight.generation;
|
||||
|
||||
import com.intellij.lang.Commenter;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.editor.RangeMarker;
|
||||
|
||||
/**
|
||||
* @author Dmitry Avdeev
|
||||
*/
|
||||
public interface EscapingCommenter extends Commenter {
|
||||
|
||||
void escape(Document document, TextRange range);
|
||||
void escape(Document document, RangeMarker range);
|
||||
|
||||
void unescape(Document document, TextRange range);
|
||||
void unescape(Document document, RangeMarker range);
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ package com.intellij.lang.xml;
|
||||
|
||||
import com.intellij.codeInsight.generation.EscapingCommenter;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.editor.RangeMarker;
|
||||
import com.intellij.util.text.CharArrayUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -59,7 +59,7 @@ public class XmlCommenter implements EscapingCommenter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void escape(Document document, TextRange range) {
|
||||
public void escape(Document document, RangeMarker range) {
|
||||
String prefix = getBlockCommentPrefix();
|
||||
String suffix = getBlockCommentSuffix();
|
||||
|
||||
@@ -71,6 +71,8 @@ public class XmlCommenter implements EscapingCommenter {
|
||||
if (CharArrayUtil.regionMatches(document.getCharsSequence(), end - suffix.length(), suffix)) {
|
||||
end -= suffix.length();
|
||||
}
|
||||
if (start >= end) return;
|
||||
|
||||
for (int i = end - DOUBLE_DASH.length(); i >= start; i--) {
|
||||
if (CharArrayUtil.regionMatches(document.getCharsSequence(), i, DOUBLE_DASH) &&
|
||||
!CharArrayUtil.regionMatches(document.getCharsSequence(), i, suffix) &&
|
||||
@@ -81,10 +83,16 @@ public class XmlCommenter implements EscapingCommenter {
|
||||
if (CharArrayUtil.regionMatches(document.getCharsSequence(), start, GT)) {
|
||||
document.replaceString(start, start + GT.length(), ESCAPED_GT);
|
||||
}
|
||||
if (CharArrayUtil.regionMatches(document.getCharsSequence(), range.getStartOffset(), prefix + "-")) {
|
||||
document.insertString(start, " ");
|
||||
}
|
||||
if (CharArrayUtil.regionMatches(document.getCharsSequence(), range.getEndOffset() - suffix.length() - 1, "-" + suffix)) {
|
||||
document.insertString(range.getEndOffset() - suffix.length(), " ");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unescape(Document document, TextRange range) {
|
||||
public void unescape(Document document, RangeMarker range) {
|
||||
final int start = range.getStartOffset();
|
||||
for (int i = range.getEndOffset(); i >= start; i--) {
|
||||
if (CharArrayUtil.regionMatches(document.getCharsSequence(), i, ESCAPED_DOUBLE_DASH)) {
|
||||
|
||||
Reference in New Issue
Block a user