Menu

#1258 Java 8 Lambda parse error on direct field access

PMD-5.2.1
closed
PMD
2-Critical
Bug
5.1.2
2015-02-14
2014-09-05
janScheible
No

PMD is able to parse a Lambda like this without any problems:

object.event = () -> {
    Request request = new Request();
    request.setId(42);
};

Whilst this Lambda leads to an error:

object.event = () -> {
    Request request = new Request();
    request.id = 42;
};

The error is reported as:

net.sourceforge.pmd.lang.java.ast.ParseException: Encountered " "(" "( "" at line 148, column 40.
Was expecting one of:
    "false" ...
    "new" ...
    "null" ...
    "super" ...
    "this" ...
    "true" ...
    <INTEGER_LITERAL> ...
    <FLOATING_POINT_LITERAL> ...
    <HEX_FLOATING_POINT_LITERAL> ...
    <CHARACTER_LITERAL> ...
    <STRING_LITERAL> ...
    <IDENTIFIER> ...
    "!" ...
    "~" ...
    <IDENTIFIER> ...
    <IDENTIFIER> ...
    <IDENTIFIER> ...
    <IDENTIFIER> ...

    at net.sourceforge.pmd.lang.java.ast.JavaParser.generateParseException(JavaParser.java:10736)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.jj_consume_token(JavaParser.java:10620)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.PrimaryPrefix(JavaParser.java:3740)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.PrimaryExpression(JavaParser.java:3569)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.PostfixExpression(JavaParser.java:3415)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.UnaryExpressionNotPlusMinus(JavaParser.java:3379)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.UnaryExpression(JavaParser.java:3240)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.MultiplicativeExpression(JavaParser.java:3136)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.AdditiveExpression(JavaParser.java:3085)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.ShiftExpression(JavaParser.java:3032)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.RelationalExpression(JavaParser.java:2973)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.InstanceOfExpression(JavaParser.java:2939)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.EqualityExpression(JavaParser.java:2888)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.AndExpression(JavaParser.java:2850)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.ExclusiveOrExpression(JavaParser.java:2812)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.InclusiveOrExpression(JavaParser.java:2774)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.ConditionalAndExpression(JavaParser.java:2736)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.ConditionalOrExpression(JavaParser.java:2698)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.ConditionalExpression(JavaParser.java:2661)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.Expression(JavaParser.java:2536)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.StatementExpression(JavaParser.java:4755)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.Statement(JavaParser.java:4435)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.BlockStatement(JavaParser.java:4582)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.Block(JavaParser.java:4543)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.MethodDeclaration(JavaParser.java:1542)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.ClassOrInterfaceBodyDeclaration(JavaParser.java:1211)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.ClassOrInterfaceBody(JavaParser.java:1129)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.ClassOrInterfaceDeclaration(JavaParser.java:571)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.ClassOrInterfaceBodyDeclaration(JavaParser.java:1191)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.ClassOrInterfaceBody(JavaParser.java:1129)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.ClassOrInterfaceDeclaration(JavaParser.java:571)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.TypeDeclaration(JavaParser.java:463)
    at net.sourceforge.pmd.lang.java.ast.JavaParser.CompilationUnit(JavaParser.java:216)
    at net.sourceforge.pmd.lang.java.AbstractJavaParser.parse(AbstractJavaParser.java:56)
    at net.sourceforge.pmd.testframework.ParserTst.parseJava(ParserTst.java:120)
    at net.sourceforge.pmd.testframework.ParserTst.parseJava18(ParserTst.java:116)
    at net.sourceforge.pmd.ast.ParserCornersTest.testParsersCases(ParserCornersTest.java:75)
1 Attachments

Discussion

  • Andreas Dangel

    Andreas Dangel - 2014-11-02
    • status: open --> in-progress
    • assigned_to: Andreas Dangel
    • Milestone: New Tickets --> PMD-next
     
  • Andreas Dangel

    Andreas Dangel - 2014-11-03
    • status: in-progress --> closed
     

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.