groovy-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel Sun (JIRA)" <>
Subject [jira] [Created] (GROOVY-8992) Polish the generics type syntax for closure
Date Sat, 16 Feb 2019 15:29:00 GMT
Daniel Sun created GROOVY-8992:

             Summary: Polish the generics type syntax for closure
                 Key: GROOVY-8992
             Project: Groovy
          Issue Type: Improvement
            Reporter: Daniel Sun
            Assignee: Daniel Sun

h2. 1. Background

Currently the syntax specifying the generics type for closure is quite verbose... e.g.
@ClosureParams(value=SimpleType.class, options="groovy.sql.Sql") Closure<V> closure
h2. 2. Solutions

① I propose make the above code groovier, e.g.
Closure<groovy.sql.Sql -> V>
② Suggestions of [~blackdrag] is much groovier for all cases:
Closure<groovy.sql.Sql : V>
③ In the meanwhile, [~blackdrag] proposed other variants of the generics type syntax for
closure to handle "polymorphic closures (aka closures which accept different kind of arguments)"
reminded by [~melix]
Closure<():R1; (X):R2; (Y, Z):R3>
h2. 3. Benefits

① The new syntax of generics type for closure is much more concise and readable:
 {{@ClosureParams(value=SimpleType.class, options="groovy.sql.Sql") Closure<V>}}
 {{Closure<Sql:V> // qualified name is not necessary if using imports}}
② Type checking can be completed in the compilation time, so we can find errors in time,
e.g. {{@ClosureParams(... options="groovy.sql.SqlAbc")}} of annotation specifies the type
with string literal, but the type does not exist, so we can not the error in the compilation
time. On the contrast, {{Closure<groovy.sql.SqlAbc:V>}} can make compiler help us find
type errors in the compilation time.
③ Better IDE support because of using the types instead of string literals for types
h2. 4. Rationale

In order to keep "consistency between using annotations and a type-checking only feature"
reminded by [~melix], I propose to transform the groovier code to the original code, e.g.
 will be transformed to
 {{@ClosureParams(value=SimpleType.class, options="groovy.sql.Sql") Closure<V>}}

h2. 5. Discussions in the dev mailing list

This message was sent by Atlassian JIRA

View raw message