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 2022/05/03 11:26:50 UTC

[groovy] 01/06: GROOVY-10593: replace '.' by '/' in imports

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

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

commit 128349de9806cec021ee8350758f264c4ac3c5ea
Author: Stephane Talbot <St...@univ-savoie.fr>
AuthorDate: Sat Apr 23 19:11:58 2022 +0200

    GROOVY-10593: replace '.' by '/' in imports
---
 .../org/apache/groovy/antlr/GroovydocVisitor.java  |  2 +-
 .../groovy/tools/groovydoc/GroovyDocToolTest.java  | 40 ++++++++++++++++++++++
 .../groovydoc/testfiles/groovy_10593/a/List.java   |  3 ++
 .../groovydoc/testfiles/groovy_10593/b/Test.groovy |  5 +++
 .../groovydoc/testfiles/groovy_10593/b/Test.java   |  5 +++
 5 files changed, 54 insertions(+), 1 deletion(-)

diff --git a/subprojects/groovy-groovydoc/src/main/java/org/apache/groovy/antlr/GroovydocVisitor.java b/subprojects/groovy-groovydoc/src/main/java/org/apache/groovy/antlr/GroovydocVisitor.java
index 39ed1f231f..1f90685fd6 100644
--- a/subprojects/groovy-groovydoc/src/main/java/org/apache/groovy/antlr/GroovydocVisitor.java
+++ b/subprojects/groovy-groovydoc/src/main/java/org/apache/groovy/antlr/GroovydocVisitor.java
@@ -92,7 +92,7 @@ public class GroovydocVisitor extends ClassCodeVisitorSupport {
         final List<String> imports = new ArrayList<>();
         for (ImportNode iNode : node.getModule().getImports()) {
             String name = iNode.getClassName();
-            imports.add(name);
+            imports.add(name.replace('.', '/'));
             if (iNode.getAlias() != null && !iNode.getAlias().isEmpty()) {
                 aliases.put(iNode.getAlias(), name.replace('.', '/'));
             }
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 f4dfe9742d..6147ed0de1 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
@@ -755,6 +755,46 @@ public class GroovyDocToolTest extends GroovyTestCase {
         assertEquals("The constructor parameter link text should be Foo", "Foo", constructor.group(3));
     }
 
+    public void testGroovyExtendsImportedClassWithNameWhichExistInDefaultPackages() throws Exception {
+        // Groovy interface b.Test imports a.List and extends List.
+        // List should be recognized as a.List and not java.util.List 
+        htmlTool.add(Arrays.asList(
+                "org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/a/List.java",
+                "org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/Test.groovy"
+        ));
+
+        final MockOutputTool output = new MockOutputTool();
+        htmlTool.renderToOutput(output, MOCK_DIR);
+        final String testAdapterDoc = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/Test.html");
+ 
+        // Test should etends a.List
+        final Matcher extendedClass = Pattern.compile("extends\\s+<a[^>]*href='[^']*(((java/util/)|(a/))List)\\.html'[^>]*>List</a>").matcher(testAdapterDoc);
+        
+        assertTrue("Test interface should extends List", extendedClass.find());
+
+        assertEquals("Classes from imported packages should shadow classes from default packages", "a/List", extendedClass.group(1));
+    }
+
+    public void testJavaExtendsImportedClassWithNameWhichExistInDefaultPackages() throws Exception {
+        // Java interface b.Test imports a.List and extends List.
+        // List should be recognized as a.List and not java.util.List 
+        htmlTool.add(Arrays.asList(
+                "org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/a/List.java",
+                "org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/Test.java"
+        ));
+
+        final MockOutputTool output = new MockOutputTool();
+        htmlTool.renderToOutput(output, MOCK_DIR);
+        final String testAdapterDoc = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/Test.html");
+
+        // Test should etends a.List
+        final Matcher extendedClass = Pattern.compile("extends\\s+<a[^>]*href='[^']*(((java/util/)|(a/))List)\\.html'[^>]*>List</a>").matcher(testAdapterDoc);
+        
+        assertTrue("Test interface should extends List", extendedClass.find());
+
+        assertEquals("Classes from imported packages should shadow classes from default packages", "a/List", extendedClass.group(1));
+    }
+
     public void testClassDeclarationHeader() throws Exception {
         final String base = "org/codehaus/groovy/tools/groovydoc/testfiles";
         htmlTool.add(Arrays.asList(
diff --git a/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/a/List.java b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/a/List.java
new file mode 100644
index 0000000000..94ca925dcd
--- /dev/null
+++ b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/a/List.java
@@ -0,0 +1,3 @@
+package org.codehaus.groovy.tools.groovydoc.testfiles.groovy_10593.a;
+
+public interface List {}
\ No newline at end of file
diff --git a/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/Test.groovy b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/Test.groovy
new file mode 100644
index 0000000000..989667ed52
--- /dev/null
+++ b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/Test.groovy
@@ -0,0 +1,5 @@
+package org.codehaus.groovy.tools.groovydoc.testfiles.groovy_10593.b;
+
+import org.codehaus.groovy.tools.groovydoc.testfiles.groovy_10593.a.List;
+
+public interface Test extends List {}
\ No newline at end of file
diff --git a/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/Test.java b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/Test.java
new file mode 100644
index 0000000000..989667ed52
--- /dev/null
+++ b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/Test.java
@@ -0,0 +1,5 @@
+package org.codehaus.groovy.tools.groovydoc.testfiles.groovy_10593.b;
+
+import org.codehaus.groovy.tools.groovydoc.testfiles.groovy_10593.a.List;
+
+public interface Test extends List {}
\ No newline at end of file