On Thu, 5 Mar 2026 16:36:04 GMT, Chen Liang <[email protected]> wrote:
>> The bootstrap methods in java.lang.runtime do not have explicit requirements >> for the lookup; they largely ignored it until they suddenly start using the >> lookups. >> >> Currently, the unprivileged lookup behavior is as follows: >> 1. `ObjectMethods.bootstrap` for `equals` and `hashCode` may fail with >> `IllegalAccessException` if the lookup is used to generate hidden classes; >> it may be ignored if no hidden class is needed. >> 2. `ObjectMethods.bootstrap` for `toString` fails with a `RuntimeException` >> caused by a `StringConcatException`. >> 3. `SwitchBootstraps` methods fail with `IllegalArgumentException` caused by >> `IllegalAccessException`. >> >> In contrast, `LambdaMetafactory` and `StringConcatFactory` throw their own >> types of exceptions. >> >> In this patch, I decided to make all these java.lang.runtime BSMs throw >> `IllegalArgumentException` without a cause for any unprivileged lookup that >> cannot support bytecode generation. Future BSMs should also reject >> unprivileged lookup eagerly to allow implementations to have bytecode >> generation freedom. The `IllegalArgumentException` is consistent with other >> consistency checks done by these BSMs. > > Chen Liang has updated the pull request incrementally with one additional > commit since the last revision: > > Jorn review I think in general, whatever is specified in the package summary is not repeated on individual classes or methods. This is the case for java.io's null checks, or java.lang.classfile's IllegalArgumentException checks. I will add that they require full-privilege for the parameter specs. If users wonder what happens with non-full-privilege lookups, they will discover the exception contract in the package summary. ------------- PR Comment: https://git.openjdk.org/jdk/pull/30067#issuecomment-4006380762 PR Comment: https://git.openjdk.org/jdk/pull/30067#issuecomment-4006393200
