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

Cannot use ASTTransformationCustomizer with TimedInterrupt

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 1.8.6, 2.0.1
    • Fix Version/s: 2.2.1
    • Component/s: None
    • Labels:
      None

      Description

      The following code will fail:

      def program = "println 'hello world'; while(true) {;}"
      def config = new CompilerConfiguration()
      config.addCompilationCustomizers(new ASTTransformationCustomizer([value: 1L, unit: TimeUnit.MILLISECONDS],TimedInterrupt))
      GroovyShell sh = new GroovyShell(config)
      Script script = sh.parse(program)
      System.out.println(script.run()) // fail here
      

      With the exception:

      org.codehaus.groovy.classgen.ClassGeneratorException: Cannot generate bytecode for constant: MILLISECONDS of type: java.util.concurrent.TimeUnit$3
      

      Per blackdrag, this is apparently a bug in line 197 of TimedInterruptableASTTransformation, which uses ConstantExpression when it should have used PropertyExpression.

      As a result of this bug, the only TimeUnit available when using TimedInterrupt is TimeUnit.SECONDS, which is the default. This is probably not too big of an issue for most uses, which is why I've set the priority to Minor.

        Attachments

          Activity

            People

            • Assignee:
              melix C├ędric Champeau
              Reporter:
              driscoll Jim Driscoll
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: