Details
-
Type:
Improvement
-
Status:
Open
-
Priority:
Major
-
Resolution: Unresolved
-
Affects Version/s: 1.6-beta-2
-
Fix Version/s: None
-
Component/s: None
-
Labels:None
-
Environment:Mac OS 10.5.2
JDK 1.5.0_13
Groovy 1.6-beta-2-SNAPSHOT
-
Number of attachments :
Description
Groovy allows method names to be specified as String literals. This enables the use of special characters in method names, such as space, comma, and question mark. However, when such a name become part of a class name, a "java.lang.ClassFormatError: Illegal class name" is thrown at runtime. As far as I can tell, this happens when:
1. closures are involved
2. the new call site mechanism generates a class on-the-fly
To fully support special characters in method names, the naming scheme of generated classes should thus be adapted. Also, the (few) characters that aren't allowed to appear in a method name according to the JVM specification should be rejected by the parser. For more information and related discussion see:
http://groups.google.com/group/jvm-languages/browse_thread/thread/c5c9c0bafe1ef0c8
http://www.nabble.com/In-Love-with-Groovy-tt17240709.html
John Rose (JSR-292 lead) has a list of proposed escapeing sequences here: http://blogs.sun.com/jrose/entry/symbolic_freedom_in_the_vm so perhaps the long term course would be to implement it. I am not wild about the lack of a one to one mapping (reverse can do strange things) so escapeing the backslash with itself may be a modification we may want to do as well.
However, the full solution may want to wait for 1.7, and this gets listed as a "well then don't do it' bug in the meantime.