Details

    • Type: Bug Bug
    • Status: Closed Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.0.8
    • Fix Version/s: 1.1
    • Labels:
      None
    • Number of attachments :
      1

      Description

      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.

        Activity

        Hide
        Michael Heuer added a comment -

        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.

        Show
        Michael Heuer added a comment - 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.
        Hide
        Stephen Colebourne added a comment -

        PATCH to fix the problem described here which affects all inner classes.

        Show
        Stephen Colebourne added a comment - PATCH to fix the problem described here which affects all inner classes.
        Hide
        Michael Heuer added a comment -

        The patch looks good, thank you Stephen.

        Show
        Michael Heuer added a comment - The patch looks good, thank you Stephen.
        Hide
        Emmanuel Venisse added a comment -

        Applied. Thanks.

        Show
        Emmanuel Venisse added a comment - Applied. Thanks.
        Hide
        Julie Cowart added a comment -

        This fix doesn't actually appear to have been applied to CVS.

        Show
        Julie Cowart added a comment - This fix doesn't actually appear to have been applied to CVS.
        Hide
        Erik Forkalsrud added a comment -

        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.

        Show
        Erik Forkalsrud added a comment - 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.

          People

          • Assignee:
            Emmanuel Venisse
            Reporter:
            Daniel Frey
          • Votes:
            1 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: