[ 
https://issues.apache.org/jira/browse/GROOVY-11660?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17951347#comment-17951347
 ] 

Paul King edited comment on GROOVY-11660 at 5/14/25 7:10 AM:
-------------------------------------------------------------

That is by (the current) design. Basically, newline acts as a statement 
terminator if the statement can validly finish at that point, with some well 
understood exceptions.

The following code is valid (though not recommended) in Groovy:
{code:groovy}
class Blah {
    public String
}

def b = new Blah()
b.String = 3
println b.String // => 3
{code}
So, parsing stops after "public String" with "String" being the identifier. If 
using the groovyConsole, try "Script -> Inspect CST" to confirm.

One exception is unterminated quotes or brackets, e.g. for below, termination 
won't be attempted after the first line:
{code:groovy}
println """
  $b.String
"""
{code}
Otherwise, there are a few specific places where we do lookahead, e.g. for this:
{code:groovy}
println b.String
    .multiply(4) // => 12
{code}
A standalone statement can't start with a dot, so we also don't terminate on 
the previous line.


was (Author: paulk):
That is by the (current) design. Basically, newline acts as a statement 
terminator if the statement can validly finish at that point, with some well 
understood exceptions.

The following code is valid (though not recommended) in Groovy:
{code:groovy}
class Blah {
    public String
}

def b = new Blah()
b.String = 3
println b.String // => 3
{code}
So, parsing stops after "public String" with "String" being the identifier. If 
using the groovyConsole, try "Script -> Inspect CST" to confirm.

One exception is unterminated quotes or brackets, e.g. for below, termination 
won't be attempted after the first line:
{code:groovy}
println """
  $b.String
"""
{code}
Otherwise, there are a few specific places where we do lookahead, e.g. for this:
{code:groovy}
println b.String
    .multiply(4) // => 12
{code}
A standalone statement can't start with a dot, so we also don't terminate on 
the previous line.

> Variables declared on multiple lines cause an ANTLR error
> ---------------------------------------------------------
>
>                 Key: GROOVY-11660
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11660
>             Project: Groovy
>          Issue Type: Improvement
>          Components: parser-antlr4
>    Affects Versions: 5.0.0-alpha-12
>            Reporter: Saravanan
>            Priority: Minor
>
> This code fails during antlr parsing, but is valid Java code because of the ;
> {code:java}
> // code placeholder
> class Blah {
>     // This errors out early in the ANTLR phase
>     public String
>               myMemberVariable;
>     public fn() {
>         // This also fails in the ANTLR phase
>         String 
>             somethingElse = "BLAH";
>     }
> }{code}
> The member variable declaration in unambiguous even in groovy parlance. Can 
> this be fixed in the antlr parser? Not so sure about the statement inside the 
> function, it feels like its valid groovy code (type on the first line and a 
> dynamic variable assignment on the next) but even that fails. The expectation 
> though is that it is evaluated as String somethingElse = "BLAH". Is that 
> expectation valid?



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to