JDependReport.java

1
package com.reallifedeveloper.maven.jdepend;
2
3
import java.io.File;
4
import java.util.Locale;
5
import java.util.ResourceBundle;
6
7
import org.apache.maven.plugins.annotations.Execute;
8
import org.apache.maven.plugins.annotations.LifecyclePhase;
9
import org.apache.maven.plugins.annotations.Mojo;
10
import org.apache.maven.plugins.annotations.Parameter;
11
import org.apache.maven.reporting.AbstractMavenReport;
12
import org.apache.maven.reporting.MavenReportException;
13
import org.checkerframework.checker.nullness.qual.Nullable;
14
15
import jdepend.xmlui.JDepend;
16
import lombok.Setter;
17
18
import com.reallifedeveloper.maven.jdepend.xml.XmlReport;
19
import com.reallifedeveloper.maven.jdepend.xml.XmlReportParser;
20
21
/**
22
 * Generates a JDepend report.
23
 *
24
 * @author RealLifeDeveloper
25
 */
26
@Mojo(name = "report", defaultPhase = LifecyclePhase.SITE)
27
@Execute(phase = LifecyclePhase.COMPILE)
28
public class JDependReport extends AbstractMavenReport {
29
30
    private static final String RESOURCE_BUNDLE_BASE_NAME = "com.reallifedeveloper.maven.jdepend.jdepend-report";
31
    private static final String OUTPUT_NAME = "jdepend-report";
32
    private static final String JDEPEND_FILE_ARGUMENT = "-file";
33
34
    /**
35
     * Directory containing the class files to analyze.
36
     */
37
    @Parameter(property = "jdepend.classesDirectory", defaultValue = "${project.build.outputDirectory}")
38
    @Setter
39
    private @Nullable File classesDirectory;
40
41
    /**
42
     * Location of the generated JDepend XML report that is used as the basis of the HTML report generated by this plugin.
43
     */
44
    @Parameter(defaultValue = "${project.build.directory}/jdepend-report.xml", readonly = true)
45
    @Setter
46
    private @Nullable File reportFile;
47
48
    /**
49
     * Skip execution of the plugin.
50
     */
51
    @Parameter(property = "jdepend.skip", defaultValue = "false")
52
    @Setter
53
    private boolean skip;
54
55
    @Override
56
    @SuppressWarnings("PMD.AvoidCatchingGenericException")
57
    protected void executeReport(Locale locale) throws MavenReportException {
58 1 1. executeReport : negated conditional → KILLED
        if (skip) {
59 1 1. executeReport : removed call to org/apache/maven/plugin/logging/Log::info → SURVIVED
            getLog().info("Skipping execution on behalf of user");
60
            return;
61
        }
62 2 1. executeReport : negated conditional → KILLED
2. executeReport : negated conditional → KILLED
        if (classesDirectory == null || reportFile == null) {
63
            throw new MavenReportException(
64
                    "Fields have not been correctly set: classesDirectory=" + classesDirectory + ", reportFile=" + reportFile);
65
        }
66
        try {
67 1 1. executeReport : removed call to org/apache/maven/plugin/logging/Log::debug → SURVIVED
            getLog().debug("Running JDepend to generate XML report: reportFile=" + reportFile + ", classesDirectory=" + classesDirectory);
68 1 1. executeReport : removed call to jdepend/xmlui/JDepend::main → SURVIVED
            JDepend.main(new String[] { JDEPEND_FILE_ARGUMENT, reportFile.getPath(), classesDirectory.getPath() });
69
            XmlReportParser xmlReportParser = new XmlReportParser();
70 1 1. executeReport : removed call to org/apache/maven/plugin/logging/Log::debug → SURVIVED
            getLog().debug("Parsing XML file into XmlReport object");
71
            XmlReport xmlReport = xmlReportParser.parse(reportFile);
72
            JDependReportRenderer reportRenderer = new JDependReportRenderer(xmlReport, getBundle(locale), getSink());
73 1 1. executeReport : removed call to org/apache/maven/plugin/logging/Log::debug → SURVIVED
            getLog().debug("Rendering HTML reportm: outputDirectory=" + outputDirectory);
74 1 1. executeReport : removed call to com/reallifedeveloper/maven/jdepend/JDependReportRenderer::render → KILLED
            reportRenderer.render();
75
        } catch (Exception e) {
76
            throw new MavenReportException("Error occurred during JDepend report generation", e);
77
        }
78
    }
79
80
    @Override
81
    public boolean canGenerateReport() throws MavenReportException {
82 4 1. canGenerateReport : negated conditional → KILLED
2. canGenerateReport : negated conditional → KILLED
3. canGenerateReport : negated conditional → KILLED
4. canGenerateReport : replaced boolean return with true for com/reallifedeveloper/maven/jdepend/JDependReport::canGenerateReport → KILLED
        return classesDirectory != null && classesDirectory.canRead() && reportFile != null;
83
    }
84
85
    @Override
86
    @SuppressWarnings("deprecation")
87
    public String getOutputName() {
88 1 1. getOutputName : replaced return value with "" for com/reallifedeveloper/maven/jdepend/JDependReport::getOutputName → KILLED
        return getOutputPath();
89
    }
90
91
    @Override
92
    public String getOutputPath() {
93 1 1. getOutputPath : replaced return value with "" for com/reallifedeveloper/maven/jdepend/JDependReport::getOutputPath → KILLED
        return OUTPUT_NAME;
94
    }
95
96
    @Override
97
    public String getName(Locale locale) {
98 1 1. getName : replaced return value with "" for com/reallifedeveloper/maven/jdepend/JDependReport::getName → KILLED
        return getBundle(locale).getString("jdepend.name");
99
    }
100
101
    @Override
102
    public String getDescription(Locale locale) {
103 1 1. getDescription : replaced return value with "" for com/reallifedeveloper/maven/jdepend/JDependReport::getDescription → KILLED
        return getBundle(locale).getString("jdepend.description");
104
    }
105
106
    @SuppressWarnings("PMD.UseProperClassLoader") // We want the class loader of this class, not the Maven code creating the report.
107
    private static ResourceBundle getBundle(Locale locale) {
108 1 1. getBundle : replaced return value with null for com/reallifedeveloper/maven/jdepend/JDependReport::getBundle → KILLED
        return ResourceBundle.getBundle(RESOURCE_BUNDLE_BASE_NAME, locale, JDependReport.class.getClassLoader());
109
    }
110
}

