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

java.lang.VerifyError when initializing object of inner class within the constructor of its containing class

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.4.3
    • 3.0.0-rc-1, 2.5.16
    • None

    Description

      When trying to initialize an object of an inner class, from the constructor of it's containing class, a java.lang.VerifyError is thrown. This code worked fine in Java, but when I switched to Groovy, it throws the VerifyError.

      Stacktrace:

      java.lang.VerifyError: (class: page_objects/Login$LoginNavigationBar$ExploreDestinationsDropdown, method: <init> signature: (Lpage_objects/Login$LoginNavigationBar;)V) Expecting to find object/array on stack
      at java.lang.Class.getDeclaredConstructors0(Native Method)
      at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
      at java.lang.Class.getDeclaredConstructors(Class.java:2020)
      at org.codehaus.groovy.reflection.CachedClass$2$1.run(CachedClass.java:71)
      at java.security.AccessController.doPrivileged(Native Method)
      at org.codehaus.groovy.reflection.CachedClass$2.initValue(CachedClass.java:69)
      at org.codehaus.groovy.reflection.CachedClass$2.initValue(CachedClass.java:66)
      at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:46)
      at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:33)
      at org.codehaus.groovy.reflection.CachedClass.getConstructors(CachedClass.java:265)
      at groovy.lang.MetaClassImpl.<init>(MetaClassImpl.java:215)
      at groovy.lang.MetaClassImpl.<init>(MetaClassImpl.java:225)
      at groovy.lang.MetaClassRegistry$MetaClassCreationHandle.createNormalMetaClass(MetaClassRegistry.java:168)
      at groovy.lang.MetaClassRegistry$MetaClassCreationHandle.createWithCustomLookup(MetaClassRegistry.java:158)
      at groovy.lang.MetaClassRegistry$MetaClassCreationHandle.create(MetaClassRegistry.java:141)
      at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:250)
      at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:282)
      at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:255)
      at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:872)
      at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallConstructorSite(CallSiteArray.java:84)
      at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:57)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:232)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:244)
      at page_objects.Login$LoginNavigationBar.<init>(Login.groovy:173)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
      at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:77)
      at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:102)
      at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:57)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:232)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:244)
      at page_objects.Login.<init>(Login.groovy:25)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
      at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:77)
      at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:102)
      at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:57)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:232)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:244)
      at test_classes.BaseTest.beforeMethod(BaseTest.groovy:74)
      at test_classes.UseMyWeekTest.super$2$beforeMethod(UseMyWeekTest.groovy)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:497)
      at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
      at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324)
      at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1207)
      at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:130)
      at test_classes.UseMyWeekTest.beforeMethod(UseMyWeekTest.groovy:24)

      Offending Code:

      class LoginNavigationBar
          {
              ExploreDestinationsDropdown exploreDestinationsDropdown
      
              private LoginNavigationBar()
              {
                  // THIS IS THE LINE THAT PRODUCES THE ERROR
                  exploreDestinationsDropdown = new ExploreDestinationsDropdown() 
              }
      
              class ExploreDestinationsDropdown extends NavigationBarDropdown<ExploreDestinationsDropdown>
              {
                  private ExploreDestinationsDropdown()
                  {
                      super(Login.this.sw, 0)
                  }
              }
      }
      

      It also may be useful to know that LoginNavigationBar itself is an inner class of Login. So ExploreDestinationsDropwown is an inner class of an inner class. Also, the constructor for LoginNavigationBar is being called from the constructor of Login, the enclosing class.

      Attachments

        Issue Links

          Activity

            People

              emilles Eric Milles
              mjolnir11 Josh Diaz
              Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: