Skip to content

Commit

Permalink
Fixed NPE when renaming namespace tage with no corresponding end tag
Browse files Browse the repository at this point in the history
Signed-off-by: Alexander Chen <alchen@redhat.com>
  • Loading branch information
Alexander Chen authored and angelozerr committed Dec 16, 2021
1 parent 46fd04d commit f9a795d
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 20 deletions.
Expand Up @@ -182,31 +182,38 @@ private List<TextEdit> getTagNameRenameTextEdits(DOMDocument xmlDocument, DOMEle
if (indexOfColon > 0) {
// Take the prefix and local name of the namespace tag
String prefix = element.getPrefix();

Position startTagStartPosition = startTagRange.getStart();
Position startTagPrefixPosition = new Position(startTagStartPosition.getLine(),
startTagStartPosition.getCharacter() + indexOfColon);

Position endTagStartPosition = endTagRange.getStart();
Position endTagPrefixPosition = new Position(endTagStartPosition.getLine(),
endTagStartPosition.getCharacter() + indexOfColon);

Range startTagPrefixRange = new Range(startTagStartPosition, startTagPrefixPosition);
Range endTagPrefixRange = new Range(endTagStartPosition, endTagPrefixPosition);

String suffixName = element.getLocalName();
int suffixLength = suffixName.length();
Position startTagEndPosition = startTagRange.getEnd();
Position suffixStartPositionStart = new Position(startTagEndPosition.getLine(),
startTagEndPosition.getCharacter() - suffixLength);

Position endTagEndPosition = endTagRange.getEnd();
Position suffixEndPositionStart = new Position(endTagEndPosition.getLine(),
endTagEndPosition.getCharacter() - suffixLength);
// Start tag
Range startTagPrefixRange = null;
Range suffixRangeStart = null;
if (startTagRange != null) {
Position startTagStartPosition = startTagRange.getStart();
Position startTagPrefixPosition = new Position(startTagStartPosition.getLine(),
startTagStartPosition.getCharacter() + indexOfColon);
Position startTagEndPosition = startTagRange.getEnd();
Position suffixStartPositionStart = new Position(startTagEndPosition.getLine(),
startTagEndPosition.getCharacter() - suffixLength);
startTagPrefixRange = new Range(startTagStartPosition, startTagPrefixPosition);
suffixRangeStart = new Range(suffixStartPositionStart, startTagEndPosition);
}

Range suffixRangeStart = new Range(suffixStartPositionStart, startTagEndPosition);
Range suffixRangeEnd = new Range(suffixEndPositionStart, endTagEndPosition);
// End tag
Range suffixRangeEnd = null;
Range endTagPrefixRange = null;
if (endTagRange != null) {
Position endTagStartPosition = endTagRange.getStart();
Position endTagPrefixPosition = new Position(endTagStartPosition.getLine(),
endTagStartPosition.getCharacter() + indexOfColon);
Position endTagEndPosition = endTagRange.getEnd();
Position suffixEndPositionStart = new Position(endTagEndPosition.getLine(),
endTagEndPosition.getCharacter() - suffixLength);
endTagPrefixRange = new Range(endTagStartPosition, endTagPrefixPosition);
suffixRangeEnd = new Range(suffixEndPositionStart, endTagEndPosition);
}

// Add text edits
if (newText.contains(":")) {
String[] tagParts = newText.split(":", 2);
List<TextEdit> tagTextEdits = new ArrayList<TextEdit>();
Expand Down
Expand Up @@ -189,7 +189,26 @@ public void testTryToRenameXMLNS() throws BadLocationException {
assertRename(xml, "BBBB");
}

@Test
public void testNamespaceRenameSingleTag() throws BadLocationException {
String xml ="<a|a:b/>";

List<TextEdit> expectedFullEdits = edits("ns", r(0, 1, 3));
expectedFullEdits.addAll(edits("tag", r(0, 4, 5)));
assertRename(xml, "ns:tag", expectedFullEdits);

List<TextEdit> expectedNsEdits = edits("ns", r(0, 1, 3));
assertRename(xml, "ns:b", expectedNsEdits);

xml ="<aa:|b/>";
List<TextEdit> expectedLocalNameEdits = edits("tag", r(0, 4, 5));
assertRename(xml, "aa:tag", expectedLocalNameEdits);

xml ="</a|a:b>";
List<TextEdit> expectedEndTagEdits = edits("ns", r(0, 2, 4));
assertRename(xml, "ns:b", expectedEndTagEdits);

}

private static Range r(int line, int startCharacter, int endCharacter) {
return new Range(new Position(line, startCharacter), new Position(line, endCharacter));
Expand Down

0 comments on commit f9a795d

Please sign in to comment.