diff --git a/cxx-squid/src/main/java/org/sonar/cxx/channels/RightAngleBracketsChannel.java b/cxx-squid/src/main/java/org/sonar/cxx/channels/RightAngleBracketsChannel.java index f42d650446..8089650fb5 100644 --- a/cxx-squid/src/main/java/org/sonar/cxx/channels/RightAngleBracketsChannel.java +++ b/cxx-squid/src/main/java/org/sonar/cxx/channels/RightAngleBracketsChannel.java @@ -54,7 +54,7 @@ public boolean consume(CodeReader code, Lexer output) { if (ch == '<') { if (parentheseLevel == 0) { var next = code.charAt(1); - if ((next != '<') && (next != '=')) { // not <<, <=, <<=, <=>, + if ((next != '<') && (next != '=')) { // not <<, <=, <<=, <=> angleBracketLevel++; } } @@ -64,23 +64,27 @@ public boolean consume(CodeReader code, Lexer output) { angleBracketLevel = 0; parentheseLevel = 0; break; - case '>': - if (parentheseLevel == 0) { - output.addToken(Token.builder() - .setLine(code.getLinePosition()) - .setColumn(code.getColumnPosition()) - .setURI(output.getURI()) - .setValueAndOriginalValue(">") - .setType(CxxPunctuator.GT) - .build()); - code.pop(); - consumed = true; + case '>': { + var next = code.charAt(1); + if (next != '=') { // not >= + if (parentheseLevel == 0) { + output.addToken(Token.builder() + .setLine(code.getLinePosition()) + .setColumn(code.getColumnPosition()) + .setURI(output.getURI()) + .setValueAndOriginalValue(">") + .setType(CxxPunctuator.GT) + .build()); + code.pop(); + consumed = true; + } + angleBracketLevel = Math.max(0, angleBracketLevel - 1); + if (angleBracketLevel == 0) { + parentheseLevel = 0; + } } - angleBracketLevel = Math.max(0, angleBracketLevel - 1); - if (angleBracketLevel == 0) { - parentheseLevel = 0; - } - break; + } + break; case '(': parentheseLevel++; break; diff --git a/cxx-squid/src/test/java/org/sonar/cxx/parser/TemplatesTest.java b/cxx-squid/src/test/java/org/sonar/cxx/parser/TemplatesTest.java index 0076724d6c..abcce1654c 100644 --- a/cxx-squid/src/test/java/org/sonar/cxx/parser/TemplatesTest.java +++ b/cxx-squid/src/test/java/org/sonar/cxx/parser/TemplatesTest.java @@ -199,7 +199,8 @@ public void simpleTemplateId_reallife() { .matches("A<(X>Y)>") .matches("A<(X") .matches("vector>") - .matches("Y>1)>>"); + .matches("Y>1)>>") + .matches("a() < 0 || c >= 1"); // fix #2286 } @Test