Details
-
Sub-task
-
Status: Closed
-
Major
-
Resolution: Invalid
-
2.4.5
-
None
-
None
Description
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:
public class Example { private class Inner { def _ = [1, 2, 3].each {} } }
Calling getSimpleName() on this class (e.g. as done by Weld on startup) throws a java.lang.InternalError:
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]
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.
Attachments
Issue Links
- is a clone of
-
GROOVY-5351 Malformed class names for closures in inner classes
- Closed