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 02:13:04 UTC

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

     [ https://issues.apache.org/jira/browse/GROOVY-7524?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Keegan Witt updated GROOVY-7524:
--------------------------------
    Description: 
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}

  was:
This compiles, but the constructors from the subclass are deleted because of GROOVY-7522.

{code:xml}
@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}


> 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)