MPJAVADOC-35 : Add javadoc warning report formatted similar to Checkstyle report
TODO : Add a plugin test case git-svn-id: https://svn.apache.org/repos/asf/maven/maven-1/plugins/trunk@115988 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -51,12 +51,16 @@
|
||||
maven.compile.encoding = [${maven.compile.encoding}]
|
||||
maven.compile.src.set = [${context.getAntProject().getReferences().get('maven.compile.src.set')}]
|
||||
==================================
|
||||
=== docs properties ===
|
||||
==================================
|
||||
maven.docs.outputencoding = [${maven.docs.outputencoding}]
|
||||
==================================
|
||||
=== javadoc plugin properties ===
|
||||
==================================
|
||||
maven.javadoc.additionalparam = [${maven.javadoc.additionalparam}]
|
||||
maven.javadoc.author = [${maven.javadoc.author}]
|
||||
maven.javadoc.customtags = [${maven.javadoc.customtags}]
|
||||
maven.javadoc.bottom = [${maven.javadoc.bottom}]
|
||||
maven.javadoc.bottom = [${maven.javadoc.bottom}]
|
||||
maven.javadoc.debug = [${maven.javadoc.debug}]
|
||||
maven.javadoc.destdir = [${maven.javadoc.destdir}]
|
||||
maven.javadoc.doclet = [${maven.javadoc.doclet}]
|
||||
@@ -180,6 +184,11 @@ internal.javadoc.working.dir = [${internal.javadoc.working.dir}]
|
||||
</j:if>
|
||||
|
||||
</define:tag>
|
||||
<define:jellybean
|
||||
name="javadocwarnings"
|
||||
className="org.apache.maven.javadoc.JavadocWarningsTextToXml"
|
||||
method="build"
|
||||
/>
|
||||
</define:taglib>
|
||||
|
||||
|
||||
@@ -205,6 +214,12 @@ internal.javadoc.working.dir = [${internal.javadoc.working.dir}]
|
||||
link="javadoc"
|
||||
description="Report on the generation of JavaDoc."
|
||||
/>
|
||||
<doc:registerReport
|
||||
name="JavaDoc Warnings Report"
|
||||
pluginName=""
|
||||
link="javadoc-warnings-report"
|
||||
description="Formatted report of JavaDoc warnings."
|
||||
/>
|
||||
</j:if>
|
||||
</goal>
|
||||
|
||||
@@ -216,6 +231,7 @@ internal.javadoc.working.dir = [${internal.javadoc.working.dir}]
|
||||
|
||||
<doc:deregisterReport name="JavaDocs"/>
|
||||
<doc:deregisterReport name="JavaDoc Report"/>
|
||||
<doc:deregisterReport name="JavaDoc Warnings Report"/>
|
||||
|
||||
</j:if>
|
||||
</goal>
|
||||
@@ -438,6 +454,21 @@ internal.javadoc.working.dir = [${internal.javadoc.working.dir}]
|
||||
section="Javadoc Report"
|
||||
inputText="${inputText}"
|
||||
output="${genDocs}/javadoc.xml"/>
|
||||
|
||||
<javadoc:javadocwarnings
|
||||
verbose="${maven.javadoc.debug}"
|
||||
inputFileName="${internal.javadoc.working.dir}/report.txt"
|
||||
outputFileName="${internal.javadoc.working.dir}/javadoc-warnings.xml"
|
||||
outputEncoding="${maven.docs.outputencoding}"
|
||||
/>
|
||||
<doc:jsl
|
||||
input="${internal.javadoc.working.dir}/javadoc-warnings.xml"
|
||||
output="javadoc-warnings-report.xml"
|
||||
stylesheet="${plugin.resources}/javadoc-warnings.jsl"
|
||||
encoding="${maven.docs.outputencoding}"
|
||||
outputMode="xml"
|
||||
prettyPrint="true"
|
||||
/>
|
||||
|
||||
<ant:delete dir="${internal.javadoc.src.tmp}"/>
|
||||
|
||||
|
||||
@@ -51,4 +51,4 @@ maven.javadoc.stylesheet = ${plugin.resources}/stylesheet.css
|
||||
maven.javadoc.use = true
|
||||
maven.javadoc.useexternalfile = yes
|
||||
maven.javadoc.version = true
|
||||
maven.javadoc.windowtitle = ${pom.name} ${pom.currentVersion} API
|
||||
maven.javadoc.windowtitle = ${pom.name} ${pom.currentVersion} API
|
||||
|
||||
20
javadoc/project.properties
Normal file
20
javadoc/project.properties
Normal file
@@ -0,0 +1,20 @@
|
||||
# -------------------------------------------------------------------
|
||||
# Copyright 2001-2004 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.
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# P R O J E C T P R O P E R T I E S
|
||||
# -------------------------------------------------------------------
|
||||
maven.junit.fork=yes
|
||||
@@ -124,4 +124,36 @@
|
||||
<version>2.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<sourceDirectory>src/main</sourceDirectory>
|
||||
<unitTestSourceDirectory>src/test</unitTestSourceDirectory>
|
||||
<unitTest>
|
||||
<includes>
|
||||
<include>**/*Test.java</include>
|
||||
</includes>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/test</directory>
|
||||
<includes>
|
||||
<include>**/*.txt</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
</unitTest>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>${basedir}/src/plugin-resources</directory>
|
||||
<targetPath>plugin-resources</targetPath>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>${basedir}</directory>
|
||||
<includes>
|
||||
<include>plugin.jelly</include>
|
||||
<include>plugin.properties</include>
|
||||
<include>project.properties</include>
|
||||
<include>project.xml</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
</build>
|
||||
</project>
|
||||
|
||||
@@ -0,0 +1,399 @@
|
||||
package org.apache.maven.javadoc;
|
||||
|
||||
/* ====================================================================
|
||||
* Copyright 2001-2004 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.
|
||||
* ====================================================================
|
||||
*/
|
||||
|
||||
import org.apache.commons.lang.StringEscapeUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
|
||||
|
||||
/**
|
||||
* Converts the javadoc warnings into an xml (xdoc format) file.
|
||||
*
|
||||
* @author Steven Caswell (stevencaswell at apache.org)
|
||||
* @version $Id: JavadocWarningsTextToXml.java,v 1.1 2004/08/21 18:42:04 aheritier Exp $
|
||||
*/
|
||||
public class JavadocWarningsTextToXml {
|
||||
//~ Static fields/initializers ----------------------------------------------
|
||||
|
||||
/** Number of args on the command line.*/
|
||||
private static final int ARGS_LENGTH = 3;
|
||||
|
||||
/** XML padding. */
|
||||
private static final int PADDING = 10;
|
||||
|
||||
//~ Instance fields ---------------------------------------------------------
|
||||
|
||||
/** Full path for the input file (javadoc plain text report). */
|
||||
private String inputFileName;
|
||||
|
||||
/** XML encoding. */
|
||||
private String outputEncoding;
|
||||
|
||||
/** Full path for the generated XDoc file. */
|
||||
private String outputFileName;
|
||||
|
||||
/** Verbose flag. */
|
||||
private boolean verbose = false;
|
||||
|
||||
//~ Methods -----------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Invokes an instance of <code>JavadocWarningsTextToXml</code> from the
|
||||
* command line. The following command line arguments are expected in this
|
||||
* order:
|
||||
*
|
||||
* <ol>
|
||||
* <li>
|
||||
* input file name
|
||||
* </li>
|
||||
* <li>
|
||||
* output file name
|
||||
* </li>
|
||||
* <li>
|
||||
* output encoding
|
||||
* </li>
|
||||
* </ol>
|
||||
*
|
||||
*
|
||||
* @param args the command line arguments
|
||||
*
|
||||
* @throws IOException if an exception occurs opening, reading, or writing
|
||||
* files
|
||||
* @throws IllegalArgumentException if arguments aren't correctly setted.
|
||||
*/
|
||||
public static void main(final String[] args)
|
||||
throws IOException {
|
||||
if (args.length != ARGS_LENGTH) {
|
||||
throw new IllegalArgumentException("Wrong number of arguments");
|
||||
}
|
||||
|
||||
JavadocWarningsTextToXml runner = new JavadocWarningsTextToXml();
|
||||
int i = 0;
|
||||
runner.setInputFileName(args[i++]);
|
||||
runner.setOutputFileName(args[i++]);
|
||||
runner.setOutputEncoding(args[i++]);
|
||||
runner.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the name of the input file. This file is expected to be a report
|
||||
* generated by Javadoc.
|
||||
*
|
||||
* @param inputFileName the input file name
|
||||
*/
|
||||
public void setInputFileName(final String inputFileName) {
|
||||
if (this.isVerbose()) {
|
||||
System.out.println("Setting input file name: '" + inputFileName + "'");
|
||||
}
|
||||
|
||||
this.inputFileName = inputFileName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the input file.
|
||||
*
|
||||
* @return the inptu file name
|
||||
*/
|
||||
public String getInputFileName() {
|
||||
return this.inputFileName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the output encoding.
|
||||
*
|
||||
* @param outputEncoding the output encoding
|
||||
*/
|
||||
public void setOutputEncoding(final String outputEncoding) {
|
||||
this.outputEncoding = outputEncoding;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the output encoding.
|
||||
*
|
||||
* @return the output encoding
|
||||
*/
|
||||
public String getOutputEncoding() {
|
||||
return this.outputEncoding;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the output file name.
|
||||
*
|
||||
* @param outputFileName the output file name
|
||||
*/
|
||||
public void setOutputFileName(final String outputFileName) {
|
||||
if (this.isVerbose()) {
|
||||
System.out.println("Setting output file name: '" + outputFileName + "'");
|
||||
}
|
||||
|
||||
this.outputFileName = outputFileName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the output file.
|
||||
*
|
||||
* @return the output file name
|
||||
*/
|
||||
public String getOutputFileName() {
|
||||
return this.outputFileName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the verbose mode. <br>
|
||||
*
|
||||
* @param verbose the verbose mode.
|
||||
*/
|
||||
public void setVerbose(final boolean verbose) {
|
||||
this.verbose = verbose;
|
||||
|
||||
if (this.isVerbose()) {
|
||||
System.out.println("verbose is true");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the xml file from the javadoc report input.
|
||||
*
|
||||
* @throws FileNotFoundException if the input file cannot be opened for
|
||||
* reading or the output file cannot be opened for writing
|
||||
* @throws IOException if an error occurs reading or writing
|
||||
* @throws UnsupportedEncodingException if an unknown encoding was specified
|
||||
* @throws IllegalArgumentException If a needed property isn't setted.
|
||||
*/
|
||||
public void build()
|
||||
throws FileNotFoundException,
|
||||
IOException,
|
||||
UnsupportedEncodingException {
|
||||
if (StringUtils.isBlank(getInputFileName())) {
|
||||
throw new IllegalArgumentException("Input file name must be specified");
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(getOutputFileName())) {
|
||||
throw new IllegalArgumentException("Output file name must be specified");
|
||||
}
|
||||
|
||||
String[] lines = this.readInput();
|
||||
Map fileMap = this.buildMap(lines);
|
||||
this.buildOutput(fileMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the verbose.
|
||||
*
|
||||
* @return Returns the verbose.
|
||||
*/
|
||||
public boolean isVerbose() {
|
||||
return verbose;
|
||||
}
|
||||
|
||||
private Map buildMap(final String[] input) {
|
||||
if (this.isVerbose()) {
|
||||
System.out.println(
|
||||
"Building map from " + input.length + " input line(s)"
|
||||
);
|
||||
}
|
||||
|
||||
Map files = new TreeMap();
|
||||
|
||||
for (int i = 0; i < input.length; i++) {
|
||||
String line = input[i];
|
||||
|
||||
// Break up line into pieces
|
||||
int javaDocStart = line.indexOf("[javadoc]");
|
||||
int fileNameStart = javaDocStart += PADDING;
|
||||
int warningStart = line.indexOf("warning - ");
|
||||
int fileNameEnd = warningStart - 1;
|
||||
String fileNameAndLineNumber =
|
||||
line.substring(
|
||||
fileNameStart,
|
||||
fileNameEnd
|
||||
);
|
||||
int lastColon = fileNameAndLineNumber.lastIndexOf(':');
|
||||
int nextToLastColon =
|
||||
fileNameAndLineNumber.lastIndexOf(
|
||||
':',
|
||||
lastColon - 1
|
||||
);
|
||||
String fileName = fileNameAndLineNumber.substring(
|
||||
0,
|
||||
nextToLastColon
|
||||
);
|
||||
String lineNumber =
|
||||
fileNameAndLineNumber.substring(
|
||||
nextToLastColon + 1,
|
||||
lastColon
|
||||
);
|
||||
int msgStart = warningStart + PADDING;
|
||||
String msg = line.substring(msgStart);
|
||||
|
||||
// Get the messages for the file
|
||||
Map fileMessages = (Map) files.get(fileName);
|
||||
|
||||
if (fileMessages == null) {
|
||||
fileMessages = new TreeMap();
|
||||
files.put(
|
||||
fileName,
|
||||
fileMessages
|
||||
);
|
||||
}
|
||||
|
||||
// Get the messages for the line
|
||||
Set lineMessages = (Set) fileMessages.get(new Integer(lineNumber));
|
||||
|
||||
if (lineMessages == null) {
|
||||
lineMessages = new LinkedHashSet();
|
||||
fileMessages.put(
|
||||
new Integer(lineNumber),
|
||||
lineMessages
|
||||
);
|
||||
}
|
||||
|
||||
// Put the message into the line messages set
|
||||
lineMessages.add(msg);
|
||||
}
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
private void buildOutput(final Map fileMap)
|
||||
throws FileNotFoundException,
|
||||
UnsupportedEncodingException {
|
||||
File output = new File(this.outputFileName);
|
||||
File dir = output.getParentFile();
|
||||
|
||||
if (dir != null) {
|
||||
dir.mkdirs();
|
||||
}
|
||||
|
||||
PrintWriter out =
|
||||
new PrintWriter(
|
||||
new OutputStreamWriter(
|
||||
new FileOutputStream(output),
|
||||
this.getOutputEncoding()
|
||||
)
|
||||
);
|
||||
writeOutput(
|
||||
fileMap,
|
||||
out
|
||||
);
|
||||
out.flush();
|
||||
out.close();
|
||||
}
|
||||
|
||||
private String[] readInput()
|
||||
throws FileNotFoundException,
|
||||
IOException {
|
||||
if (this.isVerbose()) {
|
||||
System.out.println("Reading '" + getInputFileName() + "'");
|
||||
}
|
||||
|
||||
BufferedReader reader =
|
||||
new BufferedReader(new FileReader(getInputFileName()));
|
||||
|
||||
List lines = new ArrayList();
|
||||
String line = null;
|
||||
|
||||
while ((line = reader.readLine()) != null) {
|
||||
// Look for lines containing the string "warning - "
|
||||
if (line.indexOf("warning - ") >= 0) {
|
||||
lines.add(line);
|
||||
}
|
||||
}
|
||||
|
||||
reader.close();
|
||||
|
||||
if (this.isVerbose()) {
|
||||
System.out.println("Read " + lines.size() + " line(s) from input file");
|
||||
}
|
||||
|
||||
return (String[]) lines.toArray(new String[lines.size()]);
|
||||
}
|
||||
|
||||
private void writeOutput(
|
||||
final Map fileMap,
|
||||
final PrintWriter out
|
||||
) {
|
||||
if (this.isVerbose()) {
|
||||
System.out.println("Writing to output file '" + this.outputFileName);
|
||||
}
|
||||
|
||||
out.println(
|
||||
"<?xml version=\"1.0\" encoding=\"" + this.getOutputEncoding() + "\"?>"
|
||||
);
|
||||
out.println("<javadoc>");
|
||||
|
||||
for (
|
||||
Iterator fileMapIterator = fileMap.keySet()
|
||||
.iterator();
|
||||
fileMapIterator.hasNext();
|
||||
) {
|
||||
String fileName = (String) fileMapIterator.next();
|
||||
out.println("<file name=\"" + fileName + "\">");
|
||||
|
||||
Map fileMessages = (Map) fileMap.get(fileName);
|
||||
|
||||
for (
|
||||
Iterator fileMessagesIterator = fileMessages.entrySet()
|
||||
.iterator();
|
||||
fileMessagesIterator.hasNext();
|
||||
) {
|
||||
Map.Entry entry = (Map.Entry) fileMessagesIterator.next();
|
||||
Integer lineNumber = (Integer) entry.getKey();
|
||||
Set lineMessages = (Set) entry.getValue();
|
||||
|
||||
for (
|
||||
Iterator lineMessagesIterator = lineMessages.iterator();
|
||||
lineMessagesIterator.hasNext();
|
||||
) {
|
||||
String msg = (String) lineMessagesIterator.next();
|
||||
out.println(
|
||||
"<error line=\"" + lineNumber
|
||||
+ "\" severity=\"warning\" message=\""
|
||||
+ StringEscapeUtils.escapeXml(msg) + "\"/>"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
out.println("</file>");
|
||||
}
|
||||
|
||||
out.println("</javadoc>");
|
||||
|
||||
if (this.isVerbose()) {
|
||||
System.out.println("Finished writing output file");
|
||||
}
|
||||
}
|
||||
}
|
||||
142
javadoc/src/plugin-resources/javadoc-warnings.jsl
Normal file
142
javadoc/src/plugin-resources/javadoc-warnings.jsl
Normal file
@@ -0,0 +1,142 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<!--
|
||||
* ========================================================================
|
||||
*
|
||||
* Copyright 2004 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="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"/>
|
||||
|
||||
<jsl:template match="javadoc">
|
||||
<document>
|
||||
|
||||
<properties>
|
||||
<title>JavaDoc Audit Results</title>
|
||||
</properties>
|
||||
|
||||
<body>
|
||||
<section name="JavaDoc Warnings">
|
||||
<p>
|
||||
The following document contains JavaDoc warnings.
|
||||
</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/error)"/></j:set>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Files</th>
|
||||
<th width="75">Errors</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><doc:formatAsNumber string="${fileCount}" pattern="0"/></td>
|
||||
<td><doc:formatAsNumber string="${errorCount}" pattern="0"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
</section>
|
||||
|
||||
<section name="Files">
|
||||
<table>
|
||||
<tr>
|
||||
<th>Files</th>
|
||||
<th width="75">Errors</th>
|
||||
</tr>
|
||||
<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}"/>
|
||||
<x:set var="files" select="file" sort="@name"/>
|
||||
<!-- x:forEach is busted -->
|
||||
<j:forEach var="file" items="${files}">
|
||||
<!-- Type coercion doesn't work very well in jexl. -->
|
||||
<j:set var="name" value="${file.attribute('name').getValue()}"/>
|
||||
<j:set var="name" value="${name.substring(mavenTool.toInteger(srcDirLength.toString()))}"/>
|
||||
<util:replace var="name" value="${name}" oldChar="\\" newChar="/"/>
|
||||
<!--- +1 is for the trailing slash above -->
|
||||
<j:set var="errorCount"><x:expr select="count($file/error)"/></j:set>
|
||||
|
||||
<j:if test="${errorCount != 0}">
|
||||
<tr>
|
||||
<td>
|
||||
<a href="#${name}">${name}</a>
|
||||
</td>
|
||||
<td><doc:formatAsNumber string="${errorCount}" pattern="0"/></td>
|
||||
</tr>
|
||||
</j:if>
|
||||
</j:forEach>
|
||||
</table>
|
||||
|
||||
<j:forEach var="file" items="${files}">
|
||||
<x:set var="errorCount" select="count($file/error)"/>
|
||||
<j:if test="${errorCount != 0}">
|
||||
<j:set var="name" value="${file.attribute('name').getValue()}"/>
|
||||
<j:set var="name" value="${name.substring(mavenTool.toInteger(srcDirLength.toString()))}"/>
|
||||
<util:replace var="name" value="${name}" oldChar="\\" newChar="/"/>
|
||||
|
||||
<subsection name="${name}">
|
||||
<table>
|
||||
<tr>
|
||||
<th>Error</th>
|
||||
<th width="75">Line</th>
|
||||
</tr>
|
||||
<x:set var="errors" select="$file/error"/>
|
||||
<j:forEach var="error" items="${errors}">
|
||||
<tr>
|
||||
<td>
|
||||
<j:set var="errorMessage" value="${error.attribute('message').getValue()}"/>
|
||||
<!-- {htmlescape.getText(errorMessage)}-->${errorMessage}
|
||||
</td>
|
||||
<td>
|
||||
<j:set var="line" value="${error.attribute('line').getValue()}"/>
|
||||
<j:set var="lastIndex" value="${name.lastIndexOf('.java')}"/>
|
||||
<j:choose>
|
||||
<j:when test="${lastIndex > 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="xref/${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>
|
||||
@@ -20,7 +20,7 @@
|
||||
xmlns:j="jelly:core"
|
||||
xmlns:assert="assert"
|
||||
xmlns:ant="jelly:ant">
|
||||
|
||||
|
||||
<goal name="testPlugin">
|
||||
<delete dir="${maven.build.dir}" failonerror="false"/>
|
||||
<delete file="${maven.build.dir}/${maven.final.name}_javadoc.jar" failonerror="false"/>
|
||||
|
||||
@@ -62,4 +62,5 @@
|
||||
<build>
|
||||
<sourceDirectory>src/main</sourceDirectory>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,221 @@
|
||||
package org.apache.maven.javadoc;
|
||||
|
||||
/* ====================================================================
|
||||
* Copyright 2001-2004 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.
|
||||
* ====================================================================
|
||||
*/
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
import junit.textui.TestRunner;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
|
||||
|
||||
/**
|
||||
* Test case.
|
||||
*
|
||||
* @author Steven Caswell
|
||||
* @version $Id: JavadocWarningsTextToXmlTest.java,v 1.1 2004/08/21 18:42:05 aheritier Exp $
|
||||
*/
|
||||
public class JavadocWarningsTextToXmlTest
|
||||
extends TestCase {
|
||||
//~ Static fields/initializers ----------------------------------------------
|
||||
|
||||
private static final String INPUT_FILE_NAME_EXCEPTION =
|
||||
"Input file name must be specified";
|
||||
|
||||
private static final String OUTPUT_FILE_NAME_EXCEPTION =
|
||||
"Output file name must be specified";
|
||||
|
||||
//~ Constructors ------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Creates a new JavadocWarningsTextToXmlTest object.
|
||||
*
|
||||
*/
|
||||
public JavadocWarningsTextToXmlTest(final String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
//~ Methods -----------------------------------------------------------------
|
||||
|
||||
public static void main(final String[] main) {
|
||||
TestRunner.run(suite());
|
||||
}
|
||||
|
||||
|
||||
public static Test suite() {
|
||||
return new TestSuite(JavadocWarningsTextToXmlTest.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize per test data
|
||||
*
|
||||
* @throws Exception when there is an unexpected problem
|
||||
*/
|
||||
public void setUp()
|
||||
throws Exception {
|
||||
String baseDir = System.getProperty("basedir");
|
||||
System.out.println("Base dir : " + baseDir);
|
||||
assertNotNull(
|
||||
"The system property basedir was not defined.",
|
||||
baseDir
|
||||
);
|
||||
}
|
||||
|
||||
public void testBuild()
|
||||
throws Exception {
|
||||
JavadocWarningsTextToXml bean = new JavadocWarningsTextToXml();
|
||||
bean.setVerbose(true);
|
||||
bean.setInputFileName("target/test-classes/report.txt");
|
||||
bean.setOutputFileName("test.xml");
|
||||
bean.setOutputEncoding("ISO-8859-1");
|
||||
bean.build();
|
||||
|
||||
// Read and test the output file contents
|
||||
BufferedReader reader = new BufferedReader(new FileReader("test.xml"));
|
||||
String line = reader.readLine();
|
||||
assertTrue(
|
||||
"line 1 start",
|
||||
line.startsWith("<?xml version=\"1.0\" encoding=\"")
|
||||
);
|
||||
assertTrue(
|
||||
"line 1 end",
|
||||
line.endsWith("ISO-8859-1\"?>")
|
||||
);
|
||||
line = reader.readLine();
|
||||
assertEquals(
|
||||
"line 2",
|
||||
"<javadoc>",
|
||||
line
|
||||
);
|
||||
line = reader.readLine();
|
||||
assertTrue(
|
||||
"line 3 start",
|
||||
line.startsWith("<file name")
|
||||
);
|
||||
assertTrue(
|
||||
"line 3 end",
|
||||
line.endsWith("Javadoc1.java\">")
|
||||
);
|
||||
line = reader.readLine();
|
||||
assertEquals(
|
||||
"line 4",
|
||||
"<error line=\"8\" severity=\"warning\" message=\"@inheritDoc used but method1() does not override or implement any method.\"/>",
|
||||
line
|
||||
);
|
||||
line = reader.readLine();
|
||||
assertEquals(
|
||||
"line 5",
|
||||
"</file>",
|
||||
line
|
||||
);
|
||||
line = reader.readLine();
|
||||
assertTrue(
|
||||
"line 6 start",
|
||||
line.startsWith("<file name")
|
||||
);
|
||||
assertTrue(
|
||||
"line 6 end",
|
||||
line.endsWith("Javadoc2.java\">")
|
||||
);
|
||||
line = reader.readLine();
|
||||
assertEquals(
|
||||
"line 7",
|
||||
"<error line=\"8\" severity=\"warning\" message=\"@todo is an unknown tag.\"/>",
|
||||
line
|
||||
);
|
||||
line = reader.readLine();
|
||||
assertEquals(
|
||||
"line 8",
|
||||
"<error line=\"15\" severity=\"warning\" message=\"Tag @link: malformed: "Javadoc1#method1("\"/>",
|
||||
line
|
||||
);
|
||||
line = reader.readLine();
|
||||
assertEquals(
|
||||
"line 9",
|
||||
"</file>",
|
||||
line
|
||||
);
|
||||
line = reader.readLine();
|
||||
assertEquals(
|
||||
"line 10",
|
||||
"</javadoc>",
|
||||
line
|
||||
);
|
||||
|
||||
reader.close();
|
||||
|
||||
// Get rid of the xml file
|
||||
File file = new File("test.xml");
|
||||
file.delete();
|
||||
}
|
||||
|
||||
public void testInputFile()
|
||||
throws Exception {
|
||||
JavadocWarningsTextToXml bean = new JavadocWarningsTextToXml();
|
||||
bean.setOutputFileName("test.xml");
|
||||
bean.setOutputEncoding("ISO-8859-1]");
|
||||
|
||||
try {
|
||||
bean.build();
|
||||
} catch (IllegalArgumentException e) {
|
||||
assertEquals(
|
||||
"exception message",
|
||||
INPUT_FILE_NAME_EXCEPTION,
|
||||
e.getMessage()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public void testInputFileNotFound()
|
||||
throws Exception {
|
||||
JavadocWarningsTextToXml bean = new JavadocWarningsTextToXml();
|
||||
bean.setInputFileName("junk.dat");
|
||||
bean.setOutputFileName("test.xml");
|
||||
bean.setOutputEncoding("ISO-8859-1]");
|
||||
|
||||
try {
|
||||
bean.build();
|
||||
fail("Expected null pointer exception for input file name");
|
||||
} catch (FileNotFoundException e) {
|
||||
; // expected file not found
|
||||
}
|
||||
}
|
||||
|
||||
public void testOutputFile()
|
||||
throws Exception {
|
||||
JavadocWarningsTextToXml bean = new JavadocWarningsTextToXml();
|
||||
bean.setInputFileName("report.txt");
|
||||
bean.setOutputEncoding("ISO-8859-1]");
|
||||
|
||||
try {
|
||||
bean.build();
|
||||
fail("Expected null pointer exception for input file name");
|
||||
} catch (IllegalArgumentException e) {
|
||||
assertEquals(
|
||||
"exception message",
|
||||
OUTPUT_FILE_NAME_EXCEPTION,
|
||||
e.getMessage()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
39
javadoc/src/test/report.txt
Normal file
39
javadoc/src/test/report.txt
Normal file
@@ -0,0 +1,39 @@
|
||||
[javadoc] Generating Javadoc
|
||||
[javadoc] Javadoc execution
|
||||
[javadoc] Loading source files for package org.apache.maven...
|
||||
[javadoc] [parsing started C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\src\main\org\apache\maven\Javadoc1.java]
|
||||
[javadoc] [parsing completed 120ms]
|
||||
[javadoc] [parsing started C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\src\main\org\apache\maven\Javadoc2.java]
|
||||
[javadoc] [parsing completed 20ms]
|
||||
[javadoc] Constructing Javadoc information...
|
||||
[javadoc] C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\src\main\org\apache\maven\Javadoc1.java:145: method3() is already defined in org.apache.maven.Javadoc1
|
||||
[javadoc] public void method3()
|
||||
[javadoc] ^
|
||||
[javadoc] Standard Doclet version 1.4.1
|
||||
[javadoc]
|
||||
[javadoc] Generating C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\target\docs\apidocs\constant-values.html...
|
||||
[javadoc] Copying file C:\apache\maven-1.0-rc3\plugins\maven-javadoc-plugin-1.6.1\plugin-resources\stylesheet.css to file C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\target\docs\apidocs\stylesheet.css...
|
||||
[javadoc] Building tree for all the packages and classes...
|
||||
[javadoc] [loading C:\Java\j2sdk1.4.1_02\jre\lib\rt.jar(java/lang/Object.class)]
|
||||
[javadoc] Building index for all the packages and classes...
|
||||
[javadoc] C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\src\main\org\apache\maven\Javadoc1.java:8: warning - @inheritDoc used but method1() does not override or implement any method.
|
||||
[javadoc] Generating C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\target\docs\apidocs\index-all.html...
|
||||
[javadoc] C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\src\main\org\apache\maven\Javadoc2.java:15: Tag @link: Malformed: Javadoc1#method1(
|
||||
[javadoc] C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\src\main\org\apache\maven\Javadoc2.java:15: warning - Tag @link: malformed: "Javadoc1#method1("
|
||||
[javadoc] Building index for all classes...
|
||||
[javadoc] C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\src\main\org\apache\maven\Javadoc1.java:8: warning - @inheritDoc used but method1() does not override or implement any method.
|
||||
[javadoc] C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\src\main\org\apache\maven\Javadoc1.java:8: warning - @inheritDoc used but method1() does not override or implement any method.
|
||||
[javadoc] Generating C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\target\docs\apidocs\org\apache\maven\Javadoc1.html...
|
||||
[javadoc] [loading C:\Java\j2sdk1.4.1_02\jre\lib\rt.jar(java/io/Serializable.class)]
|
||||
[javadoc] C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\src\main\org\apache\maven\Javadoc2.java:15: warning - Tag @link: malformed: "Javadoc1#method1("
|
||||
[javadoc] Generating C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\target\docs\apidocs\org\apache\maven\Javadoc2.html...
|
||||
[javadoc] C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\src\main\org\apache\maven\Javadoc2.java:15: Tag @link: Malformed: Javadoc1#method1(
|
||||
[javadoc] C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\src\main\org\apache\maven\Javadoc2.java:15: warning - Tag @link: malformed: "Javadoc1#method1("
|
||||
[javadoc] C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\src\main\org\apache\maven\Javadoc2.java:8: warning - @todo is an unknown tag.
|
||||
[javadoc] C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\src\main\org\apache\maven\Javadoc2.java:15: Tag @link: Malformed: Javadoc1#method1(
|
||||
[javadoc] C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\src\main\org\apache\maven\Javadoc2.java:15: warning - Tag @link: malformed: "Javadoc1#method1("
|
||||
[javadoc] C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\src\main\org\apache\maven\Javadoc2.java:15: warning - Tag @link: malformed: "Javadoc1#method1("
|
||||
[javadoc] C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\src\main\org\apache\maven\Javadoc2.java:15: warning - Tag @link: malformed: "Javadoc1#method1("
|
||||
[javadoc] Generating C:\Steve\Java\dev\maven-plugin-dev\javadoc\cvs-sandbox\maven-plugins\javadoc\src\plugin-test\test05\target\docs\apidocs\help-doc.html...
|
||||
[javadoc] [done in 4065 ms]
|
||||
[javadoc] 11 warnings
|
||||
@@ -23,9 +23,11 @@
|
||||
<title>Changes</title>
|
||||
<author email="dion@multitask.com.au">dIon Gillard</author>
|
||||
<author email="evenisse@ifrance.com">Emmanuel Venisse</author>
|
||||
<author email="aheritier@apache.org">Arnaud Heritier</author>
|
||||
</properties>
|
||||
<body>
|
||||
<release version="1.7-SNAPSHOT" date="In CVS">
|
||||
<action dev="aheritier" type="add" issue="MPJAVADOC-35" due-to="Steven Caswell">Add javadoc warning report formatted similar to Checkstyle report.</action>
|
||||
<action dev="carlos" type="add" issue="MPJAVADOC-39">Added maven.javadoc.bottom property</action>
|
||||
<action dev="aheritier" type="fix" issue="MPJAVADOC-37">Default javadoc scope (package) can't be replaced by private or public.</action>
|
||||
<action dev="aheritier" type="fix" issue="MPJAVADOC-36">Javadoc fails if pom.package isn't specified.</action>
|
||||
|
||||
Reference in New Issue
Block a user