Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-3657

Category annotation results in Groovy Builder error

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 1.7.2, 1.8-beta-1
    • None
    • None

    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.

      DistanceTest.groovy
      @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.

      Attachments

        Activity

          People

            paulk Paul King
            sirjective Christian Semrau
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: