groovy-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "mgroovy (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (GROOVY-8490) Extend @Newify to support a class name pattern parameter
Date Sun, 04 Mar 2018 22:15:00 GMT

     [ https://issues.apache.org/jira/browse/GROOVY-8490?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

mgroovy updated GROOVY-8490:
----------------------------
    Description: 
* @Newify should be extended to support a classNamePattern parameter
* All class names inside e.g. a @Newify annotated class that match the given pattern shall
support having its ctor called without the new keyword ("Python style")
* Example:
{code}
@Newify(classNamePattern=/[A-Z].*/)
class Foo {
  // Any class whose name starts with an uppercase letter
  // can have its ctors called without new keyword inside Foo
  
  String s
  Integer x
  File f
  
  Foo(String s, File f, Integer x) { 
    this.s = s
    this.f = f
    this.x = x
  }
  
  void createFoo(File base) {
    // Java style
    new Foo(new String('abc'), new File(base,'log'), new Integer(123))
    // new Groovy style
    Foo(String('abc'), File(base,'log'), Integer(123))
  }
} 
{code}
* The classNamePattern parameter:
## Is 100% backwards compatible (same as the existing value parameter)
## Would allow e.g. @Newify(classNamePattern=/[A-Z].*/) to be auto-applied to all classes
in a project (same as e.g. @AutoFinal GROOVY-8300)
*** In practice that would typically cover 99.9...% of all classes, since most projects follow
the Java convention of classes being the only callable entities to start with an uppercase
letter
*** The existing value parameter cannot be used that way on a global level, since it is not
practical to explicitly list all project classes
## Compile time performance wise classNamePattern=/[A-Z].*/ avoids having to check any (method/field/variable)()
call whether it is a class ctor call if it is lowercase (i.e. again typically in 99.9...%
of cases), i.e. the approach is fast

  was:
* @Newify should be extended to support a classNamePattern parameter
* All class names inside e.g. a @Newify annotated class that match the given pattern shall
support having its ctor called without the new keyword ("Python style")
* Example:
{code}
@Newify(classNamePattern=/[A-Z].*/)
class Foo {
  // Any class whose name starts with an uppercase letter
  // can have its ctors called without new keyword inside Foo
  
  String s
  Integer x
  File f
  
  Foo(String s, File f, Integer x) { 
    this.s = s
    this.f = f
    this.x = x
  }
  
  void createFoo(File base) {
    // Java style
    new Foo(new String('abc'), new File(base,'log'), new Integer(123))
    // new Groovy style
    Foo(String('abc'), File(base,'log'), Integer(123))
  }
} 
{code}
* The classNamePattern parameter:
## Is 100% backwards compatible (same as the existing value parameter)
## Would allow e.g. @Newify(classNamePattern=/[A-Z].*/) to be auto-applied to all classes
in a project (same as e.g. GROOVY-8300)
*** In practice that would typically cover 99.9...% of all classes, since most projects follow
the Java convention of classes being the only callable entities to start with an uppercase
letter
*** The existing value parameter cannot be used that way on a global level, since it is not
practical to explicitly list all project classes
## Compile time performance wise classNamePattern=/[A-Z].*/ avoids having to check any (method/field/variable)()
call whether it is a class ctor call if it is lowercase (i.e. again typically in 99.9...%
of cases), i.e. the approach is fast


> Extend @Newify to support a class name pattern parameter
> --------------------------------------------------------
>
>                 Key: GROOVY-8490
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8490
>             Project: Groovy
>          Issue Type: Improvement
>          Components: Compiler
>            Reporter: mgroovy
>            Priority: Major
>
> * @Newify should be extended to support a classNamePattern parameter
> * All class names inside e.g. a @Newify annotated class that match the given pattern
shall support having its ctor called without the new keyword ("Python style")
> * Example:
> {code}
> @Newify(classNamePattern=/[A-Z].*/)
> class Foo {
>   // Any class whose name starts with an uppercase letter
>   // can have its ctors called without new keyword inside Foo
>   
>   String s
>   Integer x
>   File f
>   
>   Foo(String s, File f, Integer x) { 
>     this.s = s
>     this.f = f
>     this.x = x
>   }
>   
>   void createFoo(File base) {
>     // Java style
>     new Foo(new String('abc'), new File(base,'log'), new Integer(123))
>     // new Groovy style
>     Foo(String('abc'), File(base,'log'), Integer(123))
>   }
> } 
> {code}
> * The classNamePattern parameter:
> ## Is 100% backwards compatible (same as the existing value parameter)
> ## Would allow e.g. @Newify(classNamePattern=/[A-Z].*/) to be auto-applied to all classes
in a project (same as e.g. @AutoFinal GROOVY-8300)
> *** In practice that would typically cover 99.9...% of all classes, since most projects
follow the Java convention of classes being the only callable entities to start with an uppercase
letter
> *** The existing value parameter cannot be used that way on a global level, since it
is not practical to explicitly list all project classes
> ## Compile time performance wise classNamePattern=/[A-Z].*/ avoids having to check any
(method/field/variable)() call whether it is a class ctor call if it is lowercase (i.e. again
typically in 99.9...% of cases), i.e. the approach is fast



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message