diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b8f8783555..ccaac17f97 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -16,6 +16,9 @@ This is a {{ site.pmd.release_type }} release. ### Fixed Issues +* plsql + * [#1828](https://github.com/pmd/pmd/issues/1828): \[plsql] Parentheses stopped working + ### API Changes ### External Contributions diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 19b8548887..8921ebf4e5 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -1440,11 +1440,11 @@ ASTCompoundCondition CompoundCondition() : {} { ( - LOOKAHEAD(3) "(" Condition() ")" (LOOKAHEAD(2) ( | ) { jjtThis.setType(token.getImage()); } Condition() )* + LOOKAHEAD(1) "(" Condition() ")" (LOOKAHEAD(2) ( | ) { jjtThis.setType(token.getImage()); } Condition() )* | - LOOKAHEAD(3) { jjtThis.setType(token.getImage()); } Condition() + LOOKAHEAD(1) { jjtThis.setType(token.getImage()); } Condition() | - LOOKAHEAD(3) Condition2() (LOOKAHEAD(2) ( | ) { jjtThis.setType(token.getImage()); } Condition() )* + Condition2() (LOOKAHEAD(2) ( | ) { jjtThis.setType(token.getImage()); } Condition() )* ) { return jjtThis; } } diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/WhereClauseTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/WhereClauseTest.java index 12fc655ca3..038fa3e5e6 100644 --- a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/WhereClauseTest.java +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/WhereClauseTest.java @@ -104,4 +104,11 @@ public class WhereClauseTest extends AbstractPLSQLParserTst { StandardCharsets.UTF_8); ASTInput input = parsePLSQL(code); } + + @Test + public void testParentheses() throws Exception { + String code = IOUtils.toString(this.getClass().getResourceAsStream("WhereClauseParens.pls"), + StandardCharsets.UTF_8); + parsePLSQL(code); + } } diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereClauseParens.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereClauseParens.pls new file mode 100644 index 0000000000..23b902bc56 --- /dev/null +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereClauseParens.pls @@ -0,0 +1,14 @@ +-- +-- Where Clause With Parentheses +-- See https://github.com/pmd/pmd/issues/1828 +-- + +BEGIN + +select * +from dual +where (dummy = X or 1 = 2) +and 1=1; + +END; +/