RFR 8223351 [lworld/lw2] : Primary mirror and nullable mirror for inline type

Mandy Chung mandy.chung at oracle.com
Wed Jun 5 00:27:09 UTC 2019


I have updated the patch to add the indirect projection type. Updated 
webrev:
http://cr.openjdk.java.net/~mchung/valhalla/webrevs/lw2/8223351/webrev.01/

javadoc:
http://cr.openjdk.java.net/~mchung/valhalla/webrevs/lw2/api/java.base/java/lang/Class.html

Summary of the changes:

1. For an inline class V, V.class is the primary mirror.   The secondary 
mirror
     is the indirect projection type which is also the nullable 
projection type.

     Class.forName returns the primary mirror.  The projection types are
     used for reflection APIs to find a field of type V? or a method 
with signature
     with V? (i.e. L-type descriptor).

2. New APIs are added for core reflection to project an inline class its 
indirect
     or nullable projection type as well as query if a Class object is 
indirect or inline
     or nullable.

     Class::asPrimaryType
     Class::asIndirectType
     Class::asNullableType

     Class::isInlineClass  (was Class::isValue)
     Class::isIndirectType
     Class::isNullableType

3. Class::getName returns the same name for inline class and the 
projection type
     as that's the name of the class in the source

4. Class::isAssignableFrom checks properly the subtype relationship
     Point <: Point? and Point? <: Object

Notes:
- I didn't rename ValueKlass::value_mirror as ValueKlass and other 
classes will
   be renamed together in the future.
- I think AccessFlags::set_is_flattenable should be re-examined. 
JVM_ACC_FLATTENABLE
   no longer set in lworld?
- Intrinsification of Class::asPrimaryType will need update (JDK-8225317).
   I have excluded 
MyValue1.class.isAssignableFrom(MyValue1.class.asIndirectType())
   test case in compiler/valhalla/valuetypes/TestIntrinsifics.java. I'd 
need the compiler
   expert to help investigating it while I think it might be related to 
JDK-8225317.  Hence
   I capture that failing case in JDK-8225317.
- I took out the unnecessary asPrimaryType call in the tests since 
V.class now returns
   the primary mirror.  I left several asPrimaryType calls in 
TestIntrinsics as they look
   like those calls are intended.

Mandy

On 5/15/19 11:38 AM, Roger Riggs wrote:
> Please review Mandy's additions and changes to reflection and 
> java.lang.invoke APIs
> for inline and nullable types.
> The changes go a bit deep because of the support for the Java APIs 
> provided by the VM.
>
> This initial prototype reflects discussions about terminology and 
> orthogonality
> of concepts for inline vs nullable as described in the comments of 
> 8223351.
>
> Issue:
>   https://bugs.openjdk.java.net/browse/JDK-8223351
>
> Webrev:
>    http://cr.openjdk.java.net/~rriggs/webrev-lworld-dev-8223351/
>
> Thanks for any comments and suggestions, Roger
>



More information about the valhalla-dev mailing list