RFR: 8306697: Add method to obtain String for CONSTANT_Class_info in ClassDesc [v2]
Chen Liang
liach at openjdk.org
Wed Apr 26 23:44:24 UTC 2023
On Wed, 26 Apr 2023 22:10:20 GMT, Mandy Chung <mchung at openjdk.org> wrote:
> What is the issue of calling `ClassDesc.ofDescriptor` for arrays?
Users would have to check the obtained string from a `CONSTANT_Class_info` and call different factory methods, which feels a bit... weird to me, like calling `a == null ? Optional.empty() : Optional.of(a)` instead of `Optional.ofNullable(a)`, and `CONSTANT_Class_info` can be seen as an API provided by the class file as it's defined in the JVMS.
> Have you considered `internalName` to return an `Optional`?
That might be feasible. I initially fear that this may hurt performance-sensitive operations, but now I think as long as we can make `isArray()` or `isClassOrInterface()` constant-foldable (I don't think `String::startsWith` is optimized that far, so might need to check `charAt(0)`), we can still make obtaining the internal name fast.
public Optional<String> internalName() {
if (!isClassOrInterface()) // assuming constant-foldable
return Optional.of(descriptorString);
var internalName = this.internalName; // caching
if (internalName != null)
return Optional.of(internalName);
return Optional.of(this.internalName = descriptorString.substring(1, descriptorString.length() - 1));
}
-------------
PR Comment: https://git.openjdk.org/jdk/pull/13598#issuecomment-1524187441
More information about the core-libs-dev
mailing list