On Thu, 25 Aug 2022 18:44:54 GMT, Mark Powers <mpow...@openjdk.org> wrote:

>> src/java.base/share/classes/sun/security/jca/ProviderList.java line 129:
>> 
>>> 127:         int j = 0;
>>> 128:         for (ProviderConfig config : providerList.configs) {
>>> 129:             if 
>>> (!Objects.requireNonNull(config.getProvider()).getName().equals(name)) {
>> 
>> This is an unusual usage of `Objects.requireNonNull`. Is a null provider 
>> ever expected here? I don't see why this is better, the prior code will also 
>> throw NPE. Replacing `== false` with `!` is ok though.
>> 
>> Same comment on other cases in this file.
>
> IntelliJ seems to think it could. The point of requireNonNull is that you 
> control when an exception is thrown, and sooner rather than later is better. 
> This code appears to have been working fine for a long time, so maybe NPE 
> can't happen in practice. I'm fine with reverting this requireNonNull change 
> here and elsewhere if you think it is unnecessary.

Right, but in this case I think if an NPE is ever thrown it would be considered 
a bug in the JDK because an unexpected RuntimeException would be thrown. I 
think requireNonNull is used more in cases where caller input is being 
validated and null is not valid. I find this code less readable. There are lots 
of cases in the JDK code where some object could theoretically be null, but it 
would be a bug if it was. If it was a normal case for a provider to sometimes 
be null here, then I would expect this code to check for null and handle it.

@valeriep is more familiar with this code, so I would also like her feedback on 
these changes to use requireNonNull.

-------------

PR: https://git.openjdk.org/jdk/pull/9972

Reply via email to