diff options
-rw-r--r-- | org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/JavaPairMatcherTest.java | 18 | ||||
-rw-r--r-- | org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaPairMatcher.java | 15 |
2 files changed, 25 insertions, 8 deletions
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/JavaPairMatcherTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/JavaPairMatcherTest.java index 832c0527e9..937d71ff2f 100644 --- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/JavaPairMatcherTest.java +++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/JavaPairMatcherTest.java @@ -79,10 +79,12 @@ public class JavaPairMatcherTest extends AbstractPairMatcherTest { public void testBeforeOpeningMatch() { IRegion match= fPairMatcher.match(fDocument, 2); - assertNull(match); + assertNotNull(match); + assertTrue(match.getOffset() == 2 && match.getLength() == 10); match= fPairMatcher.match(fDocument, 5); - assertNull(match); + assertNotNull(match); + assertTrue(match.getOffset() == 5 && match.getLength() == 4); } public void testAfterOpeningMatch() { @@ -108,10 +110,12 @@ public class JavaPairMatcherTest extends AbstractPairMatcherTest { public void testAfterClosingMatch() { IRegion match= fPairMatcher.match(fDocument, 12); - assertNull(match); + assertNotNull(match); + assertTrue(match.getOffset() == 2 && match.getLength() == 10); match= fPairMatcher.match(fDocument, 9); - assertNull(match); + assertNotNull(match); + assertTrue(match.getOffset() == 5 && match.getLength() == 4); } public void testBeforeClosingMatchWithNL() { @@ -124,7 +128,8 @@ public class JavaPairMatcherTest extends AbstractPairMatcherTest { public void testAfterClosingMatchWithNL() { fDocument.set("x(y\ny)x"); IRegion match= fPairMatcher.match(fDocument, 6); - assertNull(match); + assertNotNull(match); + assertTrue(match.getOffset() == 1 && match.getLength() == 5); } public void testBeforeClosingMatchWithNLAndSingleLineComment() { @@ -137,7 +142,8 @@ public class JavaPairMatcherTest extends AbstractPairMatcherTest { public void testAfterClosingMatchWithNLAndSingleLineComment() { fDocument.set("x\nx(y\nx //(x\ny)x"); IRegion match= fPairMatcher.match(fDocument, 15); - assertNull(match); + assertNotNull(match); + assertTrue(match.getOffset() == 3 && match.getLength() == 12); } public void testEnclosingMatch() { diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaPairMatcher.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaPairMatcher.java index de0ccc3e66..a97c2ec4a1 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaPairMatcher.java +++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaPairMatcher.java @@ -52,8 +52,19 @@ public final class JavaPairMatcher extends DefaultCharacterPairMatcher implement */ private IRegion performMatch(IDocument document, int offset) throws BadLocationException { if (offset < 0 || document == null) return null; - final char prevChar= document.getChar(Math.max(offset - 1, 0)); - final char currChar= document.getChar(offset); + char prevChar= document.getChar(Math.max(offset - 1, 0)); + char currChar= (offset != document.getLength()) ? document.getChar(offset) : Character.MIN_VALUE; + + if (prevChar == '>' && currChar != '>') { //https://bugs.eclipse.org/bugs/show_bug.cgi?id=372516 + offset--; + currChar= prevChar; + prevChar= document.getChar(Math.max(offset - 1, 0)); + } else if (currChar == '<' && (prevChar != '>' && prevChar != '<')) { + offset++; + prevChar= currChar; + currChar= document.getChar(offset); + } + if ((prevChar == '<' || currChar == '>') && !fHighlightAngularBrackets) return null; if (prevChar == '<' && isLessThanOperator(document, offset - 1)) |