Mutations

58

1.1
Location : executeReport
Killed by : com.reallifedeveloper.maven.jdepend.JDependReportTest.[engine:junit-jupiter]/[class:com.reallifedeveloper.maven.jdepend.JDependReportTest]/[method:generateShouldThrowMavenReportExceptionOnNullClassesDirectory()]
negated conditional → KILLED

59

1.1
Location : executeReport
Killed by : none
removed call to org/apache/maven/plugin/logging/Log::info → SURVIVED
Covering tests

62

1.1
Location : executeReport
Killed by : com.reallifedeveloper.maven.jdepend.JDependReportTest.[engine:junit-jupiter]/[class:com.reallifedeveloper.maven.jdepend.JDependReportTest]/[method:generateShouldThrowMavenReportExceptionOnNullClassesDirectory()]
negated conditional → KILLED

2.2
Location : executeReport
Killed by : com.reallifedeveloper.maven.jdepend.JDependReportTest.[engine:junit-jupiter]/[class:com.reallifedeveloper.maven.jdepend.JDependReportTest]/[method:generateShouldThrowMavenReportExceptionOnNullReportFile()]
negated conditional → KILLED

67

1.1
Location : executeReport
Killed by : none
removed call to org/apache/maven/plugin/logging/Log::debug → SURVIVED
Covering tests

68

1.1
Location : executeReport
Killed by : none
removed call to jdepend/xmlui/JDepend::main → SURVIVED
Covering tests

70

1.1
Location : executeReport
Killed by : none
removed call to org/apache/maven/plugin/logging/Log::debug → SURVIVED
Covering tests

73

