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 2016/02/16 19:30:18 UTC
[jira] [Commented] (GROOVY-7757) Malformed class names for closures
in inner classes
[ https://issues.apache.org/jira/browse/GROOVY-7757?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15149044#comment-15149044 ]
Pascal Schumacher commented on GROOVY-7757:
-------------------------------------------
Cloned and reopened, because according to [~tremes] this issue is still not fixed:
{quote}I am still facing this issue with Groovy 2.4.5. The class name is still class org.jboss.weld.environment.se.test.resource.ClosureClassNameTest$_Inner_closure1 and thus causing the error with Weld.{quote}
> Malformed class names for closures in inner classes
> ---------------------------------------------------
>
> Key: GROOVY-7757
> URL: https://issues.apache.org/jira/browse/GROOVY-7757
> Project: Groovy
> Issue Type: Sub-task
> Components: class generator
> Affects Versions: 1.8.4, 1.8.6
> Environment: OS X, Groovy 1.8.4, Java version 1.6.0_29
> Reporter: Sam Corbett
> Assignee: Jochen Theodorou
> Labels: breaking
>
> The class names generated for closures in inner classes break Class.getSimpleName()
> For example, the closure passed to .each in this example has name Example$_Inner_closure1.class:
> {code}
> public class Example {
> private class Inner {
> def _ = [1, 2, 3].each {}
> }
> }
> {code}
> Calling getSimpleName() on this class (e.g. as done by [Weld|http://seamframework.org/Weld] on startup) throws a java.lang.InternalError:
> {code}
> Caused by: java.lang.InternalError: Malformed class name
> at java.lang.Class.getSimpleName(Class.java:1133) [:1.6.0_29]
> at java.lang.Class.isAnonymousClass(Class.java:1188) [:1.6.0_29]
> {code}
> I believe the class name is expected to be in the format Example$Inner$closure1.
> I've attached a test case to demonstrate the problem - extract the archive, cd to groovy-closure-classname-test and run mvn test. The test uses Weld to inject a ClosureClassNameTest instance, but fails when Weld calls getSimpleName() on the class for the closure on line 10.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)