Issue Details (XML | Word | Printable)

Key: MPJCOVERAGE-18
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Emmanuel Venisse
Reporter: Daniel Frey
Votes: 1
Watchers: 2
Operations

If you were logged in you would be able to see more operations.
Maven 1.x JCoverage Plugin

Inner/anonymous classes report uncomplete

Created: 26/Oct/04 04:46 PM   Updated: 08/Apr/05 08:07 PM
Component/s: None
Affects Version/s: 1.0.8
Fix Version/s: 1.1

Time Tracking:
Not Specified

File Attachments: 1. Text File JCoveragePatch.txt (3 kB)



 Description  « Hide
Since I use maven (1.0b8 or so) up to now (1.0) I observe that the JCoverage plugin does produce wrong results for inner/anonymous classes. I.e. I have got a class called ClassOne, which has an anonymouls inner class. The two classes are displayed in the coverage report as ClassOnewith 44% and ClassOne$1 with 0% tested, which is correct. The underlining reference to the html-file is in both cases the same. However, the file displays only the coverage of the inner class, the outer class does not contain any counts, red or green lines.

I doublechecked whether the coverage.xml file contains the corresponding values, which it does. So it seems to be a problem of the plugin itself.



 All   Comments   Work Log   Change History      Sort Order: Ascending order - Click to sort in descending order
Michael Heuer added a comment - 19/Jan/05 03:59 PM
I'm not smart enough to set up a development environment for maven plugins, but I believe the following changes to CoverageReport.java will do the trick:

In coverage.xml, you see

<coverage src="...
<class name="org.mydomain.MyClass$InnerClass0">
<file name="org/mydomain/MyClass.java">
<line ...
</class>
<class name="org.mydomain.MyClass$InnerClass1">
<file name="org/mydomain/MyClass.java">
<line ...
</class>
<class name="org.mydomain.MyClass">
<file name="org/mydomain/MyClass.java">
<line ...
</class>

But all three html reports are written to a file org/mydomain/MyClass.html.

At line numbers 283, 334, 357, and 367-375 in CoverageReport.java a file name based on Clazz.getName() instead of Clazz.getFile() should be created, e.g.

org/mydomain/MyClass$InnerClass0.html
org/mydomain/MyClass$InnerClass1.html
org/mydomain/MyClass.html

I'll leave the simple code fix to someone who knows how to build and deploy maven plugins.


Stephen Colebourne added a comment - 23/Jan/05 02:05 PM
PATCH to fix the problem described here which affects all inner classes.

Michael Heuer added a comment - 26/Jan/05 02:53 PM
The patch looks good, thank you Stephen.

Emmanuel Venisse added a comment - 26/Jan/05 05:23 PM
Applied. Thanks.

Julie Cowart added a comment - 05/Apr/05 06:31 PM
This fix doesn't actually appear to have been applied to CVS.

Erik Forkalsrud added a comment - 08/Apr/05 08:07 PM
I tried the patch and it works pretty well. However, the additional html files it generates don't seem to be linked from the allcallses-frame.html and package-frame.html files. I was able to fix that by using the getShortFileName() method on line 187 (CoverageReport.java) and remove the if-statement following it, so all classes get listed. I updated the patch, but I havent figured out how to put it in JIRA. (it's at http://forkalsrud.org/~erik/JCoveragePatch2.txt for now)

Also, setting up a developer environment for maven plugins turned out to be pretty simple. I did this using eclipse with these steps:

1 - File->Import... – "Checkout Projects from CVS"
2 - Select: "Create a new repository location"
3 - Enter values:
Host == cvs.apache.org
Repository Path == /home/cvspublic
User == anoncvs
Connection Type == pserver
4 - Select: User specified module name: "maven-plugins/jcoverage"
5 - Select: "Check out as project configured using the New Project Wizard"
6 - Select: "HEAD" and "Finish"
7 - Now, go though the regular eclipse project wizard.
I use MevenIde (http://mevenide.codehaus.org/) to add "Maven Nature" to
the project and cofigure all jars through the POM Synchronizer
8 - Go through steps 1-7, again, but this time, check out the module
"maven-plugins/plugin-parent"
(Also, you can "use an existing repoitory location" this time i.e. the
one you created in step 3)
9 - Right-click on CoverageReport.java and select: Team->Apply Patch...
to apply JCoveragePatch.txt
10 - Go to your eclipse workspace folder where the jcoverage plugin is,
and type "maven plugin:install" to try out your code changes.