Fixed bug 372516: [syntax highlighting] bracket highlighting should also
work if caret is after the last bracket
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 832c052..937d71f 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 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 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 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 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 de0ccc3..a97c2ec 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 @@
 	 */
 	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))