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

Constructor chaining in enums doesn't work

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.7.5
    • 1.7.6, 1.8-beta-3
    • Compiler
    • None

    Description

      The following code...

      enum Foo {
        ONE(1), TWO(1, 2)
        
        int i
        int j
        
        Foo(int i) {
          this(i, 0) // if we set i and j manually here, all is fine
        }
        
        Foo(int i, int j) {
          this.i = i
          this.j = j
        }
      }
      
      def foos = [Foo.ONE, Foo.TWO]
      

      ...causes this exception:

      java.lang.ExceptionInInitializerError
          at java.lang.Class.forName0(Native Method)
          at java.lang.Class.forName(Class.java:169)
          at ConsoleScript12.class$(ConsoleScript12)
          at ConsoleScript12.$get$$class$Foo(ConsoleScript12)
          at ConsoleScript12.run(ConsoleScript12:17)
          at groovy.lang.GroovyShell.runScriptOrMainOrTestOrRunnable(GroovyShell.java:264)
          at groovy.lang.GroovyShell.run(GroovyShell.java:513)
          at groovy.lang.GroovyShell.run(GroovyShell.java:170)
          at groovy.lang.GroovyShell$run$0.call(Unknown Source)
          at groovy.ui.Console$_runScriptImpl_closure16.doCall(Console.groovy:890)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)
          at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
          at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:273)
          at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
          at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)
          at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149)
          at groovy.ui.Console$_runScriptImpl_closure16.doCall(Console.groovy)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)
          at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
          at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:273)
          at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
          at groovy.lang.Closure.call(Closure.java:276)
          at groovy.lang.Closure.call(Closure.java:271)
          at groovy.lang.Closure.run(Closure.java:354)
          at java.lang.Thread.run(Thread.java:637)
      Caused by: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: Foo(java.lang.String, java.lang.Integer, java.lang.Integer)
          at groovy.lang.MetaClassImpl.selectConstructorAndTransformArguments(MetaClassImpl.java:1415)
          at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.selectConstructorAndTransformArguments(ScriptBytecodeAdapter.java:237)
          at Foo.$INIT(ConsoleScript12)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)
          at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
          at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:43)
          at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.callStatic(StaticMetaMethodSite.java:99)
          at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:48)
          at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:165)
          at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:181)
          at Foo.<clinit>(ConsoleScript12)
          ... 33 more
      

      Attachments

        Activity

          People

            roshandawrani Roshan Dawrani
            pniederw Peter Niederwieser
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: