RFR: 8306697: Add method to obtain String for CONSTANT_Class_info in ClassDesc [v2]
Chen Liang
liach at openjdk.org
Thu Apr 27 17:56:58 UTC 2023
On Thu, 27 Apr 2023 17:23:58 GMT, Mandy Chung <mchung at openjdk.org> wrote:
> 4. Return a string representation of internal name for a class or interface and a descriptor string for a primitive type and array. The method could be called `classDescString`. The caller can test if this `ClassDesc` is not a primitive if it wants the string for a class or interface or an array.
I think I will still resort to an `Optional`.
Pros of Optional:
1. Clearly indicates to users that some ClassDesc cannot be converted to a CONSTANT_Class_info string, than failing at primitive classes at runtime (#12996)
2. Anticipates valhalla changes; if non-null types in Valhalla has descriptors but cannot be encoded in CONSTANT_Class_info, then users that check Optional will not break, as opposed to checking isPrimitive (similar story with `Lookup::hasPrivateAccess`)
Cons of Optional:
1. Needs wrap and unwrap, not beautiful in code and has no pattern matching
- The unwrap performance overhead will be gone in Valhalla with value classes
So, I most likely will add `ClassDesc.ofClassDescString()` and `ClassDesc.classDescString()` returning `Optional<String>` to interact with `CONSTANT_Class_info`.
With this new model, we will have:
default ClassEntry classEntry(ClassDesc classDesc) {
return classEntry(utf8Entry(classDesc.classDescString().orElseThrow(() -> new IllegalArgumentException(classDesc + " cannot be encoded as ClassEntry"))));
}
which will take care of non-primitive cases from valhalla.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/13598#issuecomment-1526093150
More information about the core-libs-dev
mailing list