-
Bug
-
Resolution: Not a bug
-
High
-
4.0.0
-
None
-
OSX 10.9, Java 1.7.0_60, Grails 2.4.3
Our coverage was working fine until we upgraded to Grails 2.4.3. Now, we are getting this error only when clover is enabled for the build:
[22:26:30]| Error Compilation error compiling [integration] tests: startup failed:
[22:26:30]General error during class generation: Method code too large!
[22:26:30]
[22:26:30]java.lang.RuntimeException: Method code too large!
[22:26:30] at groovyjarjarasm.asm.MethodWriter.a(Unknown Source)
[22:26:30] at groovyjarjarasm.asm.ClassWriter.toByteArray(Unknown Source)
[22:26:30] at org.codehaus.groovy.control.CompilationUnit$16.call(CompilationUnit.java:807)
[22:26:30] at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1047)
[22:26:30] at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:583)
[22:26:30] at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:561)
[22:26:30] at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:538)
[22:26:30] at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:517)
[22:26:30] at org.codehaus.groovy.tools.FileSystemCompiler.compile(FileSystemCompiler.java:59)
[22:26:30] at org.codehaus.groovy.tools.FileSystemCompiler.doCompilation(FileSystemCompiler.java:215)
[22:26:30] at org.codehaus.groovy.ant.Groovyc.runCompiler(Groovyc.java:1161)
[22:26:30] at org.codehaus.groovy.ant.Groovyc.compile(Groovyc.java:1212)
[22:26:30] at org.codehaus.groovy.grails.compiler.Grailsc.compile(Grailsc.java:78)
[22:26:30] at org.codehaus.groovy.ant.Groovyc.execute(Groovyc.java:827)
[22:26:30] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
[22:26:30] at sun.reflect.GeneratedMethodAccessor89.invoke(Unknown Source)
[22:26:30] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[22:26:30] at java.lang.reflect.Method.invoke(Method.java:606)
[22:26:30] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[22:26:30] at groovy.util.AntBuilder.performTask(AntBuilder.java:319)
[22:26:30] at groovy.util.AntBuilder.nodeCompleted(AntBuilder.java:264)
[22:26:30] at groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:147)
[22:26:30] at groovy.util.AntBuilder.doInvokeMethod(AntBuilder.java:203)
[22:26:30] at groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:64)
[22:26:30] at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:907)
[22:26:30] at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:884)
[22:26:30] at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:164)
[22:26:30] at org.codehaus.groovy.grails.test.runner.GrailsProjectTestCompiler.compileTests(GrailsProjectTestCompiler.groovy:74)
[22:26:30] at org.codehaus.groovy.grails.test.runner.GrailsProjectTestRunner.processTests(GrailsProjectTestRunner.groovy:392)
[22:26:30] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[22:26:30] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[22:26:30] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[22:26:30] at java.lang.reflect.Method.invoke(Method.java:606)
[22:26:30] at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
[22:26:30] at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324)
[22:26:30] at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1207)
[22:26:30] at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110)
[22:26:30] at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1016)
[22:26:30] at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1152)
[22:26:30] at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110)
[22:26:30] at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1016)
[22:26:30] at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)
[22:26:30] at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
[22:26:30] at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
[22:26:30] at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
[22:26:30] at org.codehaus.groovy.grails.test.runner.GrailsProjectTestRunner$_runAllTests_closure7.doCall(GrailsProjectTestRunner.groovy:313)
[22:26:30] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[22:26:30] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[22:26:30] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[22:26:30] at java.lang.reflect.Method.invoke(Method.java:606)
[22:26:30] at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
[22:26:30] at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324)
[22:26:30] at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1207)
[22:26:30] at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110)
[22:26:30] at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1016)
[22:26:30] at groovy.lang.Closure.call(Closure.java:423)
[22:26:30] at org.codehaus.groovy.runtime.DefaultGroovyMethods.callClosureForMapEntry(DefaultGroovyMethods.java:4271)
[22:26:30] at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1408)
[22:26:30] at org.codehaus.groovy.runtime.dgm$151.invoke(Unknown Source)
[22:26:30] at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:271)
[22:26:30] at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
[22:26:30] at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
[22:26:30] at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
[22:26:30] at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
[22:26:30] at org.codehaus.groovy.grails.test.runner.GrailsProjectTestRunner.runAllTests(GrailsProjectTestRunner.groovy:299)
[22:26:30] at org.codehaus.groovy.grails.test.runner.GrailsProjectTestRunner.runAllTests(GrailsProjectTestRunner.groovy:214)
[22:26:30] at org.codehaus.groovy.grails.test.runner.GrailsProjectTestRunner.runAllTests(GrailsProjectTestRunner.groovy)
[22:26:30] at org.codehaus.groovy.grails.test.runner.GrailsProjectTestRunner$runAllTests$0.call(Unknown Source)
[22:26:30] at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
[22:26:30] at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
[22:26:30] at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
[22:26:30] at _GrailsTest$_run_closure1.doCall(_GrailsTest.groovy:102)
I tried to enable --verbose and --verboseCompile but it doesn't really seem to provide additional information on the method/file causing the issue. I assume that the Clover instrumentation is pushing a method over this 64KB boundary, but I don't see any methods on our side that are even close to this size.
Our current clover configuration is:
ant.'clover-setup'(initstring: ".clover/trifleet.db") { ant.fileset(dir: "grails-app", includes: "**/domain/**, **/controllers/**, **/jobs/**, **/reports/**, **/services/**, **/taglib/**, **/utils/**") {} ant.fileset(dir: "src", includes: "**/*.groovy, **/*.java", excludes: "**/script@*.groovy, **/spring/*.groovy, **/smooks/*.groovy, **/system/database/generators/**, **/system/generator/drillDown/**, **/castor/**, **/DrillDown*.*, **/operational/movement/edi/writer/**") { } ant.fileset(dir: "../common/grails-app", includes: "**/domain/**, **/controllers/**, **/jobs/**, **/services/**, **/taglib/**, **/utils/**") {} ant.fileset(dir: "../common/src", includes: "**/*.groovy, **/*.java", excludes: "**/script@*.groovy, **/system/database/generators/**, **/castor/**") {} ant.fileset(dir: "test", includes: "**/*.groovy") {} ant.testsources(dir: "test") {} ant.profiles { ant.profile(name: "default", coverageRecorder: "SHARED") } }
I have tried disable the test coverage by setting enabled: false on testsources but that didn't fix the problem.
Please let me know if there's any other options to reduce the size or at least work around this problem as we have no coverage during a critical phase of our project testing right now.