RFR (S) 8073550 : java* tools: replace obj.getClass hacks with Assert.checkNonNull or Objects.requireNonNull

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Mon Feb 23 13:29:53 UTC 2015


Hi Aleksey,
I did a build/test run on your patch and we have 5 langtools regression 
failures - they seem to be caused by the fact that there is some 
infrastructure in either the tests or in the file manager hierarchy 
itself which assign special semantics to NPEs, so when you replace them 
with something else (AssertionError), those tests stop working.

Here are the failing tests:

Execution failed: `main' threw exception: java.lang.AssertionError

     tools/javac/T6351767.java: 
javax.tools.JavaCompilerTool.getStandardFileManager().list() treats 
directories as package
     tools/javac/api/6410643/T6410643.java: JSR 199: The method 
JavaCompilerTool.run fails to handle null arguments
     tools/javac/api/T6400205.java: getClassLoader(location) returns 
null if getLocation(location) returns null
     tools/javac/api/T6400207.java: JSR 199: JavaFileManager.list and 
unset location

Execution failed: `main' threw exception: 
java.lang.reflect.InvocationTargetException

     tools/javadoc/api/basic/GetTask_OptionsTest.java: javadoc should 
have a javax.tools.Tool service provider


Most of the failing tests show the following stack trace:

java.lang.AssertionError
	at com.sun.tools.javac.util.Assert.error(Assert.java:125)
	at com.sun.tools.javac.util.Assert.checkNonNull(Assert.java:60)
*	at com.sun.tools.javac.util.BaseFileManager.nullCheck(BaseFileManager.java:434)*
	at com.sun.tools.javac.file.JavacFileManager.list(JavacFileManager.java:670)
	at T6351767.main(T6351767.java:45)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.sun.javatest.regtest.MainAction$SameVMRunnable.run(MainAction.java:776)
	at java.lang.Thread.run(Thread.java:745)


I'm deferring this to Jon as his expertize on this area is much greater 
than mine. My feeling is that those are public facing methods, whose 
spec say that an NPE should occur in certain cases, so either we leave 
the code as is, or we replace it with Objects.requireNonNull (which 
correctly throws an NPE). Jon, what do you think?

Maurizio

On 22/02/15 21:22, Maurizio Cimadamore wrote:
> Looks great - thanks, I will push it for you.
>
> Maurizio
>
> On 20/02/15 14:40, Aleksey Shipilev wrote:
>> Hi,
>>
>> Please review and sponsor the cleanup in langtools code:
>>    https://bugs.openjdk.java.net/browse/JDK-8073550
>>    http://cr.openjdk.java.net/~shade/8073550/webrev.01/
>>
>> It replaces the getClass "hacks" with either proper Asserts, or
>> Objects.requireNonNull if Asserts are not available over the module
>> boundaries.
>>
>> Thanks,
>> -Aleksey.
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20150223/e011a99e/attachment.html>


More information about the compiler-dev mailing list