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

Reply via email to