Add an alternative jsl stylesheet. Thanks to James Dempsey.
git-svn-id: https://svn.apache.org/repos/asf/maven/maven-1/plugins/trunk@471752 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
867474593c
commit
e9ab8a744e
@ -172,6 +172,7 @@
|
||||
<j:set var="stylesheet" value="${plugin.resources}/pmd.jsl"/>
|
||||
</j:if>
|
||||
<echo>Converting the PMD report to xdoc ...</echo>
|
||||
<echo>Using stylesheet: ${stylesheet}</echo>
|
||||
|
||||
<doc:jsl
|
||||
input="${maven.build.dir}/pmd-raw-report.xml"
|
||||
|
||||
263
pmd/src/plugin-resources/pmd-priority.jsl
Normal file
263
pmd/src/plugin-resources/pmd-priority.jsl
Normal file
@ -0,0 +1,263 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
* ========================================================================
|
||||
*
|
||||
* Copyright 2006 The Apache Software Foundation.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* ========================================================================
|
||||
-->
|
||||
<jsl:stylesheet
|
||||
select="$doc"
|
||||
xmlns:j="jelly:core"
|
||||
xmlns:jsl="jelly:jsl"
|
||||
xmlns:util="jelly:util"
|
||||
xmlns:x="jelly:xml"
|
||||
xmlns:doc="doc"
|
||||
xmlns:maven="jelly:maven"
|
||||
xmlns="dummy"
|
||||
trim="false">
|
||||
<!-- This needs to be instantiated here to be available in the template matches -->
|
||||
<j:useBean var="mavenTool" class="org.apache.maven.util.MavenTool"/>
|
||||
<j:useBean var="htmlescape" class="org.apache.velocity.anakia.Escape"/>
|
||||
<j:useBean var="fileutil" class="org.apache.velocity.texen.util.FileUtil"/>
|
||||
<j:useBean var="pathtool" class="org.apache.maven.util.DVSLPathTool"/>
|
||||
<!-- Force the jxr plugin to be loaded - even if it's not used in the project -->
|
||||
<maven:set plugin="maven-jxr-plugin" property="foo" value="bar"/>
|
||||
<jsl:template match="pmd">
|
||||
<document>
|
||||
<properties>
|
||||
<title>PMD Results</title>
|
||||
</properties>
|
||||
<body>
|
||||
<section name="PMD Results">
|
||||
<p>
|
||||
The following document contains the results of
|
||||
<a href="http://pmd.sourceforge.net/">PMD</a>.
|
||||
</p>
|
||||
</section>
|
||||
<section name="Summary">
|
||||
<j:set var="fileCount"><x:expr select="count(file)"/></j:set>
|
||||
<j:set var="errorCount"><x:expr select="count(file/violation)"/></j:set>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Files</th>
|
||||
<th>Errors</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<doc:formatAsNumber string="${fileCount}" pattern="0"/>
|
||||
</td>
|
||||
<td>
|
||||
<j:set var="breakdown" value="" />
|
||||
<j:forEach indexVar="pri" begin="1" end="9" step="1">
|
||||
<j:set var="priCount"><x:expr select="count(file/violation[@priority=${pri}])"/></j:set>
|
||||
<j:if test="${priCount > 0}">
|
||||
<j:if test="${breakdown.length() > 0}">
|
||||
<j:set var="breakdown" value="${breakdown}, " />
|
||||
</j:if>
|
||||
<j:if test="${breakdown.length() == 0}">
|
||||
<j:set var="breakdown" value="(" />
|
||||
</j:if>
|
||||
|
||||
<j:set var="breakdown" value="${breakdown}P${pri}:${priCount}" />
|
||||
</j:if>
|
||||
</j:forEach>
|
||||
<j:set var="breakdown" value="${breakdown})" />
|
||||
<doc:formatAsNumber string="${errorCount}" pattern="0"/> ${breakdown}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</section>
|
||||
<section name="Files">
|
||||
<table>
|
||||
<tr>
|
||||
<th>Files</th>
|
||||
<th>Violations</th>
|
||||
</tr>
|
||||
<j:if test="${pom.build.sourceDirectory != null}">
|
||||
<j:set var="fullSrcDir" value="${pom.build.sourceDirectory}"/>
|
||||
<j:set var="srcDir" value="${fileutil.file(fullSrcDir).getCanonicalPath()}"/>
|
||||
<j:set var="srcDirLength" value="${srcDir.length() + 1}"/>
|
||||
</j:if>
|
||||
<j:if test="${pom.build.unitTestSourceDirectory != null}">
|
||||
<j:set var="fullTstDir" value="${pom.build.unitTestSourceDirectory}"/>
|
||||
<j:set var="tstDir" value="${fileutil.file(fullTstDir).getCanonicalPath()}"/>
|
||||
<j:set var="tstDirLength" value="${tstDir.length() + 1}"/>
|
||||
</j:if>
|
||||
<x:set var="files" select="file"/>
|
||||
<!-- x:forEach is busted -->
|
||||
<j:forEach var="file" items="${files}">
|
||||
<!-- Type coercion doesn't work in jexl. -->
|
||||
<j:set var="name" value="${file.attribute('name').getValue()}"/>
|
||||
<j:if test="${pom.build.sourceDirectory != null}">
|
||||
<j:set var="srcRelPathLen" value="${pathtool.getRelativePath(srcDir,name).length()}"/>
|
||||
<j:if test="${srcRelPathLen > 0}">
|
||||
<j:set var="name" value="${name.substring(mavenTool.toInteger(srcDirLength.toString()))}"/>
|
||||
</j:if>
|
||||
</j:if>
|
||||
<j:if test="${pom.build.unitTestSourceDirectory != null}">
|
||||
<j:set var="tstRelPathLen" value="${pathtool.getRelativePath(tstDir,name).length()}"/>
|
||||
<j:if test="${tstRelPathLen > 0}">
|
||||
<j:set var="name" value="${name.substring(mavenTool.toInteger(tstDirLength.toString()))}"/>
|
||||
</j:if>
|
||||
</j:if>
|
||||
<util:replace var="name" value="${name}" oldChar="\\" newChar="/"/>
|
||||
<!--- +1 is for the trailing slash above -->
|
||||
<j:set var="errorCount"><x:expr select="count($file/violation)"/></j:set>
|
||||
<j:if test="${errorCount != 0}">
|
||||
<tr>
|
||||
<td>
|
||||
<a href="#${name}">${name}</a>
|
||||
</td>
|
||||
<td>
|
||||
<j:set var="breakdown" value="" />
|
||||
<j:forEach indexVar="pri" begin="1" end="9" step="1">
|
||||
<j:set var="priCount"><x:expr select="count($file/violation[@priority=$pri])"/></j:set>
|
||||
<j:if test="${priCount > 0}">
|
||||
<j:if test="${breakdown.length() > 0}">
|
||||
<j:set var="breakdown" value="${breakdown}, " />
|
||||
</j:if>
|
||||
<j:if test="${breakdown.length() == 0}">
|
||||
<j:set var="breakdown" value="(" />
|
||||
</j:if>
|
||||
|
||||
<j:set var="breakdown" value="${breakdown}P${pri}:${priCount}" />
|
||||
</j:if>
|
||||
</j:forEach>
|
||||
<j:set var="breakdown" value="${breakdown})" />
|
||||
<doc:formatAsNumber string="${errorCount}" pattern="0"/> ${breakdown}
|
||||
</td>
|
||||
</tr>
|
||||
</j:if>
|
||||
</j:forEach>
|
||||
</table>
|
||||
<!-- Where documentations are generated -->
|
||||
<j:set var="docsDestDir" value="${maven.docs.dest}"/>
|
||||
<util:replace var="docsDestDir" value="${docsDestDir}" oldChar="\\" newChar="/"/>
|
||||
<!-- JXR is activated ? -->
|
||||
<j:set var="jxrActivated" value="false"/>
|
||||
<j:forEach var="report" items="${pom.reports}">
|
||||
<j:if test="${report.equals('maven-jxr-plugin')}">
|
||||
<j:set var="jxrActivated" value="true"/>
|
||||
</j:if>
|
||||
</j:forEach>
|
||||
<!-- I don't think this test is useful but .... in the case of.. -->
|
||||
<j:if test="${pom.build.sourceDirectory != null}">
|
||||
<!-- Where JXR files are generated for the code -->
|
||||
<j:set var="jxrDestDir" value="${maven.jxr.destdir}"/>
|
||||
<util:replace var="jxrDestDir" value="${jxrDestDir}" oldChar="\\" newChar="/"/>
|
||||
<j:choose>
|
||||
<j:when test="${jxrActivated and jxrDestDir.startsWith(docsDestDir)}">
|
||||
<!-- We create a relative path to the jxr files -->
|
||||
<!-- ${maven.jxr.destdir} should be a subdirectory of ${maven.docs.dest} -->
|
||||
<j:set var="jxrDestDir" value="${jxrDestDir.substring(docsDestDir.length(),jxrDestDir.length())}"/>
|
||||
<!-- remove first slash if needed -->
|
||||
<j:if test="${jxrDestDir.startsWith('/')}">
|
||||
<j:set var="jxrDestDir" value="${jxrDestDir.substring(1,jxrDestDir.length())}"/>
|
||||
</j:if>
|
||||
</j:when>
|
||||
<j:otherwise>
|
||||
<!-- Do not generate the link -->
|
||||
<j:set var="jxrDestDir" value=""/>
|
||||
</j:otherwise>
|
||||
</j:choose>
|
||||
</j:if>
|
||||
<j:if test="${pom.build.unitTestSourceDirectory != null}">
|
||||
<!-- Where JXR files are generated for the tests -->
|
||||
<j:set var="jxrTestDestDir" value="${maven.jxr.destdir.test}"/>
|
||||
<util:replace var="jxrTestDestDir" value="${jxrTestDestDir}" oldChar="\\" newChar="/"/>
|
||||
<maven:get var="xrefGeneratedForTests" plugin="maven-jxr-plugin" property="maven.jxr.include.testXref"/>
|
||||
<j:choose>
|
||||
<j:when test="${jxrActivated and xrefGeneratedForTests and jxrTestDestDir.startsWith(docsDestDir)}">
|
||||
<!-- We create a relative path to the jxr files for tests -->
|
||||
<!-- ${maven.jxr.destdir.test} should be a subdirectory of ${maven.docs.dest} -->
|
||||
<j:set var="jxrTestDestDir" value="${jxrTestDestDir.substring(docsDestDir.length(),jxrTestDestDir.length())}"/>
|
||||
<!-- remove first slash if needed -->
|
||||
<j:if test="${jxrTestDestDir.startsWith('/')}">
|
||||
<j:set var="jxrTestDestDir" value="${jxrTestDestDir.substring(1,jxrTestDestDir.length())}"/>
|
||||
</j:if>
|
||||
</j:when>
|
||||
<j:otherwise>
|
||||
<!-- Do not generate the link -->
|
||||
<j:set var="jxrTestDestDir" value=""/>
|
||||
</j:otherwise>
|
||||
</j:choose>
|
||||
</j:if>
|
||||
<j:forEach var="file" items="${files}">
|
||||
<x:set var="errorCount" select="count($file/violation)"/>
|
||||
<j:if test="${errorCount != 0}">
|
||||
<j:set var="name" value="${file.attribute('name').getValue()}"/>
|
||||
<j:set var="jxrPath" value=""/>
|
||||
<j:if test="${pom.build.sourceDirectory != null}">
|
||||
<j:set var="srcRelPathLen" value="${pathtool.getRelativePath(srcDir,name).length()}"/>
|
||||
<j:if test="${srcRelPathLen > 0}">
|
||||
<j:set var="name" value="${name.substring(mavenTool.toInteger(srcDirLength.toString()))}"/>
|
||||
<j:set var="jxrPath" value="${jxrDestDir}"/>
|
||||
</j:if>
|
||||
</j:if>
|
||||
<j:if test="${pom.build.unitTestSourceDirectory != null}">
|
||||
<j:set var="tstRelPathLen" value="${pathtool.getRelativePath(tstDir,name).length()}"/>
|
||||
<j:if test="${tstRelPathLen > 0}">
|
||||
<j:set var="name" value="${name.substring(mavenTool.toInteger(tstDirLength.toString()))}"/>
|
||||
<j:set var="jxrPath" value="${jxrTestDestDir}"/>
|
||||
</j:if>
|
||||
</j:if>
|
||||
<util:replace var="name" value="${name}" oldChar="\\" newChar="/"/>
|
||||
<subsection name="${name}">
|
||||
<table>
|
||||
<tr>
|
||||
<th>Pri</th>
|
||||
<th>Violation</th>
|
||||
<th>Line</th>
|
||||
</tr>
|
||||
<x:set var="errors" select="$file/violation" sort="@priority"/>
|
||||
<j:forEach var="error" items="${errors}">
|
||||
<tr>
|
||||
<td>
|
||||
<j:set var="priority" value="${error.attribute('priority').getValue()}"/>
|
||||
${priority}
|
||||
</td>
|
||||
<td>
|
||||
<j:set var="externalInfoUrl" value="${error.attribute('externalInfoUrl').getValue()}"/>
|
||||
<j:set var="errorMessage" value="${error.StringValue}"/>
|
||||
${htmlescape.getText(errorMessage)} - <a href="${externalInfoUrl}" target="_blank">details...</a>
|
||||
</td>
|
||||
<td>
|
||||
<j:set var="line" value="${error.attribute('line').getValue()}"/>
|
||||
<j:set var="lastIndex" value="${name.lastIndexOf('.java')}"/>
|
||||
<j:set var="jxrPathLen" value="${jxrPath.length()}"/>
|
||||
<j:choose>
|
||||
<j:when test="${lastIndex > 0 and jxrPathLen > 0}">
|
||||
<j:set var="index" value="${mavenTool.toInteger(lastIndex.toString())}"/>
|
||||
<j:set var="nameWithoutJavaExtension" value="${name.substring(0, index)}"/>
|
||||
<util:replace var="nameWithoutJavaExtension" value="${nameWithoutJavaExtension}" oldChar="\\" newChar="/"/>
|
||||
<a href="${jxrPath}/${nameWithoutJavaExtension}.html#${line}">${line}</a>
|
||||
</j:when>
|
||||
<j:otherwise>
|
||||
${line}
|
||||
</j:otherwise>
|
||||
</j:choose>
|
||||
</td>
|
||||
</tr>
|
||||
</j:forEach>
|
||||
</table>
|
||||
</subsection>
|
||||
</j:if>
|
||||
</j:forEach>
|
||||
</section>
|
||||
</body>
|
||||
</document>
|
||||
</jsl:template>
|
||||
</jsl:stylesheet>
|
||||
@ -25,6 +25,7 @@
|
||||
</properties>
|
||||
<body>
|
||||
<release version="1.10-SNAPSHOT" date="In SVN">
|
||||
<action dev="ltheussl" type="add" due-to="James Dempsey">Add an alternative jsl stylesheet that includes priority information.</action>
|
||||
<action dev="ltheussl" type="add" issue="MPPMD-27">Allow custom JSL stylesheet to be defined via a property.</action>
|
||||
<action dev="aheritier" type="update">Update dependencies to unify them between plugins. The following dependencies are updated : jaxen v1.0-FCS-full to 1.1-beta-9. The following dependencies are removed : saxpath.</action>
|
||||
<action dev="aheritier" type="update">Upgrade to pmd-3.7.</action>
|
||||
|
||||
@ -128,6 +128,9 @@
|
||||
<td>
|
||||
A custom stylesheet to use for the report.
|
||||
Default is <code>${plugin.resources}/pmd.jsl</code>.
|
||||
An alternative stylesheet is supplied that includes
|
||||
priority information of pmd violations. To use it, set
|
||||
<code>maven.pmd.stylesheet=${plugin.resources}/pmd-priority.jsl</code>.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user