You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2016/07/10 09:58:59 UTC
svn commit: r1752069 - in /maven/plugins/trunk/maven-javadoc-plugin/src:
main/java/org/apache/maven/plugin/javadoc/AbstractFixJavadocMojo.java
test/java/org/apache/maven/plugin/javadoc/FixJavadocMojoTest.java
Author: rfscholte
Date: Sun Jul 10 09:58:59 2016
New Revision: 1752069
URL: http://svn.apache.org/viewvc?rev=1752069&view=rev
Log:
[MJAVADOC-452] Several fixes for comment corruption in fix goal
Add parameter removeUnknownThrows
Patch contributed by Richard Sand; reviewed and applied with adjustments by Robert Scholte
Modified:
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/AbstractFixJavadocMojo.java
maven/plugins/trunk/maven-javadoc-plugin/src/test/java/org/apache/maven/plugin/javadoc/FixJavadocMojoTest.java
Modified: maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/AbstractFixJavadocMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/AbstractFixJavadocMojo.java?rev=1752069&r1=1752068&r2=1752069&view=diff
==============================================================================
--- maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/AbstractFixJavadocMojo.java (original)
+++ maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/AbstractFixJavadocMojo.java Sun Jul 10 09:58:59 2016
@@ -305,6 +305,12 @@ public abstract class AbstractFixJavadoc
private boolean fixMethodComment;
/**
+ * Flag to remove throws tags from unknown classes.
+ */
+ @Parameter ( property = "removeUnknownThrows", defaultValue = "false" )
+ private boolean removeUnknownThrows;
+
+ /**
* Forcing the goal execution i.e. skip warranty messages (not recommended).
*/
@Parameter ( property = "force" )
@@ -1881,7 +1887,7 @@ public abstract class AbstractFixJavadoc
* @return an instance of {@link JavaEntityTags}
* @throws IOException if any
*/
- private JavaEntityTags parseJavadocTags( final String originalContent, final AbstractInheritableJavaEntity entity,
+ JavaEntityTags parseJavadocTags( final String originalContent, final AbstractInheritableJavaEntity entity,
final String indent, final boolean isJavaMethod )
throws IOException
{
@@ -2105,7 +2111,7 @@ public abstract class AbstractFixJavadoc
}
}
- private void writeThrowsTag( final StringBuilder sb, final JavaMethod javaMethod,
+ void writeThrowsTag( final StringBuilder sb, final JavaMethod javaMethod,
final JavaEntityTags javaEntityTags, final String[] params )
{
String exceptionClassName = params[0];
@@ -2149,28 +2155,45 @@ public abstract class AbstractFixJavadoc
}
}
- // Maybe a RuntimeException
- Class<?> clazz = getRuntimeExceptionClass( javaMethod.getParentClass(), exceptionClassName );
+ Class<?> clazz = getClass( javaMethod.getParentClass(), exceptionClassName );
+
if ( clazz != null )
{
- sb.append( StringUtils.replace( originalJavadocTag, exceptionClassName, clazz.getName() ) );
-
- // added qualified name
- javaEntityTags.putJavadocThrowsTag( clazz.getName(), originalJavadocTag );
+ if ( ClassUtils.isAssignable( clazz, RuntimeException.class ) )
+ {
+ sb.append( StringUtils.replace( originalJavadocTag, exceptionClassName, clazz.getName() ) );
- return;
+ // added qualified name
+ javaEntityTags.putJavadocThrowsTag( clazz.getName(), originalJavadocTag );
+ }
+ else if ( ClassUtils.isAssignable( clazz, Throwable.class ) )
+ {
+ getLog().debug( "Removing '" + originalJavadocTag + "'; Throwable not specified by "
+ + getJavaMethodAsString( javaMethod ) + " and it is not a RuntimeException." );
+ }
+ else
+ {
+ getLog().debug( "Removing '" + originalJavadocTag + "'; It is not a Throwable" );
+ }
}
-
- if ( getLog().isWarnEnabled() )
+ else if ( removeUnknownThrows )
{
- getLog().warn( "Unknown throws exception '" + exceptionClassName + "' defined in " + getJavaMethodAsString(
- javaMethod ) );
+ getLog().warn( "Ignoring unknown throws '" + exceptionClassName + "' defined on "
+ + getJavaMethodAsString( javaMethod ) );
}
-
- sb.append( originalJavadocTag );
- if ( params.length == 1 )
+ else
{
- sb.append( " if any." );
+ getLog().warn( "Found unknown throws '" + exceptionClassName + "' defined on "
+ + getJavaMethodAsString( javaMethod ) );
+
+ sb.append( originalJavadocTag );
+
+ if ( params.length == 1 )
+ {
+ sb.append( " if any." );
+ }
+
+ javaEntityTags.putJavadocThrowsTag( exceptionClassName, originalJavadocTag );
}
}
@@ -2906,10 +2929,10 @@ public abstract class AbstractFixJavadoc
* <li>exception inner class</li>
* <li>exception class in java.lang package</li>
* </ul>
- * @return a RuntimeException assignable class.
+ * @return the class if found, otherwise {@code null}.
* @see #getClass(String)
*/
- private Class<?> getRuntimeExceptionClass( JavaClass currentClass, String exceptionClassName )
+ private Class<?> getClass( JavaClass currentClass, String exceptionClassName )
{
String[] potentialClassNames =
new String[]{ exceptionClassName, currentClass.getPackage().getName() + "." + exceptionClassName,
@@ -2927,7 +2950,7 @@ public abstract class AbstractFixJavadoc
{
// nop
}
- if ( clazz != null && ClassUtils.isAssignable( clazz, RuntimeException.class ) )
+ if ( clazz != null )
{
return clazz;
}
@@ -3615,7 +3638,7 @@ public abstract class AbstractFixJavadoc
/**
* Wrapper class for the entity's tags.
*/
- private class JavaEntityTags
+ class JavaEntityTags
{
private final AbstractInheritableJavaEntity entity;
Modified: maven/plugins/trunk/maven-javadoc-plugin/src/test/java/org/apache/maven/plugin/javadoc/FixJavadocMojoTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-javadoc-plugin/src/test/java/org/apache/maven/plugin/javadoc/FixJavadocMojoTest.java?rev=1752069&r1=1752068&r2=1752069&view=diff
==============================================================================
--- maven/plugins/trunk/maven-javadoc-plugin/src/test/java/org/apache/maven/plugin/javadoc/FixJavadocMojoTest.java (original)
+++ maven/plugins/trunk/maven-javadoc-plugin/src/test/java/org/apache/maven/plugin/javadoc/FixJavadocMojoTest.java Sun Jul 10 09:58:59 2016
@@ -28,8 +28,10 @@ import java.util.List;
import junitx.util.PrivateAccessor;
+import org.apache.maven.plugin.javadoc.AbstractFixJavadocMojo.JavaEntityTags;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
import org.apache.maven.shared.invoker.MavenInvocationException;
import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.IOUtil;
@@ -578,6 +580,51 @@ public class FixJavadocMojoTest
assertEquals("return", fixTags[0]);
assertEquals(1, fixTags.length);
}
+
+ public void testRemoveUnknownExceptions() throws Exception
+ {
+ AbstractFixJavadocMojo mojoInstance = new FixJavadocMojo();
+ setVariableValueToObject( mojoInstance, "fixTagsSplitted", new String[] { "all" } );
+ setVariableValueToObject( mojoInstance, "project", new MavenProjectStub() );
+
+ String source = "package a.b.c;" + EOL
+ + "public class Clazz {" + EOL
+ + " /**" + EOL
+ + " * @throws java.lang.RuntimeException" + EOL
+ + " * @throws NumberFormatException" + EOL
+ + " * @throws java.lang.Exception" + EOL // not thrown and no RTE -> remove
+ + " * @throws com.foo.FatalException" + EOL // not on classpath (?!) -> see removeUnknownThrows
+ + " */" + EOL
+ + " public void method() {}" + EOL
+ + "}";
+
+ JavaDocBuilder builder = new JavaDocBuilder();
+ JavaMethod javaMethod = builder.addSource( new StringReader( source ) ).getClasses()[0].getMethods()[0];
+
+ JavaEntityTags javaEntityTags = mojoInstance.parseJavadocTags( source, javaMethod, "", true );
+
+ StringBuilder sb = new StringBuilder();
+ mojoInstance.writeThrowsTag( sb, javaMethod, javaEntityTags, new String[] { "java.lang.RuntimeException" } );
+ assertEquals( " * @throws java.lang.RuntimeException", sb.toString() );
+
+ sb = new StringBuilder();
+ mojoInstance.writeThrowsTag( sb, javaMethod, javaEntityTags, new String[] { "NumberFormatException" } );
+ assertEquals( " * @throws java.lang.NumberFormatException", sb.toString() );
+
+ sb = new StringBuilder();
+ mojoInstance.writeThrowsTag( sb, javaMethod, javaEntityTags, new String[] { "java.lang.Exception" } );
+ assertEquals( "", sb.toString() );
+
+ setVariableValueToObject( mojoInstance, "removeUnknownThrows", true );
+ sb = new StringBuilder();
+ mojoInstance.writeThrowsTag( sb, javaMethod, javaEntityTags, new String[] { "com.foo.FatalException" } );
+ assertEquals( "", sb.toString() );
+
+ setVariableValueToObject( mojoInstance, "removeUnknownThrows", false );
+ sb = new StringBuilder();
+ mojoInstance.writeThrowsTag( sb, javaMethod, javaEntityTags, new String[] { "com.foo.FatalException" } );
+ assertEquals( " * @throws com.foo.FatalException if any.", sb.toString() );
+ }
// ----------------------------------------------------------------------
// private methods