mgroovy created GROOVY-8490: ------------------------------- Summary: 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
* @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 -- This message was sent by Atlassian JIRA (v7.6.3#76005)