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

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

    Details

    • Type: Documentation
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 2.4.6
    • Component/s: None
    • Labels:
      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

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

              Dates

              • Created:
                Updated:
                Resolved: