On Mon, Feb 13, 2017 at 9:27 AM, David Holmes <david.hol...@oracle.com> wrote:
> FWIW I think a null Supplier should simply be ignored.
>

What do you mean by ignored? Do you mean "ignored" in the sense of  my
proposed changes (i.e. throw a NPE with a a null message) or do you
mean "ignored" in the sense that it is fine to generate a new,
implicit NPE when accessing the null supplier (with the consequences
detailed in the bug description')?

> David
>
>
> On 13/02/2017 6:04 PM, Volker Simonis wrote:
>>
>> Ping...
>>
>> On Thu, Feb 9, 2017 at 5:32 PM, Jeff Dinkins <jeff.dink...@oracle.com>
>> wrote:
>>>
>>>
>>> Adding Mike’s current email.
>>>
>>> -jeff
>>>
>>>> On Feb 9, 2017, at 10:18 AM, Volker Simonis <volker.simo...@gmail.com>
>>>> wrote:
>>>>
>>>> Hi,
>>>>
>>>> I want to finally resolve this long standing issue (or close it as
>>>> "will not fix" if that's not possible):
>>>>
>>>> http://cr.openjdk.java.net/~simonis/webrevs/2017/8033909/
>>>>
>>>> This change has already been discussed in length on the mailing list:
>>>>
>>>>
>>>> http://mail.openjdk.java.net/pipermail/core-libs-dev/2014-February/thread.html#24989
>>>>
>>>> and in the bug comments:
>>>>
>>>> https://bugs.openjdk.java.net/browse/JDK-8033909
>>>>
>>>> So I'll give just a short summary here:
>>>>
>>>> - Objects.requireNonNull(T, Supplier) does not check for the Supplier
>>>> argument being null. Instead it relies on the fact, that the VM will
>>>> implicitly throw a NullPointerException when it calls .get on the
>>>> Supplier argument during the creation of the explicit
>>>> NullPointerException which it is supposed to throw.
>>>>
>>>> - this behavior slightly differs from Objects.requireNonNull(T,
>>>> String) which simply creates a NullPointerException with a null
>>>> message in the case where the String argument is null.
>>>>
>>>> - the difference is not evident in the OpenJDK, because the HotSpot VM
>>>> creates a NPE with a null message by default if we call a method on a
>>>> null object.
>>>>
>>>> - however creating such a NPE with a null message when invoking a
>>>> method on a null object is not enforced by the standard, and other
>>>> implementations can do better :) For the following trivial program:
>>>>
>>>> public class NonNull {
>>>>  public static void main(String[] args) {
>>>>    Supplier<String> ss = null;
>>>>    Object o = Objects.requireNonNull(null, ss);
>>>>  }
>>>> }
>>>>
>>>> the current OpenJDK implementation returns:
>>>>
>>>> Exception in thread "main" java.lang.NullPointerException
>>>>    at java.util.Objects.requireNonNull(Objects.java:290)
>>>>    at NonNull.main(NonNull.java:8)
>>>>
>>>> but the SAP JVM will print:
>>>>
>>>> Exception in thread "main" java.lang.NullPointerException: while
>>>> trying to invoke the method java.util.function.Supplier.get() of a
>>>> null object loaded from local variable 'messageSupplier'
>>>>    at java.util.Objects.requireNonNull(Objects.java:290)
>>>>    at NonNull.main(NonNull.java:8)
>>>>
>>>> which is at least confusing for a call to Objects.requireNonNul() with
>>>> a null Supplier. We think the exception should be the same like the
>>>> one we get when invoking Objects.requireNonNul() with a null String.
>>>>
>>>> - because of this difference (and because we like our extended
>>>> Exception messages :) the JCK test for Objects.requireNonNul(T,
>>>> Supplier) (i.e.
>>>> api/java_util/Objects/index.html#RequireNonNullMessageSupplier) was
>>>> removed from TCK 8 and is still commented out in TCK 9
>>>> (npe_checkingNullSupplier() in RequireNonNullMessageSupplier.java).
>>>>
>>>> I really think that the simplest and most natural fix for this problem
>>>> is to simply check for a null Supplier argument and create the NPE
>>>> with an explicit null message in that case (as outlined in the
>>>> webrev). This:
>>>> - makes the two requireNonNul() overloads for String and Supplier
>>>> behave the same (which I think was the initial intention).
>>>> - doesn't require documentation changes
>>>> - makes it possible to write a simple and conforming TCK test
>>>>
>>>> If we can't agree on this quickly, I suggest to close the issue as
>>>> "will-not-fix" and leave it untested by the TCK.
>>>>
>>>> Thank you and best regards,
>>>> Volker
>>>>
>>>> PS: the 'XS' obviously only applies to the fix, not to this message :)
>>>
>>>
>

Reply via email to