[ https://issues.apache.org/jira/browse/GROOVY-9469?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Marcin Zajaczkowski updated GROOVY-9469: ---------------------------------------- Description: Global AST transformation in Spock throws exception with meaningful error message if used with incompatible Groovy version (e.g. Spock for Groovy 2.5 executed with Groovy 2.4): {code:java} Could not instantiate global transform class org.spockframework.compiler.SpockTransform specified at jar:file:/.../spock-core-1.3-groovy-2.5.jar!/META-INF/services/org.codehaus.groovy.transform.ASTTransformation because of exception org.spockframework.util.IncompatibleGroovyVersionException: The Spock compiler plugin cannot execute because Spock 1.3.0-groovy-2.5 is not compatible with Groovy 2.4.3. For more information, see http://versioninfo.spockframework.org Spock artifact: file:/.../spock-core-1.3-groovy-2.5.jar Groovy artifact: file:/.../groovy-2.4.3.jar {code} However, it stopped working with Spock 2.0 for Groovy 2.5 and Groovy 3.0: {code:java} Could not instantiate global transform class org.spockframework.compiler.SpockTransform specified at jar:file:/.../spock-core-2.0-M1-groovy-2.5.jar!/META-INF/services/org.codehaus.groovy.transform.ASTTransformation because of exception java.lang.reflect.InvocationTargetException {code} It's not very constructive for people seeing that error message. Firstly, I suspected some incompatibilities in the Spock code which completely fails with new Groovy. However, it turned out that the exception is hidden by Groovy itself. I slightly modified ASTTransformationVisitor it detect that situation and get target/cause in a case of InvocationTargetException - my [PR|https://github.com/apache/groovy/pull/1193]. It helped, however, I haven't found any change in the ASTTransformationVisitor which could cause that regression. It might to some 2.5→3.0 change how constructor are called (e.g. around CachedConstructor which is used, but doesn't seem to intercept the exception) or anything else. You might want to investigate it - it worked without my tweak in Groovy 2.5. Related Spock issues: [https://github.com/spockframework/spock/issues/1067] was: Global AST transformation in Spock throws exception with meaningful error message if used with incompatible Groovy version (e.g. Spock for Groovy 2.5 executed with Groovy 2.4): {code:java} Could not instantiate global transform class org.spockframework.compiler.SpockTransform specified at jar:file:/.../spock-core-1.3-groovy-2.5.jar!/META-INF/services/org.codehaus.groovy.transform.ASTTransformation because of exception org.spockframework.util.IncompatibleGroovyVersionException: The Spock compiler plugin cannot execute because Spock 1.3.0-groovy-2.5 is not compatible with Groovy 2.4.3. For more information, see http://versioninfo.spockframework.org Spock artifact: file:/.../spock-core-1.3-groovy-2.5.jar Groovy artifact: file:/.../groovy-2.4.3.jar {code} However, it stopped working with Spock 2.0 for Groovy 2.5 and Groovy 3.0: {code:java} Could not instantiate global transform class org.spockframework.compiler.SpockTransform specified at jar:file:/.../spock-core-2.0-M1-groovy-2.5.jar!/META-INF/services/org.codehaus.groovy.transform.ASTTransformation because of exception java.lang.reflect.InvocationTargetException {code} It's not very constructive for people seeing that error message. Firstly, I suspected some incompatibilities in the Spock code which completely fails with new Groovy. However, it turned out that the exception is hidden by Groovy itself. I slightly modified ASTTransformationVisitor it detect that situation and get target/cause in a case of InvocationTargetException - my [PR|https://github.com/apache/groovy/pull/1193]. It helped, however, I haven't found any change in the ASTTransformationVisitor which could cause that regression. It might to some 2.5→3.0 change how constructor are called or anything else. You might want to investigate it - it worked without my tweak in Groovy 2.5. Related Spock issues: https://github.com/spockframework/spock/issues/1067 > Original exception during global AST transformation no longer preserved in > error message > ---------------------------------------------------------------------------------------- > > Key: GROOVY-9469 > URL: https://issues.apache.org/jira/browse/GROOVY-9469 > Project: Groovy > Issue Type: Bug > Components: Compiler > Affects Versions: 3.0.0, 3.0.2 > Reporter: Marcin Zajaczkowski > Priority: Minor > Time Spent: 10m > Remaining Estimate: 0h > > Global AST transformation in Spock throws exception with meaningful error > message if used with incompatible Groovy version (e.g. Spock for Groovy 2.5 > executed with Groovy 2.4): > {code:java} > Could not instantiate global transform class > org.spockframework.compiler.SpockTransform specified at > jar:file:/.../spock-core-1.3-groovy-2.5.jar!/META-INF/services/org.codehaus.groovy.transform.ASTTransformation > because of exception > org.spockframework.util.IncompatibleGroovyVersionException: > The Spock compiler plugin cannot execute because Spock 1.3.0-groovy-2.5 is > not compatible > with Groovy 2.4.3. For more information, see > http://versioninfo.spockframework.org > Spock artifact: file:/.../spock-core-1.3-groovy-2.5.jar > Groovy artifact: file:/.../groovy-2.4.3.jar > {code} > However, it stopped working with Spock 2.0 for Groovy 2.5 and Groovy 3.0: > {code:java} > Could not instantiate global transform class > org.spockframework.compiler.SpockTransform specified at > jar:file:/.../spock-core-2.0-M1-groovy-2.5.jar!/META-INF/services/org.codehaus.groovy.transform.ASTTransformation > because of exception java.lang.reflect.InvocationTargetException > {code} > It's not very constructive for people seeing that error message. Firstly, I > suspected some incompatibilities in the Spock code which completely fails > with new Groovy. However, it turned out that the exception is hidden by > Groovy itself. > I slightly modified ASTTransformationVisitor it detect that situation and get > target/cause in a case of InvocationTargetException - my > [PR|https://github.com/apache/groovy/pull/1193]. > It helped, however, I haven't found any change in the > ASTTransformationVisitor which could cause that regression. It might to some > 2.5→3.0 change how constructor are called (e.g. around CachedConstructor > which is used, but doesn't seem to intercept the exception) or anything else. > You might want to investigate it - it worked without my tweak in Groovy 2.5. > Related Spock issues: [https://github.com/spockframework/spock/issues/1067] -- This message was sent by Atlassian Jira (v8.3.4#803005)