Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-8490

Extend @Newify to support a class name pattern parameter

    XMLWordPrintableJSON

    Details

      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:
        @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))
          }
        } 
        
      • The classNamePattern parameter:
        1. Is 100% backwards compatible (same as the existing value parameter)
        2. 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
        3. 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

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                daniel_sun Daniel Sun
                Reporter:
                emge mgroovy
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: