On Fri, 17 Jun 2022 06:27:12 GMT, liach <d...@openjdk.org> wrote: >> Another approach would be to keep the parameter array and the boolean in a >> record, and mark the record field as stable, possibly like what's done in >> #6889. Keeping them in a record like: >> >> record ParameterData(Parameter[] parameters, boolean real) {} >> >> private transient @Stable ParameterData parameterData; >> >> private ParameterData parameterData() { >> ParameterData data = parameterData; >> if (data != null) >> return data; >> // Create parameter data, cache and return >> } >> >> boolean hasRealParameterData() { return parameterData().real(); } >> private Parameter[] privateGetParameters() { return >> parameterData().parameters(); } >> >> >> This code should be more maintainable in the long run as well, with more >> straightforward concurrency and caching model. > > If my record approach is used, `hasRealParameterData()` and > `privateGetParameters()` should be manually inlined instead, for code > clarity. Alternatively, you can rename the components to like > `sharedArray`/`sharedParameters`, `isReal` to make the call sites like > `parameterData().sharedParameters().clone()` or `parameterData().isReal()` > more descriptive. > > Currently, `hasRealParameterData` is only used in > `Executable::getAllGenericParameterTypes`, and `privateGetParameters` only in > `Executable::getParameters` (except the unintuitive usage to initialize the > parameter data), so the impact of such a refactor and inline would be small.
@liach Good point, done! ------------- PR: https://git.openjdk.org/jdk/pull/9143