You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Keegan Witt (JIRA)" <ji...@apache.org> on 2015/07/24 18:34:04 UTC

[jira] [Comment Edited] (GROOVY-7524) Inconsistant behavior when mixing TupleConstructor and InheritConstructors

    [ https://issues.apache.org/jira/browse/GROOVY-7524?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14640712#comment-14640712 ] 

Keegan Witt edited comment on GROOVY-7524 at 7/24/15 4:33 PM:
--------------------------------------------------------------

I changed my mind.  I think we should verify they're not combined and/or document they shouldn't be combined rather than fixing (unless fixing turns out to be pretty easy).  I'm now thinking users should use {{includeSuperProperties}} or {{includeSuperFields}} instead.


was (Author: keegan):
I changed my mind.  I think we should verify they're not combined and/or document they shouldn't be combined rather than fixing (unless fixing turns out to be pretty easy).  I'm now thinking Users should use {{includeSuperProperties}} or {{includeSuperFields}} instead.

> Inconsistant behavior when mixing TupleConstructor and InheritConstructors
> --------------------------------------------------------------------------
>
>                 Key: GROOVY-7524
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7524
>             Project: Groovy
>          Issue Type: Bug
>            Reporter: Keegan Witt
>
> This compiles, but the constructors from the subclass are deleted because of GROOVY-7522.
> {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}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)