1.1
Location : executeReport
Killed by : none
removed call to org/apache/maven/plugin/logging/Log::debug → SURVIVED
Covering tests

74

1.1
Location : executeReport
Killed by : com.reallifedeveloper.maven.jdepend.JDependReportTest.[engine:junit-jupiter]/[class:com.reallifedeveloper.maven.jdepend.JDependReportTest]/[method:generateShouldCallExecuteReport()]
removed call to com/reallifedeveloper/maven/jdepend/JDependReportRenderer::render → KILLED

82

1.1
Location : canGenerateReport
Killed by : com.reallifedeveloper.maven.jdepend.JDependReportTest.[engine:junit-jupiter]/[class:com.reallifedeveloper.maven.jdepend.JDependReportTest]/[method:canGenerateShouldBeFalseIfReportFileIsNull()]
negated conditional → KILLED

2.2
Location : canGenerateReport
Killed by : com.reallifedeveloper.maven.jdepend.JDependReportTest.[engine:junit-jupiter]/[class:com.reallifedeveloper.maven.jdepend.JDependReportTest]/[method:canGenerateReportShouldBeTrueIfParametersHaveBeenCorrectlySet()]
negated conditional → KILLED

3.3
Location : canGenerateReport
Killed by : com.reallifedeveloper.maven.jdepend.JDependReportTest.[engine:junit-jupiter]/[class:com.reallifedeveloper.maven.jdepend.JDependReportTest]/[method:canGenerateReportShouldBeFalseIfClassesDirectoryIsNotReadable()]
negated conditional → KILLED

4.4
Location : canGenerateReport
Killed by : com.reallifedeveloper.maven.jdepend.JDependReportTest.[engine:junit-jupiter]/[class:com.reallifedeveloper.maven.jdepend.JDependReportTest]/[method:canGenerateShouldBeFalseIfReportFileIsNull()]
replaced boolean return with true for com/reallifedeveloper/maven/jdepend/JDependReport::canGenerateReport → KILLED

88

1.1
Location : getOutputName
Killed by : com.reallifedeveloper.maven.jdepend.JDependReportTest.[engine:junit-jupiter]/[class:com.reallifedeveloper.maven.jdepend.JDependReportTest]/[method:getOutputNameShouldReturnHardcodedName()]
replaced return value with "" for com/reallifedeveloper/maven/jdepend/JDependReport::getOutputName → KILLED

93

1.1
Location : getOutputPath
Killed by : com.reallifedeveloper.maven.jdepend.JDependReportTest.[engine:junit-jupiter]/[class:com.reallifedeveloper.maven.jdepend.JDependReportTest]/[method:getOutputNameShouldReturnHardcodedName()]
replaced return value with "" for com/reallifedeveloper/maven/jdepend/JDependReport::getOutputPath → KILLED

98

1.1
Location : getName
Killed by : com.reallifedeveloper.maven.jdepend.JDependReportTest.[engine:junit-jupiter]/[class:com.reallifedeveloper.maven.jdepend.JDependReportTest]/[method:getNameShouldReturnNameFromResourceBundle()]
replaced return value with "" for com/reallifedeveloper/maven/jdepend/JDependReport::getName → KILLED

103

1.1
Location : getDescription
Killed by : com.reallifedeveloper.maven.jdepend.JDependReportTest.[engine:junit-jupiter]/[class:com.reallifedeveloper.maven.jdepend.JDependReportTest]/[method:getDescriptionShouldReturnDescriptionFromResourceBundle()]
replaced return value with "" for com/reallifedeveloper/maven/jdepend/JDependReport::getDescription → KILLED

108

1.1
Location : getBundle
Killed by : com.reallifedeveloper.maven.jdepend.JDependReportTest.[engine:junit-jupiter]/[class:com.reallifedeveloper.maven.jdepend.JDependReportTest]/[method:getNameShouldReturnNameFromResourceBundle()]
replaced return value with null for com/reallifedeveloper/maven/jdepend/JDependReport::getBundle → KILLED

Active mutators

Tests examined


Report generated by PIT 1.20.2