[ https://issues.apache.org/jira/browse/GROOVY-7668?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Pascal Schumacher resolved GROOVY-7668. --------------------------------------- Resolution: Fixed Assignee: Pascal Schumacher Fix Version/s: 2.4.6 Pull request merged. Thanks! > Better error-message for AST transformation when binary compatibility changes > ----------------------------------------------------------------------------- > > Key: GROOVY-7668 > URL: https://issues.apache.org/jira/browse/GROOVY-7668 > Project: Groovy > Issue Type: Improvement > Affects Versions: 2.4.5 > Environment: Grails 3.0.0 to 3.0.9 > Reporter: Søren Berg Glasius > Assignee: Pascal Schumacher > Fix For: 2.4.6 > > > When a dependency changes signature, and this dependency is used in an AST > transformation, a compilation error can occur, but the error message is > presented to the developer does not give any hint to, where the error was. > In this case, the Reactor framework used in Grails 3.0.0 changed version > (started using generics) to a never version in Grails 3.0.9. This caused the > following compilation error: > {code} > General error during class generation: > java.lang.reflect.MalformedParameterizedTypeException > > java.lang.reflect.MalformedParameterizedTypeException > at > sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:58) > at > sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:51) > at > sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:92) > at > sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:105) > at > sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:140) > at > sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) > at > sun.reflect.generics.repository.MethodRepository.getReturnType(MethodRepository.java:68) > at java.lang.reflect.Method.getGenericReturnType(Method.java:255) > at > org.codehaus.groovy.vmplugin.v5.Java5.configureClassNode(Java5.java:364) > at org.codehaus.groovy.ast.ClassNode.lazyClassInit(ClassNode.java:265) > at > org.codehaus.groovy.ast.ClassNode.getUnresolvedSuperClass(ClassNode.java:1004) > at > org.codehaus.groovy.ast.ClassNode.getUnresolvedSuperClass(ClassNode.java:999) > at org.codehaus.groovy.ast.ClassNode.getSuperClass(ClassNode.java:993) > at org.codehaus.groovy.ast.ClassNode.isDerivedFrom(ClassNode.java:936) > at > org.codehaus.groovy.classgen.asm.InvocationWriter.castToNonPrimitiveIfNecessary(InvocationWriter.java:858) > at > org.codehaus.groovy.classgen.asm.OperandStack.doConvertAndCast(OperandStack.java:347) > at > org.codehaus.groovy.classgen.asm.OperandStack.doGroovyCast(OperandStack.java:282) > at > org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.evaluateEqual(BinaryExpressionHelper.java:400) > at > org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.eval(BinaryExpressionHelper.java:84) > at > org.codehaus.groovy.classgen.AsmClassGenerator.visitBinaryExpression(AsmClassGenerator.java:638) > at > org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:51) > at > org.codehaus.groovy.classgen.asm.StatementWriter.writeExpressionStatement(StatementWriter.java:607) > at > org.codehaus.groovy.classgen.asm.OptimizingStatementWriter.writeExpressionStatement(OptimizingStatementWriter.java:349) > at > org.codehaus.groovy.classgen.AsmClassGenerator.visitExpressionStatement(AsmClassGenerator.java:620) > at > org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:42) > at > org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:84) > at > org.codehaus.groovy.classgen.asm.OptimizingStatementWriter.writeBlockStatement(OptimizingStatementWriter.java:158) > at > org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:566) > at > org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:71) > at > org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:104) > at > org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:115) > at > org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:430) > at > org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:387) > at > org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:126) > at > org.codehaus.groovy.classgen.AsmClassGenerator.visitMethod(AsmClassGenerator.java:507) > at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1086) > at > org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:53) > at > org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:233) > at > org.codehaus.groovy.control.CompilationUnit$16.call(CompilationUnit.java:813) > at > org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1055) > at > org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:591) > at > org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569) > at > org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546) > at > org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:525) > at > org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:180) > at > org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:53) > at > org.gradle.api.internal.tasks.compile.daemon.CompilerDaemonServer.execute(CompilerDaemonServer.java:53) > 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.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) > at > org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) > at > org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:360) > at > org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54) > at > org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at java.lang.Thread.run(Thread.java:745) > > 1 error > {code} > If the compilation error was caught in > `org.codehaus.groovy.vmplugin.v5.Java5.configureClassNode(Java5.java:364)` it > would be possible to output what class and what the reason was for the error > before re-throwing it. -- This message was sent by Atlassian JIRA (v6.3.4#6332)