[Checkers] Short JavaCOP evaluation

Mahmood Ali mahmood at MIT.EDU
Wed Apr 23 21:40:06 EDT 2008

Hi guys,

I have been playing with the distributed JavaCOP tool and the nonnull  
rules.  Here is my evaluation of the system as user (I haven't looked  
at the implementation nor the complexity of the rules).

- The JavaCOP page, unfortunately the second page in Google, provides  
simple information for downloading the tool and getting it to run.
- The documentation of the page is quite limited, without any  
reference.  The user is faced with four binary deliverables without  
much explanation.
- I could not find any promises nor explanation of what the examples  
actual do.
- There is a limited API to the trees, without any documentations.
- The paper serves as a guide to how one can write rules for JavaCOP.   
I have not read it.
- The page shows no progress whatsoever.  The only dating I can see is  
a message to the mailing list in the end of October.

- Installation has been quite smooth more me.  I simply downloaded the  
executables as the tutorial indicated, and launched JavaCOP NonNull  
- I particularly liked the ability to not compile the source, and  
being able to use -cp.

JavaCOP system:
- The compiler is based on barebone java 1.7, without support for  
JSR308.  Thus one can only annotate JSR175.  In other words, one  
cannot annotate method parameters, receivers, nor generics.
- While there might be some way to specify annotations on such things  
(through comments or remote annotations), it is not documented.
- The system relies on the Javac internal API rather than the public  
API.  It made some issues easier and more efficient.
- The JavaCop rule file can link to Java code that actually do anything.

NonNull Checker:
- The NonNull checker supports three annotations: Nonnull, Raw,  
RawThis.  However, I honestly don't what Raw and RawThis semantics  
are.  They are not documented, nor are there any annotated examples.
- NonNull here is not a full type system, nor does it provide inter- 
procedural analysis.  It does no provide any method invocation tests,  
method overriding tests, etc.
- The nonnull inference is probably as as good as ours.  It inferred  
nullability properly in complex conditions relying on short-circuiting  
in Java (e.g. (v == null || v.toString() == null) or (v == null &&  
v.toString() == null).
- Generic support is limited if existent.  Not only cannot you  
annotate generics, it does not try to infer anything regarding it. For  
example, it does it do anything regarding: if (ls.get(0) != null)  
{ ls.get(0).toString() }
- It didn't check that the expression in enhanced for loop is nonnull  
(i.e. didn't check that 'list' is nonnull in 'for (Object o : ls)  
{ }').  When browsing the rule file for NonNull, I noticed a rule to  
address for-each statements, but I guess it's buggy.
- Doesn't warn against redundant checks (that could easily be done  
though I assume).
I will write some tests for nonnull checker regarding the for loop and  
the catch clause.

Needless to say that we are way ahead of JavaCOP in terms of  


More information about the checkers mailing list