Description

Static methods cannot be called during AST transformation via AstBuilder.buildFromSpec() because AstSpecificationCompiler.staticMethodCall() doesn't take a ClassNode object and if I try to call it with a Class object, I get "ClassNode#getTypeClass is called before the type class is set" error. I have no idea why the method takes a Class object instead.

I attached a program to reproduce the error. Please unzip the Test.zip and run Main.groovy then you'll get the following error:

Caught: BUG! exception in phase 'canonicalization' in source unit 'src\Main.groovy' ClassNode#getTypeClass for Clazz is called before the type class is set
BUG! exception in phase 'canonicalization' in source unit 'src\Main.groovy' ClassNode#getTypeClass for Clazz is called before the type class is set
at AnASTTransformation$_visit_closure1_closure2_closure3_closure4.doCall(AnASTTransformation.groovy:39)
at AnASTTransformation$_visit_closure1_closure2_closure3_closure4.doCall(AnASTTransformation.groovy)
at AnASTTransformation$_visit_closure1_closure2_closure3.doCall(AnASTTransformation.groovy:38)
at AnASTTransformation$_visit_closure1_closure2_closure3.doCall(AnASTTransformation.groovy)
at AnASTTransformation$_visit_closure1_closure2.doCall(AnASTTransformation.groovy:35)
at AnASTTransformation$_visit_closure1_closure2.doCall(AnASTTransformation.groovy)
at AnASTTransformation$_visit_closure1.doCall(AnASTTransformation.groovy:34)
at AnASTTransformation$_visit_closure1.doCall(AnASTTransformation.groovy)
at AnASTTransformation.visit(AnASTTransformation.groovy:33)

I also attached a patch for the trunk to add a version that takes a ClassNode object.

Activity

This error will occur with all the methods of AstSpecificationCompiler that take a Class object as a parameter.

I tried to write new patch to fix them but I had a problem with parameter(Map<String, Class> args, Closure argBlock) method because it and a version that takes Map<String, ClassNode> have the same signature.

I recommend that replacing all of them with new versions if you can ignore backward compatibility...

Masato Nagai
added a comment - 23/Jul/11 4:06 PM This error will occur with all the methods of AstSpecificationCompiler that take a Class object as a parameter.
I tried to write new patch to fix them but I had a problem with parameter(Map<String, Class> args, Closure argBlock) method because it and a version that takes Map<String, ClassNode> have the same signature.
I recommend that replacing all of them with new versions if you can ignore backward compatibility...