JDK-8300181 : Class#isMemberClass() returns false for DirectMethodHandle$Holder
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.lang
  • Affected Version: 11,17,19,20
  • Priority: P4
  • Status: New
  • Resolution: Unresolved
  • OS: generic
  • CPU: generic
  • Submitted: 2023-01-15
  • Updated: 2023-01-16
Description
A DESCRIPTION OF THE PROBLEM :
Calling Class#isMemberClass() on Class.forName("java.lang.invoke.DirectMethodHandle$Holder") returns false. The JLS leads me to think this should return true.

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
The following assertion fails:

assert Class.forName("java.lang.invoke.DirectMethodHandle$Holder").isMemberClass();


ACTUAL -
false

---------- BEGIN SOURCE ----------
assert Class.forName("java.lang.invoke.DirectMethodHandle$Holder").isMemberClass();

---------- END SOURCE ----------


Comments
The observations on Windows 10: JDK 8: ClassNotFoundException: java.lang.invoke.DirectMethodHandle$Holder JDK 11: Failed, returned false. JDK 17: Failed. JDK 19: Failed. JDK 20ea+23: Failed.
16-01-2023

Requested above information from the submitter.
16-01-2023

java.lang.invoke.DirectMethodHandle$Holder is generated at link time. The generated class doesn't have an InnerClasses attribute. These classes are JDK internal, is this impacting something for the submitter ?
15-01-2023