You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by vs...@apache.org on 2008/03/08 14:44:46 UTC
svn commit: r634963 - in /maven/plugin-tools/trunk:
maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/
maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/
maven-plugin-tools-api/src/main/java/org/apache/maven/to...
Author: vsiveton
Date: Sat Mar 8 05:44:45 2008
New Revision: 634963
URL: http://svn.apache.org/viewvc?rev=634963&view=rev
Log:
MPLUGIN-90: Refactor makeValidHtml into PluginUtils for better reusage
Submitted by: Benjamin Bentmann
Reviewed by: Vincent Siveton
o applied
Modified:
maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java
maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginXdocGenerator.java
maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/util/PluginUtils.java
maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/generator/PluginXdocGeneratorTest.java
maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/PluginUtilsTest.java
Modified: maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java
URL: http://svn.apache.org/viewvc/maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java?rev=634963&r1=634962&r2=634963&view=diff
==============================================================================
--- maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java (original)
+++ maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java Sat Mar 8 05:44:45 2008
@@ -326,6 +326,10 @@
{
description = getBundle( locale ).getString( "report.plugin.goal.nodescription" );
}
+ else
+ {
+ description = PluginUtils.makeHtmlValid( description );
+ }
String deprecated = mojo.getDeprecated();
if ( StringUtils.isNotEmpty( deprecated ) )
Modified: maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginXdocGenerator.java
URL: http://svn.apache.org/viewvc/maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginXdocGenerator.java?rev=634963&r1=634962&r2=634963&view=diff
==============================================================================
--- maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginXdocGenerator.java (original)
+++ maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginXdocGenerator.java Sat Mar 8 05:44:45 2008
@@ -29,8 +29,6 @@
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.plugin.descriptor.Parameter;
@@ -38,12 +36,9 @@
import org.apache.maven.project.MavenProject;
import org.apache.maven.tools.plugin.util.PluginUtils;
import org.codehaus.plexus.util.IOUtil;
-import org.codehaus.plexus.util.StringInputStream;
-import org.codehaus.plexus.util.StringOutputStream;
import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.xml.PrettyPrintXMLWriter;
import org.codehaus.plexus.util.xml.XMLWriter;
-import org.w3c.tidy.Tidy;
/**
* @todo add example usage tag that can be shown in the doco
@@ -177,7 +172,7 @@
w.startElement( "p" );
if ( StringUtils.isNotEmpty( mojoDescriptor.getDescription() ) )
{
- w.writeMarkup( makeHtmlValid( mojoDescriptor.getDescription() ) );
+ w.writeMarkup( PluginUtils.makeHtmlValid( mojoDescriptor.getDescription() ) );
}
else
{
@@ -384,7 +379,7 @@
}
else
{
- description = makeHtmlValid( description );
+ description = PluginUtils.makeHtmlValid( description );
}
w.startElement( "p" );
w.writeMarkup( description );
@@ -520,7 +515,7 @@
}
else
{
- description = makeHtmlValid( description );
+ description = PluginUtils.makeHtmlValid( description );
}
if ( StringUtils.isNotEmpty( parameter.getDeprecated() ) )
{
@@ -557,154 +552,6 @@
}
return list;
- }
-
- /**
- * @param description Javadoc description with HTML tags
- * @return the description with valid HTML tags
- */
- protected static String makeHtmlValid( String description )
- {
- if ( StringUtils.isEmpty( description ) )
- {
- return "";
- }
-
- StringOutputStream out = new StringOutputStream();
-
- // Using jTidy to clean comment
- Tidy tidy = new Tidy();
- tidy.setDocType( "loose" );
- tidy.setXHTML( true );
- tidy.setXmlOut( true );
- tidy.setMakeClean( true );
- tidy.setQuiet( true );
- tidy.setShowWarnings( false );
- tidy.parse( new StringInputStream( decodeJavadocTags( description ) ), out );
-
- // strip the header/body stuff
- String LS = System.getProperty( "line.separator" );
- String commentCleaned = out.toString();
- if ( StringUtils.isEmpty( commentCleaned ) )
- {
- return "";
- }
- int startPos = commentCleaned.indexOf( "<body>" + LS ) + 6 + LS.length();
- int endPos = commentCleaned.indexOf( LS + "</body>" );
-
- return commentCleaned.substring( startPos, endPos );
- }
-
- /**
- * Decodes javadoc inline tags into equivalent HTML tags. For instance, the inline tag "{@code <A&B>}" should be
- * rendered as "<code><A&B></code>".
- *
- * @param description The javadoc description to decode, may be <code>null</code>.
- * @return The decoded description, never <code>null</code>.
- */
- protected static String decodeJavadocTags( String description )
- {
- if ( StringUtils.isEmpty( description ) )
- {
- return "";
- }
-
- StringBuffer decoded = new StringBuffer( description.length() + 1024 );
-
- Matcher matcher = Pattern.compile( "\\{@(\\w+)\\s*([^\\}]*)\\}" ).matcher( description );
- while ( matcher.find() )
- {
- String tag = matcher.group( 1 );
- String text = matcher.group( 2 );
- text = StringUtils.replace( text, "&", "&" );
- text = StringUtils.replace( text, "<", "<" );
- text = StringUtils.replace( text, ">", ">" );
- if ( "code".equals( tag ) )
- {
- text = "<code>" + text + "</code>";
- }
- else if ( "link".equals( tag ) || "linkplain".equals( tag ) || "value".equals( tag ) )
- {
- String pattern = "(([^#\\.\\s]+\\.)*([^#\\.\\s]+))?" + "(#([^\\(\\s]*)(\\([^\\)]*\\))?\\s*(\\S.*)?)?";
- final int LABEL = 7;
- final int CLASS = 3;
- final int MEMBER = 5;
- final int ARGS = 6;
- Matcher link = Pattern.compile( pattern ).matcher( text );
- if ( link.matches() )
- {
- text = link.group( LABEL );
- if ( StringUtils.isEmpty( text ) )
- {
- text = link.group( CLASS );
- if ( StringUtils.isEmpty( text ) )
- {
- text = "";
- }
- if ( StringUtils.isNotEmpty( link.group( MEMBER ) ) )
- {
- if ( StringUtils.isNotEmpty( text ) )
- {
- text += '.';
- }
- text += link.group( MEMBER );
- if ( StringUtils.isNotEmpty( link.group( ARGS ) ) )
- {
- text += "()";
- }
- }
- }
- }
- if ( !"linkplain".equals( tag ) )
- {
- text = "<code>" + text + "</code>";
- }
- }
- matcher.appendReplacement( decoded, ( text != null ) ? quoteReplacement( text ) : "" );
- }
- matcher.appendTail( decoded );
-
- return decoded.toString();
- }
-
- /**
- * Returns a literal replacement <code>String</code> for the specified <code>String</code>. This method
- * produces a <code>String</code> that will work as a literal replacement <code>s</code> in the
- * <code>appendReplacement</code> method of the {@link Matcher} class. The <code>String</code> produced will
- * match the sequence of characters in <code>s</code> treated as a literal sequence. Slashes ('\') and dollar
- * signs ('$') will be given no special meaning.
- *
- * TODO: copied from Matcher class of Java 1.5, remove once target platform can be upgraded
- * @see <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Matcher.html">
- * http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Matcher.html</a>
- *
- * @param s The string to be literalized
- * @return A literal string replacement
- */
- private static String quoteReplacement( String s )
- {
- if ( ( s.indexOf( '\\' ) == -1 ) && ( s.indexOf( '$' ) == -1 ) )
- return s;
- StringBuffer sb = new StringBuffer();
- for ( int i = 0; i < s.length(); i++ )
- {
- char c = s.charAt( i );
- if ( c == '\\' )
- {
- sb.append( '\\' );
- sb.append( '\\' );
- }
- else if ( c == '$' )
- {
- sb.append( '\\' );
- sb.append( '$' );
- }
- else
- {
- sb.append( c );
- }
- }
- return sb.toString();
}
/**
Modified: maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/util/PluginUtils.java
URL: http://svn.apache.org/viewvc/maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/util/PluginUtils.java?rev=634963&r1=634962&r2=634963&view=diff
==============================================================================
--- maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/util/PluginUtils.java (original)
+++ maven/plugin-tools/trunk/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/util/PluginUtils.java Sat Mar 8 05:44:45 2008
@@ -27,6 +27,8 @@
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.maven.artifact.DependencyResolutionRequiredException;
import org.apache.maven.model.Dependency;
@@ -36,8 +38,11 @@
import org.codehaus.plexus.component.repository.ComponentDependency;
import org.codehaus.plexus.util.DirectoryScanner;
import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.StringInputStream;
+import org.codehaus.plexus.util.StringOutputStream;
import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.xml.XMLWriter;
+import org.w3c.tidy.Tidy;
/**
* Convenience methods to play with Maven plugins.
@@ -221,4 +226,151 @@
return false;
}
+
+ /**
+ * @param description Javadoc description with HTML tags
+ * @return the description with valid HTML tags
+ */
+ public static String makeHtmlValid( String description )
+ {
+ if ( StringUtils.isEmpty( description ) )
+ {
+ return "";
+ }
+
+ StringOutputStream out = new StringOutputStream();
+
+ // Using jTidy to clean comment
+ Tidy tidy = new Tidy();
+ tidy.setDocType( "loose" );
+ tidy.setXHTML( true );
+ tidy.setXmlOut( true );
+ tidy.setMakeClean( true );
+ tidy.setQuiet( true );
+ tidy.setShowWarnings( false );
+ tidy.parse( new StringInputStream( decodeJavadocTags( description ) ), out );
+
+ // strip the header/body stuff
+ String LS = System.getProperty( "line.separator" );
+ String commentCleaned = out.toString();
+ if ( StringUtils.isEmpty( commentCleaned ) )
+ {
+ return "";
+ }
+ int startPos = commentCleaned.indexOf( "<body>" + LS ) + 6 + LS.length();
+ int endPos = commentCleaned.indexOf( LS + "</body>" );
+
+ return commentCleaned.substring( startPos, endPos );
+ }
+
+ /**
+ * Decodes javadoc inline tags into equivalent HTML tags. For instance, the inline tag "{@code <A&B>}" should be
+ * rendered as "<code><A&B></code>".
+ *
+ * @param description The javadoc description to decode, may be <code>null</code>.
+ * @return The decoded description, never <code>null</code>.
+ */
+ static String decodeJavadocTags( String description )
+ {
+ if ( StringUtils.isEmpty( description ) )
+ {
+ return "";
+ }
+
+ StringBuffer decoded = new StringBuffer( description.length() + 1024 );
+
+ Matcher matcher = Pattern.compile( "\\{@(\\w+)\\s*([^\\}]*)\\}" ).matcher( description );
+ while ( matcher.find() )
+ {
+ String tag = matcher.group( 1 );
+ String text = matcher.group( 2 );
+ text = StringUtils.replace( text, "&", "&" );
+ text = StringUtils.replace( text, "<", "<" );
+ text = StringUtils.replace( text, ">", ">" );
+ if ( "code".equals( tag ) )
+ {
+ text = "<code>" + text + "</code>";
+ }
+ else if ( "link".equals( tag ) || "linkplain".equals( tag ) || "value".equals( tag ) )
+ {
+ String pattern = "(([^#\\.\\s]+\\.)*([^#\\.\\s]+))?" + "(#([^\\(\\s]*)(\\([^\\)]*\\))?\\s*(\\S.*)?)?";
+ final int LABEL = 7;
+ final int CLASS = 3;
+ final int MEMBER = 5;
+ final int ARGS = 6;
+ Matcher link = Pattern.compile( pattern ).matcher( text );
+ if ( link.matches() )
+ {
+ text = link.group( LABEL );
+ if ( StringUtils.isEmpty( text ) )
+ {
+ text = link.group( CLASS );
+ if ( StringUtils.isEmpty( text ) )
+ {
+ text = "";
+ }
+ if ( StringUtils.isNotEmpty( link.group( MEMBER ) ) )
+ {
+ if ( StringUtils.isNotEmpty( text ) )
+ {
+ text += '.';
+ }
+ text += link.group( MEMBER );
+ if ( StringUtils.isNotEmpty( link.group( ARGS ) ) )
+ {
+ text += "()";
+ }
+ }
+ }
+ }
+ if ( !"linkplain".equals( tag ) )
+ {
+ text = "<code>" + text + "</code>";
+ }
+ }
+ matcher.appendReplacement( decoded, ( text != null ) ? quoteReplacement( text ) : "" );
+ }
+ matcher.appendTail( decoded );
+
+ return decoded.toString();
+ }
+
+ /**
+ * Returns a literal replacement <code>String</code> for the specified <code>String</code>. This method
+ * produces a <code>String</code> that will work as a literal replacement <code>s</code> in the
+ * <code>appendReplacement</code> method of the {@link Matcher} class. The <code>String</code> produced will
+ * match the sequence of characters in <code>s</code> treated as a literal sequence. Slashes ('\') and dollar
+ * signs ('$') will be given no special meaning. TODO: copied from Matcher class of Java 1.5, remove once target
+ * platform can be upgraded
+ *
+ * @see <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Matcher.html">java.util.regex.Matcher</a>
+ * @param s The string to be literalized
+ * @return A literal string replacement
+ */
+ private static String quoteReplacement( String s )
+ {
+ if ( ( s.indexOf( '\\' ) == -1 ) && ( s.indexOf( '$' ) == -1 ) )
+ return s;
+ StringBuffer sb = new StringBuffer();
+ for ( int i = 0; i < s.length(); i++ )
+ {
+ char c = s.charAt( i );
+ if ( c == '\\' )
+ {
+ sb.append( '\\' );
+ sb.append( '\\' );
+ }
+ else if ( c == '$' )
+ {
+ sb.append( '\\' );
+ sb.append( '$' );
+ }
+ else
+ {
+ sb.append( c );
+ }
+ }
+ return sb.toString();
+ }
+
}
Modified: maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/generator/PluginXdocGeneratorTest.java
URL: http://svn.apache.org/viewvc/maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/generator/PluginXdocGeneratorTest.java?rev=634963&r1=634962&r2=634963&view=diff
==============================================================================
--- maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/generator/PluginXdocGeneratorTest.java (original)
+++ maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/generator/PluginXdocGeneratorTest.java Sat Mar 8 05:44:45 2008
@@ -27,72 +27,5 @@
public class PluginXdocGeneratorTest
extends AbstractGeneratorTestCase
{
- public void testMakeHtmlValid()
- {
- String javadoc = "";
- assertEquals( "", PluginXdocGenerator.makeHtmlValid( javadoc ) );
-
- // true HTML
- javadoc = "Generates <i>something</i> for the project.";
- assertEquals( "Generates <i>something</i> for the project.", PluginXdocGenerator.makeHtmlValid( javadoc ) );
-
- // wrong HTML
- javadoc = "Generates <i>something</i> <b> for the project.";
- assertEquals( "Generates <i>something</i> <b> for the project.</b>", PluginXdocGenerator
- .makeHtmlValid( javadoc ) );
- }
-
- public void testDecodeJavadocTags()
- {
- String javadoc = null;
- assertEquals( "", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
-
- javadoc = "";
- assertEquals( "", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
-
- javadoc = "{@code text}";
- assertEquals( "<code>text</code>", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
-
- javadoc = "{@code <A&B>}";
- assertEquals( "<code><A&B></code>", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
-
- javadoc = "{@literal text}";
- assertEquals( "text", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
-
- javadoc = "{@literal text} {@literal text}";
- assertEquals( "text text", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
-
- javadoc = "{@literal <A&B>}";
- assertEquals( "<A&B>", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
-
- javadoc = "{@link Class}";
- assertEquals( "<code>Class</code>", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
-
- javadoc = "{@linkplain Class}";
- assertEquals( "Class", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
-
- javadoc = "{@linkplain #field}";
- assertEquals( "field", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
-
- javadoc = "{@linkplain Class#field}";
- assertEquals( "Class.field", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
-
- javadoc = "{@linkplain #method()}";
- assertEquals( "method()", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
-
- javadoc = "{@linkplain #method(Object arg)}";
- assertEquals( "method()", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
-
- javadoc = "{@linkplain #method(Object, String)}";
- assertEquals( "method()", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
-
- javadoc = "{@linkplain #method(Object, String) label}";
- assertEquals( "label", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
-
- javadoc = "{@linkplain Class#method(Object, String)}";
- assertEquals( "Class.method()", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
-
- javadoc = "{@linkplain Class#method(Object, String) label}";
- assertEquals( "label", PluginXdocGenerator.decodeJavadocTags( javadoc ) );
- }
+ // inherits tests from base class
}
Modified: maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/PluginUtilsTest.java
URL: http://svn.apache.org/viewvc/maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/PluginUtilsTest.java?rev=634963&r1=634962&r2=634963&view=diff
==============================================================================
--- maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/PluginUtilsTest.java (original)
+++ maven/plugin-tools/trunk/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/PluginUtilsTest.java Sat Mar 8 05:44:45 2008
@@ -118,4 +118,74 @@
impl = "org.apache.maven.tools.plugin.util.stubs.MojoStub";
assertFalse( PluginUtils.isMavenReport( impl, stub ) );
}
-}
\ No newline at end of file
+
+ public void testMakeHtmlValid()
+ {
+ String javadoc = "";
+ assertEquals( "", PluginUtils.makeHtmlValid( javadoc ) );
+
+ // true HTML
+ javadoc = "Generates <i>something</i> for the project.";
+ assertEquals( "Generates <i>something</i> for the project.", PluginUtils.makeHtmlValid( javadoc ) );
+
+ // wrong HTML
+ javadoc = "Generates <i>something</i> <b> for the project.";
+ assertEquals( "Generates <i>something</i> <b> for the project.</b>", PluginUtils
+ .makeHtmlValid( javadoc ) );
+ }
+
+ public void testDecodeJavadocTags()
+ {
+ String javadoc = null;
+ assertEquals( "", PluginUtils.decodeJavadocTags( javadoc ) );
+
+ javadoc = "";
+ assertEquals( "", PluginUtils.decodeJavadocTags( javadoc ) );
+
+ javadoc = "{@code text}";
+ assertEquals( "<code>text</code>", PluginUtils.decodeJavadocTags( javadoc ) );
+
+ javadoc = "{@code <A&B>}";
+ assertEquals( "<code><A&B></code>", PluginUtils.decodeJavadocTags( javadoc ) );
+
+ javadoc = "{@literal text}";
+ assertEquals( "text", PluginUtils.decodeJavadocTags( javadoc ) );
+
+ javadoc = "{@literal text} {@literal text}";
+ assertEquals( "text text", PluginUtils.decodeJavadocTags( javadoc ) );
+
+ javadoc = "{@literal <A&B>}";
+ assertEquals( "<A&B>", PluginUtils.decodeJavadocTags( javadoc ) );
+
+ javadoc = "{@link Class}";
+ assertEquals( "<code>Class</code>", PluginUtils.decodeJavadocTags( javadoc ) );
+
+ javadoc = "{@linkplain Class}";
+ assertEquals( "Class", PluginUtils.decodeJavadocTags( javadoc ) );
+
+ javadoc = "{@linkplain #field}";
+ assertEquals( "field", PluginUtils.decodeJavadocTags( javadoc ) );
+
+ javadoc = "{@linkplain Class#field}";
+ assertEquals( "Class.field", PluginUtils.decodeJavadocTags( javadoc ) );
+
+ javadoc = "{@linkplain #method()}";
+ assertEquals( "method()", PluginUtils.decodeJavadocTags( javadoc ) );
+
+ javadoc = "{@linkplain #method(Object arg)}";
+ assertEquals( "method()", PluginUtils.decodeJavadocTags( javadoc ) );
+
+ javadoc = "{@linkplain #method(Object, String)}";
+ assertEquals( "method()", PluginUtils.decodeJavadocTags( javadoc ) );
+
+ javadoc = "{@linkplain #method(Object, String) label}";
+ assertEquals( "label", PluginUtils.decodeJavadocTags( javadoc ) );
+
+ javadoc = "{@linkplain Class#method(Object, String)}";
+ assertEquals( "Class.method()", PluginUtils.decodeJavadocTags( javadoc ) );
+
+ javadoc = "{@linkplain Class#method(Object, String) label}";
+ assertEquals( "label", PluginUtils.decodeJavadocTags( javadoc ) );
+ }
+
+}