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
commit 7dc160f93ad10642775f39a2db6c322162a3e837 Author: Stephane Talbot <[email protected]> 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
