http://cr.openjdk.java.net/~vlivanov/8057919/webrev.00/jdk
http://cr.openjdk.java.net/~vlivanov/8057919/webrev.00/hotspot
https://bugs.openjdk.java.net/browse/JDK-8057919

The logic to compute simple name (Class.getSimpleName()) for inner/nested/local classes is tightly coupled with Java naming scheme and sometimes fails for classes generated from non-Java code.

Instead of parsing class name and try to extract simple name based on JLS rules, the fix I propose is to use InnerClasses attribute from the class file. Simple name is already recorded there.

JVMS-4.7.6: The InnerClasses Attribute
"inner_name_index: If C is anonymous (JLS §15.9.5), the value of the inner_name_index item must be zero. Otherwise, the value of the inner_name_index item must be a valid index into the constant_pool table, and the entry at that index must be a CONSTANT_Utf8_info structure (§4.4.7) that represents the original simple name of C, as given in the source code from which this class file was compiled."

Since I consider backporting the fix into 8u60, I'd like to hear opinions about backward compatibility of such change.

As an alternative solution, I can restore original logic and consult InnerClasses attribute when class name parsing logic fails.

Testing: regression test, jck-runtime/java_lang, jdk/test/java/lang/

Thanks!

Best regards,
Vladimir Ivanov

Reply via email to