From the JaCoCo developer wiki pages, these are the filters that have been implemented...
JAVAC.SYNTHMETH - synthetic methods
JAVAC.SYNC - release lock code in synchronized statements
JAVAC.FINALLY - finally block emitted multiple times
JAVAC.ENUM - static methods and initializer generated for enum types
JAVAC.TRYWITH - extra exception handlers installed to close resources in try-with-resources statements
JAVAC.STRINGSWITCH - extra branches due to implementation with hashcode and equals comparison
empty constructor without parameters in enum - Done in 0.8.1
Private empty constructors that do not have arguments
JAVAC.SYNC - release lock code in synchronized statements
JAVAC.FINALLY - finally block emitted multiple times
JAVAC.ENUM - static methods and initializer generated for enum types
JAVAC.TRYWITH - extra exception handlers installed to close resources in try-with-resources statements
JAVAC.STRINGSWITCH - extra branches due to implementation with hashcode and equals comparison
empty constructor without parameters in enum - Done in 0.8.1
Private empty constructors that do not have arguments
So what does that mean practically? Well, I've taken a closer look at one particular instance within the code base I'm working on - one of the Enum classes. With the older version of JaCoCo the coverage looked like this...
The values() and valueOf() methods had zero coverage. These methods were not part of the source code that was written so of course they weren't tested. Switching to the new JaCoCo plugin changed the coverage report to exclude these synthetic methods...
An 11% improvement in code coverage! Not bad for not doing anything. Of course this didn't mean that the code was better tested, it simply meant that any methods that didn't need testing were not reported on.
In terms of the whole code base, code coverage went up by 3%. It's important to note that the number of total counted instructions and branches has reduced with the new version of JaCoCo - again this is because anything that doesn't need testing is not reported on. The code itself has not changed.
Here are some more detailed reports on the whole code base for one of the modules I was running this on. Before JaCoCo...
After JaCoCo...
This is a great improvement to JaCoCo simply because now we don't have to focus on writing those 'fake tests' to increase code coverage just because the reporting tool wasn't smart enough to filter out noise. Hopefully the rest of the filters are implemented soon and JaCoCo becomes even more robust.
If you use JaCoCo with PowerMock you may find this article useful - JaCoCo reports missing code coverage for tests using PowerMock.
-i