Details
Description
I tried to use the Category annotation, but the Groovy Plugin throws an exception while trying to build the file.
Errors running builder 'Groovy Builder' on project 'groovy-ast-bug'.
Problems occurred when invoking code from plug-in: "org.eclipse.core.resources".
BUG! exception in phase 'canonicalization' in source unit 'C:\eclipse-3.5\ws\groovy-ast-bug\src\main\DistanceTest.groovy' illegal left expression for declaration: org.codehaus.groovy.ast.expr.PropertyExpression@17d44d7[object: org.codehaus.groovy.ast.expr.VariableExpression@130ce7e[variable: $this] property: ConstantExpression[s]]
at org.codehaus.groovy.ast.expr.DeclarationExpression.check(DeclarationExpression.java:48)
at org.codehaus.groovy.ast.expr.DeclarationExpression.<init>(DeclarationExpression.java:37)
at org.codehaus.groovy.ast.expr.DeclarationExpression.transformExpression(DeclarationExpression.java:72)
at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.transform(ClassCodeExpressionTransformer.java:90)
at org.codehaus.groovy.transform.CategoryASTTransformation$1.transform(CategoryASTTransformation.java:115)
at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitExpressionStatement(ClassCodeExpressionTransformer.java:148)
at org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40)
at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:38)
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:129)
at org.codehaus.groovy.transform.CategoryASTTransformation$1.visitBlockStatement(CategoryASTTransformation.java:86)
at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:52)
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:73)
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:80)
at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitConstructorOrMethod(ClassCodeExpressionTransformer.java:53)
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:88)
at org.codehaus.groovy.transform.CategoryASTTransformation$1.visitMethod(CategoryASTTransformation.java:77)
at org.codehaus.groovy.transform.CategoryASTTransformation.visit(CategoryASTTransformation.java:129)
at org.codehaus.groovy.transform.ASTTransformationVisitor.visitClass(ASTTransformationVisitor.java:127)
at org.codehaus.groovy.transform.ASTTransformationVisitor$2.call(ASTTransformationVisitor.java:171)
at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:914)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:464)
at org.codehaus.groovy.eclipse.core.compiler.GroovyCompiler.compile(GroovyCompiler.java:210)
at org.codehaus.groovy.eclipse.core.compiler.GroovyCompiler.compile(GroovyCompiler.java:82)
at org.codehaus.groovy.eclipse.core.model.GroovyProject.compile(GroovyProject.java:539)
at org.codehaus.groovy.eclipse.core.model.GroovyProject.buildGroovyContent(GroovyProject.java:510)
at org.codehaus.groovy.eclipse.core.model.GroovyProject.buildGroovyContent(GroovyProject.java:461)
at org.codehaus.groovy.eclipse.core.builder.GroovyBuilder.build(GroovyBuilder.java:133)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:627)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:170)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:201)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:253)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:256)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:309)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:341)
at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:140)
at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:238)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
eclipse.buildId=I20090611-1540
java.version=1.5.0_15
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=de_DE
Framework arguments: -product org.eclipse.epp.package.java.product
Command-line arguments: -os win32 -ws win32 -arch x86 -product org.eclipse.epp.package.java.product
The problem can be demonstrated with the following file.
@Category(Number) class NumberCategory { String getMeters() { String s = String.valueOf(this)+"m" return s } } use(NumberCategory) { def dist = 300.meters assert dist == "300m" }
The error does not occur when we inline the intermediate variable of getMeters().
The error does not occur with the un-annotated static method style.