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>&lt;A&amp;B&gt;</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, "&", "&amp;" );
-            text = StringUtils.replace( text, "<", "&lt;" );
-            text = StringUtils.replace( text, ">", "&gt;" );
-            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>&lt;A&amp;B&gt;</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, "&", "&amp;" );
+            text = StringUtils.replace( text, "<", "&lt;" );
+            text = StringUtils.replace( text, ">", "&gt;" );
+            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>&lt;A&amp;B&gt;</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( "&lt;A&amp;B&gt;", 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>&lt;A&amp;B&gt;</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( "&lt;A&amp;B&gt;", 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 ) );
+    }
+
+}