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

Extend @Newify to support a class name pattern parameter

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments



      • @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:
        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


        Issue Links


          This comment will be Viewable by All Users Viewable by All Users


            daniel_sun Daniel Sun
            emge mgroovy
            0 Vote for this issue
            3 Start watching this issue




                Issue deployment