JSR 308 and implicit n-ary lambdas

Werner Dietl wdietl at gmail.com
Thu Nov 8 02:14:38 PST 2012

Lambda experts,

the parser in file
around line 968 contains the following:

        case LPAREN:
            if (typeArgs == null && (mode & EXPR) != 0) {
                if (peekToken(MONKEYS_AT) ||
                        peekToken(FINAL) ||
                        peekToken(RPAREN) ||
                        peekToken(IDENTIFIER, COMMA) ||
                        peekToken(IDENTIFIER, RPAREN, ARROW)) {
                    //implicit n-ary lambda
                    t = lambdaExpressionOrStatement(true,
peekToken(MONKEYS_AT) || peekToken(FINAL), pos);
                } else {

this breaks in combination with type annotations on type casts.

For an example failure, see this test case:


In the above code, is the MONKEYS_AT used with the assumption that any
annotation after a LPAREN must be a declaration annotation on a parameter
and therefore a lambda should start?

In the following code:

String a0 = (@A String) o;

instead of looking for just the MONKEYS_AT, I think we will have to parse a
whole type and then see whether we hit an identifier (it's a lambda) or a
closing RPAREN (it's an annotated cast).

Do you see a simpler way to disambiguate this? Am I misunderstanding what's
happening here?

cu, WMD.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/type-annotations-dev/attachments/20121108/16f1b266/attachment.html 

More information about the type-annotations-dev mailing list