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

Document that mixing TupleConstructor and InheritConstructors will likely not give you what you want

    XMLWordPrintableJSON

Details

    • Documentation
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 2.4.6
    • None
    • None

    Description

      This compiles

      @groovy.transform.TupleConstructor
      class Animal {
        int age
      }
      
      @groovy.transform.InheritConstructors
      @groovy.transform.TupleConstructor
      class Cat extends Animal {
        String name
      }
      

      But simply changing the order of the annotations, like this

      @groovy.transform.TupleConstructor
      class Animal {
        int age
      }
      
      @groovy.transform.TupleConstructor
      @groovy.transform.InheritConstructors
      class Cat extends Animal {
        String name
      }
      

      causes

      java.util.NoSuchElementException
      	at java.util.TreeMap$PrivateEntryIterator.nextEntry(TreeMap.java:1205)
      	at java.util.TreeMap$KeyIterator.next(TreeMap.java:1261)
      	at org.codehaus.groovy.classgen.asm.InvocationWriter.makeMOPBasedConstructorCall(InvocationWriter.java:723)
      	at org.codehaus.groovy.classgen.asm.InvocationWriter.visitSpecialConstructorCall(InvocationWriter.java:629)
      	at org.codehaus.groovy.classgen.asm.InvocationWriter.writeSpecialConstructorCall(InvocationWriter.java:619)
      	at org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorCallExpression(AsmClassGenerator.java:813)
      	at org.codehaus.groovy.ast.expr.ConstructorCallExpression.visit(ConstructorCallExpression.java:44)
      	at org.codehaus.groovy.classgen.asm.StatementWriter.writeExpressionStatement(StatementWriter.java:604)
      	at org.codehaus.groovy.classgen.asm.OptimizingStatementWriter.writeExpressionStatement(OptimizingStatementWriter.java:354)
      	at org.codehaus.groovy.classgen.AsmClassGenerator.visitExpressionStatement(AsmClassGenerator.java:619)
      	at org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40)
      	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101)
      	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:112)
      	at org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:429)
      	at org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:386)
      	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructor(ClassCodeVisitorSupport.java:119)
      	at org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructor(AsmClassGenerator.java:501)
      	at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1079)
      	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50)
      	at org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:232)
      	at org.codehaus.groovy.control.CompilationUnit$16.call(CompilationUnit.java:810)
      	at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1052)
      	at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:588)
      	at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:566)
      	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:543)
      	at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:297)
      	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:267)
      ...

      We should document that these transformations can interfere with each other, and generally shouldn't be used concurrently.

      Attachments

        Activity

          People

            keegan Keegan Witt
            keegan Keegan Witt
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: