diff --git a/pmd-java/etc/grammar/Java.jjt b/pmd-java/etc/grammar/Java.jjt index feddd07397..092622beab 100644 --- a/pmd-java/etc/grammar/Java.jjt +++ b/pmd-java/etc/grammar/Java.jjt @@ -1,4 +1,9 @@ /** + * Fix for Cast Expression not detected properly in Return statements + * Bug #1429 + * + * Andreas Dangel 10/2015 + *==================================================================== * Fix for Lambda expressions without variables. * * Andreas Dangel 11/2014 @@ -1725,6 +1730,7 @@ void UnaryExpressionNotPlusMinus() #UnaryExpressionNotPlusMinus((jjtn000.getImag { ( "~" {jjtThis.setImage("~");} | "!" {jjtThis.setImage("!");} ) UnaryExpression() | LOOKAHEAD( CastExpression() ) CastExpression() +| LOOKAHEAD("(" Type() ")" "(") CastExpression() | PostfixExpression() } diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ParserCornersTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ParserCornersTest.java index 5ca3e424c3..49db59f085 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ParserCornersTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/ast/ParserCornersTest.java @@ -108,6 +108,12 @@ public class ParserCornersTest extends ParserTst { } } + @Test + public void testBug1429ParseError() throws Exception { + String c = IOUtils.toString(this.getClass().getResourceAsStream("Bug1429.java")); + parseJava18(c); + } + private String readAsString(String resource) { InputStream in = ParserCornersTest.class.getResourceAsStream(resource); try { diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/Bug1429.java b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/Bug1429.java new file mode 100644 index 0000000000..96595a532d --- /dev/null +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/ast/Bug1429.java @@ -0,0 +1,18 @@ +public class Bug1429 { + public Set getAttributeTuples() { + return (Set) (this.attributes == null ? Collections. emptySet() : new HashSet( + CollectionUtils.collect(this.attributes.keySet(), new Transformer() { + @Override + public Object transform(final Object obj) { + final String key = (String) obj; + final String value = HGXLIFFTypeConfiguration.this.attributes.get(key); + + String result = key; + if (StringUtils.isNotEmpty(value)) { + result = result.concat(":").concat(value); + } + return result; + } + }))); + } +} \ No newline at end of file diff --git a/src/site/markdown/overview/changelog.md b/src/site/markdown/overview/changelog.md index 6722b0f59e..766a34317e 100644 --- a/src/site/markdown/overview/changelog.md +++ b/src/site/markdown/overview/changelog.md @@ -12,4 +12,6 @@ **Bugfixes:** +* [#1429](https://sourceforge.net/p/pmd/bugs/1429/): Java - Parse Error: Cast in return expression + **API Changes:**