You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Pascal Schumacher (JIRA)" <ji...@apache.org> on 2015/10/10 20:15:05 UTC
[jira] [Updated] (GROOVY-7524) Document that TupleConstructor and
InheritConstructors shouldn't be mixed
[ https://issues.apache.org/jira/browse/GROOVY-7524?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Pascal Schumacher updated GROOVY-7524:
--------------------------------------
Summary: Document that TupleConstructor and InheritConstructors shouldn't be mixed (was: Document that shouldn't mix TupleConstructor and InheritConstructors)
> Document that TupleConstructor and InheritConstructors shouldn't be mixed
> -------------------------------------------------------------------------
>
> Key: GROOVY-7524
> URL: https://issues.apache.org/jira/browse/GROOVY-7524
> Project: Groovy
> Issue Type: Documentation
> Reporter: Keegan Witt
> Assignee: Keegan Witt
>
> This compiles
> {code:java}
> @groovy.transform.TupleConstructor
> class Animal {
> int age
> }
> @groovy.transform.InheritConstructors
> @groovy.transform.TupleConstructor
> class Cat extends Animal {
> String name
> }
> {code}
> But simply changing the order of the annotations, like this
> {code:java}
> @groovy.transform.TupleConstructor
> class Animal {
> int age
> }
> @groovy.transform.TupleConstructor
> @groovy.transform.InheritConstructors
> class Cat extends Animal {
> String name
> }
> {code}
> causes
> {noformat}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)
> ...{noformat}
> We should document that these transformations can interfere with each other, and generally shouldn't be used concurrently.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)