Hi,

I now believe I was wrong in trying to tackle both
java.util.logging.Logger::getLogger and System::getLogger
uses of @CS with a single fix.
Both issues are indeed different in nature and might require
a different fix.

java.util.logging.Logger is an existing API.
the issue already exists in previous releases - and therefore
probably doesn't deserve being fixed in JDK 9 rampdown phased 2.
As David pointed out changing the specification is also probably
not the right answer here.
I have logged https://bugs.openjdk.java.net/browse/JDK-8177325
(P3) to track the possible NPE in java.util.logging.Logger


On the other hand, System::getLogger is a new API and therefore
I believe that how the method behave when there is no caller on
the stack should be specified. I will continue to use 8177136 to
track this - and I have updated the title in consequence.

8177136: Caller sensitive method System::getLogger should specify
         what happens if there is no caller on the stack.
https://bugs.openjdk.java.net/browse/JDK-8177136

I will send a new RFR (with the new title) and an updated
patch for this.

best regards,

-- daniel

On 20/03/2017 12:08, Daniel Fuchs wrote:
Hi,

Please find below a patch for:

8177136: Caller sensitive methods Logger.getLogger,
Logger.getAnonymousLogger, and System.getLogger should throw
IllegalCallerException if there is no caller on the stack.
https://bugs.openjdk.java.net/browse/JDK-8177136

Caller sensitive methods Logger.getLogger, Logger.getAnonymousLogger,
and System.getLogger currently throw an undocumented
NullPointerException if they are called from JNI and there is no
Java frame on the stack.

Throwing NullPointerException is confusing and makes it look like there
is a bug in the implementation.
In truth, these method are @CallerSensitive, and therefore must not
be called in a context where the caller cannot be determined.
Therefore, the right thing to do is to throw IllegalCallerException
and document this.

webrev:
http://cr.openjdk.java.net/~dfuchs/webrev_8177136/webrev.00/

As per Rampdown Phase 2 Process [1] I'd also like to get
confirmation that this is a reasonable proposal to fix in 9.
This fix just transmutes a NullPointerException (which should
never happen at this point in regular usage of the API) into an
IllegalCallerException which will help diagnosing the fact
that the API is called from a context where it's not supposed
to be used. The risk of fixing should therefore be very limited.

best regards,

-- daniel

[1] Rampdown Phase 2 Process
http://mail.openjdk.java.net/pipermail/jdk9-dev/2017-March/005666.html

Reply via email to