Uploaded image for project: 'Clover'
  1. Clover
  2. CLOV-1166

Clover does not work with Groovy 2.x

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • High
    • 3.1.8, 3.1.11
    • 3.1.7
    • Groovy, Maven plugin
    • None

    Description

      Problem:

      Clover instrumentation fails for Groovy 2.x with a stack trace like below:

      BUILD FAILED
      c:\Work\support\clv-5892-groovyjarjarasm\tutorial\build.xml:32: java.lang.IncompatibleClassChangeError
              at com.atlassian.clover.instr.groovy.bytecode.RecorderGetterBytecodeInstruction.visit(RecorderGetterBytecodeInstruction.java:109)
              at org.codehaus.groovy.classgen.AsmClassGenerator.visitBytecodeSequence(AsmClassGenerator.java:1771)
              at org.codehaus.groovy.classgen.BytecodeSequence.visit(BytecodeSequence.java:64)
              at org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:81)
              at org.codehaus.groovy.classgen.asm.OptimizingStatementWriter.writeBlockStatement(OptimizingStatementWriter.java:155)
              at org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:455)
              at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
              at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101)
              at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:112)
              at org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:319)
              at org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:276)
              at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123)
              at org.codehaus.groovy.classgen.AsmClassGenerator.visitMethod(AsmClassGenerator.java:396)
              at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1056)
              at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50)
              at org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:180)
              at org.codehaus.groovy.control.CompilationUnit$14.call(CompilationUnit.java:786)
              at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1027)
              at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:564)
              at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:542)
              at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:519)
              at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:498)
              at org.codehaus.groovy.tools.FileSystemCompiler.compile(FileSystemCompiler.java:57)
              at org.codehaus.groovy.tools.FileSystemCompiler.doCompilation(FileSystemCompiler.java:213)
              at org.codehaus.groovy.ant.Groovyc.runCompiler(Groovyc.java:947)
              at org.codehaus.groovy.ant.Groovyc.compile(Groovyc.java:994)
              at org.codehaus.groovy.ant.Groovyc.execute(Groovyc.java:630)
      

      Reason:

      RecorderGetterBytecodeInstruction extends org.codehaus.groovy.classgen.BytecodeInstruction
      and implements a following method:
      public void visit(groovyjarjarasm.asm.MethodVisitor methodVisitor)

      In Groovy 1.x MethodVisitor is an interface. In Groovy 2.x MethodVisitor is a class. Although RecorderGetterBytecodeInstruction compiles correctly with both Groovy versions, it fails at runtime during bytecode verification, becase visit() method gets different bytecode signature.

      Solution:

      Compile RecorderGetterBytecodeInstruction against two different Groovy versions. Load proper version using reflections at runtime.

      Attachments

        1. maven-clover-plugin-error.log
          452 kB
        2. pom.xml
          14 kB
        3. pom.xml
          11 kB

        Activity

          People

            mparfianowicz Marek Parfianowicz
            mparfianowicz Marek Parfianowicz
            Votes:
            1 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - 16h
                16h
                Remaining:
                Remaining Estimate - 16h
                16h
                Logged:
                Time Spent - Not Specified
                Not Specified