You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2020/05/11 10:59:29 UTC

[groovy] branch master updated: GROOVY-9547: groovydoc: resolve tags later for Groovy source code (closes #1244)

This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new 9095a3a  GROOVY-9547: groovydoc: resolve tags later for Groovy source code (closes #1244)
9095a3a is described below

commit 9095a3a14335216dc55c660465a133da816c50b3
Author: Mikko Värri <vm...@linuxbox.fi>
AuthorDate: Mon May 11 11:51:37 2020 +0300

    GROOVY-9547: groovydoc: resolve tags later for Groovy source code (closes #1244)
    
    For Java source code, tags are resolved when the template asks for the
    comments.  For Groovy, they were resolved as soon as the source file
    was processes.  At that point, not all classes in the same package are
    processes, so links to those failed to link.
---
 .../tools/groovydoc/antlr4/GroovyDocParser.java    |  6 +--
 .../groovy/tools/groovydoc/GroovyDocToolTest.java  | 44 ++++++++++++++++++++++
 .../groovydoc/testfiles/GroovyInterface1.groovy    | 10 ++++-
 .../groovydoc/testfiles/JavaClassWithDiamond.java  |  9 +++++
 4 files changed, 63 insertions(+), 6 deletions(-)

diff --git a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/antlr4/GroovyDocParser.java b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/antlr4/GroovyDocParser.java
index bbb66b3..ebb714c 100644
--- a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/antlr4/GroovyDocParser.java
+++ b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/antlr4/GroovyDocParser.java
@@ -86,11 +86,7 @@ public class GroovyDocParser implements GroovyDocParserI {
         ModuleNode root = unit.getAST();
         GroovydocVisitor visitor = new GroovydocVisitor(unit, packagePath, links);
         visitor.visitClass(root.getClasses().get(0));
-        Map<String, GroovyClassDoc> groovyClassDocs = visitor.getGroovyClassDocs();
-        for (GroovyClassDoc classDoc : groovyClassDocs.values()) {
-            replaceTags((SimpleGroovyClassDoc) classDoc);
-        }
-        return groovyClassDocs;
+        return visitor.getGroovyClassDocs();
     }
 
     private void replaceTags(SimpleGroovyClassDoc sgcd) {
diff --git a/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/GroovyDocToolTest.java b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/GroovyDocToolTest.java
index 0292fb7..2c6f078 100644
--- a/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/GroovyDocToolTest.java
+++ b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/GroovyDocToolTest.java
@@ -940,6 +940,50 @@ public class GroovyDocToolTest extends GroovyTestCase {
         )).matcher(javadoc).find());
     }
 
+    public void testLinksToSamePackage() throws Exception {
+        final String base = "org/codehaus/groovy/tools/groovydoc/testfiles";
+        htmlTool.add(Arrays.asList(
+                base + "/GroovyInterface1.groovy",
+                base + "/JavaClassWithDiamond.java"
+        ));
+
+        final MockOutputTool output = new MockOutputTool();
+        htmlTool.renderToOutput(output, MOCK_DIR);
+
+        final String groovydoc = output.getText(MOCK_DIR + "/" + base + "/GroovyInterface1.html");
+        final String javadoc = output.getText(MOCK_DIR + "/" + base + "/JavaClassWithDiamond.html");
+
+        final Matcher groovyClassComment = Pattern.compile(Pattern.quote(
+                "<p> <a href='../../../../../../org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithDiamond.html#link()' title='Java'>Java</a> " +
+                        "<DL><DT><B>See Also:</B></DT>" +
+                        "<DD><a href='../../../../../../org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithDiamond.html' title='JavaClassWithDiamond'>JavaClassWithDiamond</a></DD>" +
+                        "</DL></p>"
+        )).matcher(groovydoc);
+        final Matcher groovyMethodComment = Pattern.compile(Pattern.quote(
+                "<p> <a href='../../../../../../org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithDiamond.html#link()' title='Java link'>Java link</a> " +
+                        "<DL><DT><B>See Also:</B></DT>" +
+                        "<DD><a href='../../../../../../org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithDiamond.html#link()' title='JavaClassWithDiamond.link'>JavaClassWithDiamond.link</a></DD>" +
+                        "</DL></p>"
+        )).matcher(groovydoc);
+        final Matcher javaClassComment = Pattern.compile(Pattern.quote(
+                "<p> <a href='../../../../../../org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterface1.html#link()' title='Groovy link'>Groovy link</a>\n" +
+                        "  <DL><DT><B>See Also:</B></DT>" +
+                        "<DD><a href='../../../../../../org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterface1.html' title='GroovyInterface1'>GroovyInterface1</a></DD>" +
+                        "</DL></p>"
+        )).matcher(javadoc);
+        final Matcher javaMethodComment = Pattern.compile(Pattern.quote(
+                "<p> <a href='../../../../../../org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterface1.html#link()' title='Groovy link'>Groovy link</a>\n" +
+                        "      <DL><DT><B>See Also:</B></DT>" +
+                        "<DD><a href='../../../../../../org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterface1.html#link()' title='GroovyInterface1.link'>GroovyInterface1.link</a></DD>" +
+                        "</DL></p>"
+        )).matcher(javadoc);
+
+        assertTrue("The Groovy class comment should contain links", groovyClassComment.find());
+        assertTrue("The Groovy method comment should contain links", groovyMethodComment.find());
+        assertTrue("The Java class comment should contain links", javaClassComment.find());
+        assertTrue("The Java method comment should contain links", javaMethodComment.find());
+    }
+
     public void testScript() throws Exception {
         List<String> srcList = new ArrayList<String>();
         srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/Script.groovy");
diff --git a/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterface1.groovy b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterface1.groovy
index 20c2fda..a2a9138 100644
--- a/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterface1.groovy
+++ b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterface1.groovy
@@ -18,6 +18,14 @@
  */
 package org.codehaus.groovy.tools.groovydoc.testfiles
 
+/**
+ * {@link JavaClassWithDiamond#link() Java}
+ * @see JavaClassWithDiamond
+ */
 interface GroovyInterface1 {
-
+    /**
+     * {@link JavaClassWithDiamond#link() Java link}
+     * @see JavaClassWithDiamond#link()
+     */
+    void link()
 }
diff --git a/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithDiamond.java b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithDiamond.java
index 832543e..597db21 100644
--- a/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithDiamond.java
+++ b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithDiamond.java
@@ -21,6 +21,15 @@ package org.codehaus.groovy.tools.groovydoc.testfiles;
 import java.util.ArrayList;
 import java.util.List;
 
+/**
+ * {@link GroovyInterface1#link() Groovy link}
+ * @see GroovyInterface1
+ */
 public abstract class JavaClassWithDiamond {
     public List<String> stringList = new ArrayList<>();
+    /**
+     * {@link GroovyInterface1#link() Groovy link}
+     * @see GroovyInterface1#link()
+     */
+    public abstract void link();
 }