Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/JavaPairMatcherTest.java18
-rw-r--r--org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaPairMatcher.java15
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))

Back to the top