You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (JIRA)" <ji...@apache.org> on 2015/06/01 15:01:17 UTC
[jira] [Resolved] (GROOVY-4787) BUG! exception in phase 'class
generation' generating class from map in closure
[ https://issues.apache.org/jira/browse/GROOVY-4787?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul King resolved GROOVY-4787.
-------------------------------
Resolution: Fixed
Fix Version/s: 2.5.0-beta-1
Assignee: Paul King
> BUG! exception in phase 'class generation' generating class from map in closure
> -------------------------------------------------------------------------------
>
> Key: GROOVY-4787
> URL: https://issues.apache.org/jira/browse/GROOVY-4787
> Project: Groovy
> Issue Type: Bug
> Components: class generator
> Affects Versions: 1.7.10, 1.8-rc-4, 2.4.0-rc-1
> Reporter: Tim Yates
> Assignee: Paul King
> Priority: Minor
> Fix For: 2.5.0-beta-1
>
>
> If I have a class like so:
> {code}
> class Person {
> String name
> int age
> }
> {code}
> Then it is possible to create an instance of {{Person}} using the little known construct:
> {code}
> def tim = Person [ name:'tim', age:49 ]
> {code}
> This works fine.
> However, if I try to do the following:
> {code}
> def ppl = [ [ name:'Tim', age:49 ], [ name:'Dave', age:32 ], [ name:'Steve', age:28 ] ]
> ppl.collect { Person [ *it ] }
> {code}
> I get the class generation error
> {code}
> BUG! exception in phase 'class generation' in source unit 'ConsoleScript10' SpreadExpression should not be visited here
> at org.codehaus.groovy.classgen.AsmClassGenerator.visitSpreadExpression(AsmClassGenerator.java:1871)
> at org.codehaus.groovy.ast.expr.SpreadExpression.visit(SpreadExpression.java:39)
> at org.codehaus.groovy.classgen.AsmClassGenerator.visitAndAutoboxBoolean(AsmClassGenerator.java:4122)
> at org.codehaus.groovy.classgen.AsmClassGenerator.makeBinopCallSite(AsmClassGenerator.java:2268)
> at org.codehaus.groovy.classgen.AsmClassGenerator.evaluateBinaryExpression(AsmClassGenerator.java:3902)
> at org.codehaus.groovy.classgen.AsmClassGenerator.visitBinaryExpression(AsmClassGenerator.java:1662)
> at org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:49)
> at org.codehaus.groovy.classgen.AsmClassGenerator.visitAndAutoboxBoolean(AsmClassGenerator.java:4122)
> at org.codehaus.groovy.classgen.AsmClassGenerator.evaluateExpression(AsmClassGenerator.java:1447)
> at org.codehaus.groovy.classgen.AsmClassGenerator.visitReturnStatement(AsmClassGenerator.java:1408)
> at org.codehaus.groovy.ast.stmt.ReturnStatement.visit(ReturnStatement.java:47)
> at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:35)
> at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:165)
> at org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:738)
> at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
> 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:626)
> at org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:601)
> at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123)
> at org.codehaus.groovy.classgen.AsmClassGenerator.visitMethod(AsmClassGenerator.java:696)
> at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1039)
> at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50)
> at org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:276)
> at org.codehaus.groovy.control.CompilationUnit$12.call(CompilationUnit.java:748)
> at org.codehaus.groovy.control.CompilationUnit$12.call(CompilationUnit.java:765)
> at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:942)
> at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:519)
> at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:497)
> at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:474)
> at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:306)
> at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:287)
> at groovy.lang.GroovyShell.parseClass(GroovyShell.java:731)
> at groovy.lang.GroovyShell.run(GroovyShell.java:516)
> at groovy.lang.GroovyShell.run(GroovyShell.java:172)
> at groovy.lang.GroovyShell$run.call(Unknown Source)
> at groovy.ui.Console$_runScriptImpl_closure16.doCall(Console.groovy:904)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
> at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
> at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:273)
> at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
> at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)
> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149)
> at groovy.ui.Console$_runScriptImpl_closure16.doCall(Console.groovy)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
> at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
> at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:273)
> at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
> at groovy.lang.Closure.call(Closure.java:282)
> at groovy.lang.Closure.call(Closure.java:277)
> at groovy.lang.Closure.run(Closure.java:360)
> at java.lang.Thread.run(Thread.java:680)
> {code}
> I know I should be doing:
> {code}
> ppl.collect { new Person( *:it ) }
> {code}
> (which works fine), but I just thought you should know about this {{BUG!}} exception
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)