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:27:40 UTC

[groovy] branch GROOVY_3_0_X updated (51393752ff -> 0b572ec5e7)

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

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


    from 51393752ff GROOVY-10598: fix for NPE
     new ee9c8423ba GROOVY-10593: replace '.' by '/' in imports
     new f290a676c1 new test cases showing the problem with star imports and static imports
     new 52cc49ffe0 bugfix: (groovy-doc) add star imports in the list of imports used by SimpleGroovyClassDoc
     new dd0306d543 GROOVY-10593: add new test cases and bugfix for static imports
     new 35230116a6 use diamond operator
     new 0b572ec5e7 minor refactor (mostly formatting)

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org/apache/groovy/antlr/GroovydocVisitor.java  |   6 +-
 .../tools/groovydoc/SimpleGroovyClassDoc.java      |  67 +++++---
 .../groovydoc/antlr4/GroovydocJavaVisitor.java     |   1 +
 .../groovy/tools/groovydoc/GroovyDocToolTest.java  | 185 +++++++++++++++++++++
 .../groovydoc/testfiles/groovy_10593/a/List.java   |   3 +
 .../testfiles/groovy_10593/a/StaticList.java       |   6 +
 .../groovydoc/testfiles/groovy_10593/b/Test.groovy |   5 +
 .../groovydoc/testfiles/groovy_10593/b/Test.java   |   5 +
 .../testfiles/groovy_10593/b/TestStar.groovy       |   5 +
 .../testfiles/groovy_10593/b/TestStar.java         |   5 +
 .../testfiles/groovy_10593/b/TestStatic.groovy     |   5 +
 .../testfiles/groovy_10593/b/TestStatic.java       |   5 +
 .../groovy_10593/b/TestStaticAlias.groovy          |   5 +
 .../testfiles/groovy_10593/b/TestStaticStar.groovy |   5 +
 .../testfiles/groovy_10593/b/TestStaticStar.java   |   5 +
 15 files changed, 288 insertions(+), 25 deletions(-)
 create mode 100644 subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/a/List.java
 create mode 100644 subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/a/StaticList.java
 create mode 100644 subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/Test.groovy
 create mode 100644 subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/Test.java
 create mode 100644 subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStar.groovy
 create mode 100644 subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStar.java
 create mode 100644 subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStatic.groovy
 create mode 100644 subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStatic.java
 create mode 100644 subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStaticAlias.groovy
 create mode 100644 subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStaticStar.groovy
 create mode 100644 subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStaticStar.java


[groovy] 05/06: use diamond operator

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 35230116a614cfb589c3a287550711fdd683da36
Author: Paul King <pa...@asert.com.au>
AuthorDate: Tue May 3 17:47:11 2022 +1000

    use diamond operator
---
 .../tools/groovydoc/SimpleGroovyClassDoc.java      | 40 +++++++++++-----------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
index 2c40d62343..00e24681f5 100644
--- a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
+++ b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
@@ -62,7 +62,7 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
     public static final Pattern NAME_ARGS_REGEX = Pattern.compile("([^(]+)\\(([^)]*)\\)");
     public static final Pattern SPLIT_ARGS_REGEX = Pattern.compile(",\\s*");
     private static final List<String> PRIMITIVES = Arrays.asList("void", "boolean", "byte", "short", "char", "int", "long", "float", "double");
-    private static final Map<String, String> TAG_TEXT = new LinkedHashMap<String, String>();
+    private static final Map<String, String> TAG_TEXT = new LinkedHashMap<>();
     private static final GroovyConstructorDoc[] EMPTY_GROOVYCONSTRUCTORDOC_ARRAY = new GroovyConstructorDoc[0];
     private static final GroovyClassDoc[] EMPTY_GROOVYCLASSDOC_ARRAY = new GroovyClassDoc[0];
     private static final GroovyFieldDoc[] EMPTY_GROOVYFIELDDOC_ARRAY = new GroovyFieldDoc[0];
@@ -106,23 +106,23 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
         this.importedClassesAndPackages = importedClassesAndPackages;
         this.aliases = aliases;
         this.links = links;
-        constructors = new ArrayList<GroovyConstructorDoc>();
-        fields = new ArrayList<GroovyFieldDoc>();
-        properties = new ArrayList<GroovyFieldDoc>();
-        enumConstants = new ArrayList<GroovyFieldDoc>();
-        methods = new ArrayList<GroovyMethodDoc>();
-        interfaceNames = new ArrayList<String>();
-        interfaceClasses = new ArrayList<GroovyClassDoc>();
-        nested = new ArrayList<GroovyClassDoc>();
-        resolvedExternalClassesCache = new HashMap<String, Class<?>>();
+        constructors = new ArrayList<>();
+        fields = new ArrayList<>();
+        properties = new ArrayList<>();
+        enumConstants = new ArrayList<>();
+        methods = new ArrayList<>();
+        interfaceNames = new ArrayList<>();
+        interfaceClasses = new ArrayList<>();
+        nested = new ArrayList<>();
+        resolvedExternalClassesCache = new HashMap<>();
     }
 
     public SimpleGroovyClassDoc(List<String> importedClassesAndPackages, Map<String, String> aliases, String name) {
-        this(importedClassesAndPackages, aliases, name, new ArrayList<LinkArgument>());
+        this(importedClassesAndPackages, aliases, name, new ArrayList<>());
     }
 
     public SimpleGroovyClassDoc(List<String> importedClassesAndPackages, String name) {
-        this(importedClassesAndPackages, new LinkedHashMap<String, String>(), name, new ArrayList<LinkArgument>());
+        this(importedClassesAndPackages, new LinkedHashMap<>(), name, new ArrayList<>());
     }
 
     /**
@@ -253,7 +253,7 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
 
     // TODO move logic here into resolve
     public List<GroovyClassDoc> getParentClasses() {
-        List<GroovyClassDoc> result = new LinkedList<GroovyClassDoc>();
+        List<GroovyClassDoc> result = new LinkedList<>();
         if (isInterface()) return result;
         result.add(0, this);
         GroovyClassDoc next = this;
@@ -280,12 +280,12 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
     }
 
     public Set<GroovyClassDoc> getParentInterfaces() {
-        Set<GroovyClassDoc> result = new LinkedHashSet<GroovyClassDoc>();
+        Set<GroovyClassDoc> result = new LinkedHashSet<>();
         result.add(this);
-        Set<GroovyClassDoc> next = new LinkedHashSet<GroovyClassDoc>(Arrays.asList(this.interfaces()));
+        Set<GroovyClassDoc> next = new LinkedHashSet<>(Arrays.asList(this.interfaces()));
         while (!next.isEmpty()) {
             Set<GroovyClassDoc> temp = next;
-            next = new LinkedHashSet<GroovyClassDoc>();
+            next = new LinkedHashSet<>();
             for (GroovyClassDoc t : temp) {
                 if (t instanceof SimpleGroovyClassDoc) {
                     next.addAll(((SimpleGroovyClassDoc)t).getParentInterfaces());
@@ -301,7 +301,7 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
     }
 
     private Set<GroovyClassDoc> getJavaInterfaces(ExternalGroovyClassDoc d) {
-        Set<GroovyClassDoc> result = new LinkedHashSet<GroovyClassDoc>();
+        Set<GroovyClassDoc> result = new LinkedHashSet<>();
         Class[] interfaces = d.externalClass().getInterfaces();
         if (interfaces != null) {
             for (Class i : interfaces) {
@@ -467,7 +467,7 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
             if (gt != -1) {
                 if (gt > lt) {
                     String allTypeArgs = type.substring(lt + 1, gt);
-                    List<String> typeArgs = new ArrayList<String>();
+                    List<String> typeArgs = new ArrayList<>();
                     int nested = 0;
                     StringBuilder sb = new StringBuilder();
                     for (char ch : allTypeArgs.toCharArray()) {
@@ -483,7 +483,7 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
                     if (sb.length() > 0) {
                         typeArgs.add(sb.toString().trim());
                     }
-                    List<String> typeUrls = new ArrayList<String>();
+                    List<String> typeUrls = new ArrayList<>();
                     for (String typeArg : typeArgs) {
                         typeUrls.add(getDocUrl(typeArg, full, links, relativePath, rootDoc, classDoc));
                     }
@@ -938,7 +938,7 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
         Matcher matcher = regex.matcher(self + " @endMarker");
         if (matcher.find()) {
             matcher.reset();
-            Map<String, List<String>> savedTags = new LinkedHashMap<String, List<String>>();
+            Map<String, List<String>> savedTags = new LinkedHashMap<>();
             StringBuffer sb = new StringBuffer();
             while (matcher.find()) {
                 String tagname = matcher.group(1);


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

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ee9c8423baec7c81bbd47d950e4eacb566fd1893
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 4984f92c97..743218ec7f 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


[groovy] 02/06: new test cases showing the problem with star imports and static imports

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f290a676c1b9a8a80c6acdef56836e084e92968c
Author: Stephane Talbot <St...@univ-savoie.fr>
AuthorDate: Sat Apr 23 23:40:22 2022 +0200

    new test cases showing the problem with star imports and static imports
---
 .../groovy/tools/groovydoc/GroovyDocToolTest.java  | 84 +++++++++++++++++++++-
 .../testfiles/groovy_10593/a/StaticList.java       |  6 ++
 .../testfiles/groovy_10593/b/TestStar.groovy       |  5 ++
 .../testfiles/groovy_10593/b/TestStar.java         |  5 ++
 .../testfiles/groovy_10593/b/TestStatic.groovy     |  5 ++
 .../testfiles/groovy_10593/b/TestStatic.java       |  5 ++
 6 files changed, 109 insertions(+), 1 deletion(-)

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 743218ec7f..4e7a62ca98 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
@@ -766,7 +766,7 @@ public class GroovyDocToolTest extends GroovyTestCase {
         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);
         
@@ -795,6 +795,88 @@ public class GroovyDocToolTest extends GroovyTestCase {
         assertEquals("Classes from imported packages should shadow classes from default packages", "a/List", extendedClass.group(1));
     }
 
+    public void testGroovyExtendsStarImportedClassWithNameWhichExistInDefaultPackages() throws Exception {
+        // Groovy interface b.TestStar imports a.* 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/TestStar.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/TestStar.html");
+
+        // TestStar should etends a.List
+        final Matcher extendedClass = Pattern.compile("extends\\s+<a[^>]*href='[^']*(((java/util/)|(a/))List)\\.html'[^>]*>List</a>").matcher(testAdapterDoc);
+        
+        assertTrue("TestStar interface should extends List", extendedClass.find());
+
+        assertEquals("Classes from imported packages should shadow classes from default packages", "a/List", extendedClass.group(1));
+    }
+
+    public void testJavaExtendsStarImportedClassWithNameWhichExistInDefaultPackages() throws Exception {
+        // Java interface b.TestStar imports a.* 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/TestStar.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/TestStar.html");
+
+        // TestStar should etends a.List
+        final Matcher extendedClass = Pattern.compile("extends\\s+<a[^>]*href='[^']*(((java/util/)|(a/))List)\\.html'[^>]*>List</a>").matcher(testAdapterDoc);
+        
+        assertTrue("TestStar interface should extends List", extendedClass.find());
+
+        assertEquals("Classes from imported packages should shadow classes from default packages", "a/List", extendedClass.group(1));
+    }
+
+    public void testGroovyExtendsStaticImportedClassWithNameWhichExistInDefaultPackages() throws Exception {
+        // Groovy interface b.TestStatic imports a.StaticList.List and extends List.
+        // List should be recognized as a.StaticList.List and not java.util.List 
+        htmlTool.add(Arrays.asList(
+                "org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/a/StaticList.java",
+                "org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStatic.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/TestStatic.html");
+
+        // TestStatic should etends a.StaticList.List
+        final Matcher extendedClass = Pattern.compile("extends\\s+<a[^>]*href='[^']*(((java/util/)|(a/StaticList\\.))List)\\.html'[^>]*>((StaticList\\.)?List)</a>").matcher(testAdapterDoc);
+        
+        assertTrue("TestStatic interface should extends List", extendedClass.find());
+
+        assertEquals("Classes from imported packages should shadow classes from default packages", "a/StaticList.List", extendedClass.group(1));
+        assertEquals("Classes from imported packages should shadow classes from default packages", "StaticList.List", extendedClass.group(5));
+    }
+
+    public void testJavaExtendsStaticImportedClassWithNameWhichExistInDefaultPackages() throws Exception {
+        // Java interface b.TestStatic imports a.StaticList.List and extends List.
+        // List should be recognized as a.StaticList.List and not java.util.List 
+        htmlTool.add(Arrays.asList(
+                "org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/a/StaticList.java",
+                "org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStatic.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/TestStatic.html");
+
+        // TestStatic should etends a.StaticList.List".
+        final Matcher extendedClass = Pattern.compile("extends\\s+<a[^>]*href='[^']*(((java/util/)|(a/StaticList\\.))List)\\.html'[^>]*>((StaticList\\.)?List)</a>").matcher(testAdapterDoc);
+        
+        assertTrue("TestStatic interface should extends List", extendedClass.find());
+
+        assertEquals("Classes from imported packages should shadow classes from default packages", "a/StaticList.List", extendedClass.group(1));
+        assertEquals("Classes from imported packages should shadow classes from default packages", "StaticList.List", extendedClass.group(5));
+    }
+
     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/StaticList.java b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/a/StaticList.java
new file mode 100644
index 0000000000..49938d5ebe
--- /dev/null
+++ b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/a/StaticList.java
@@ -0,0 +1,6 @@
+package org.codehaus.groovy.tools.groovydoc.testfiles.groovy_10593.a;
+
+public interface StaticList {
+    public static interface List {}
+    public static interface ListAlias {}
+}
\ No newline at end of file
diff --git a/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStar.groovy b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStar.groovy
new file mode 100644
index 0000000000..5ee0c9900d
--- /dev/null
+++ b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStar.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.*;
+
+public interface TestStar 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/TestStar.java b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStar.java
new file mode 100644
index 0000000000..5ee0c9900d
--- /dev/null
+++ b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStar.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.*;
+
+public interface TestStar 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/TestStatic.groovy b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStatic.groovy
new file mode 100644
index 0000000000..916c93ea8a
--- /dev/null
+++ b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStatic.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.StaticList.List as List;
+
+public interface TestStatic 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/TestStatic.java b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStatic.java
new file mode 100644
index 0000000000..45d2f8d5c0
--- /dev/null
+++ b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStatic.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.StaticList.List;
+
+public interface TestStatic extends List {}
\ No newline at end of file


[groovy] 06/06: minor refactor (mostly formatting)

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 0b572ec5e7714d945d40d307c4d3d33d39170b82
Author: Paul King <pa...@asert.com.au>
AuthorDate: Tue May 3 21:21:47 2022 +1000

    minor refactor (mostly formatting)
---
 .../groovy/tools/groovydoc/SimpleGroovyClassDoc.java     | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
index 00e24681f5..d56904deca 100644
--- a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
+++ b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
@@ -686,14 +686,16 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
                 targetClassName = importName.substring(0, importName.length() - 1) + baseName;
             }
             // need this for correct resolution of static imports
-            if (targetClassName != null){
+            if (targetClassName != null) {
                 GroovyClassDoc doc = null;
-                Optional<Name>  name = new JavaParser().parseName(targetClassName.replace('/','.')).getResult();
-                String staticPart = "";
-                while (doc == null && name.isPresent()) {               
-                    doc = ((SimpleGroovyRootDoc)rootDoc).classNamedExact(name.get().asString().replace('.','/')+staticPart);
-                    staticPart = "."+name.get().getIdentifier()+staticPart;
-                    name = name.get().getQualifier();
+                Optional<Name> maybeName = new JavaParser().parseName(targetClassName.replace('/', '.')).getResult();
+                StringBuilder staticPart = new StringBuilder();
+                while (doc == null && maybeName.isPresent()) {
+                    Name name = maybeName.get();
+                    doc = ((SimpleGroovyRootDoc) rootDoc).classNamedExact(name.asString().replace('.', '/') + staticPart.toString());
+                    staticPart.insert(0, name.getIdentifier());
+                    staticPart.insert(0, ".");
+                    maybeName = name.getQualifier();
                 }
                 if (doc != null) return doc;
             }


[groovy] 04/06: GROOVY-10593: add new test cases and bugfix for static imports

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit dd0306d54397a61730b3d85a4bbd28bd10355970
Author: Stephane Talbot <St...@univ-savoie.fr>
AuthorDate: Sun Apr 24 18:24:39 2022 +0200

    GROOVY-10593: add new test cases and bugfix for static imports
---
 .../tools/groovydoc/SimpleGroovyClassDoc.java      | 25 +++++++--
 .../groovy/tools/groovydoc/GroovyDocToolTest.java  | 63 ++++++++++++++++++++++
 .../groovy_10593/b/TestStaticAlias.groovy          |  5 ++
 .../testfiles/groovy_10593/b/TestStaticStar.groovy |  5 ++
 .../testfiles/groovy_10593/b/TestStaticStar.java   |  5 ++
 5 files changed, 99 insertions(+), 4 deletions(-)

diff --git a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
index 887fcae01f..2c40d62343 100644
--- a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
+++ b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
@@ -18,6 +18,9 @@
  */
 package org.codehaus.groovy.tools.groovydoc;
 
+import com.github.javaparser.ast.expr.Name;
+import com.github.javaparser.JavaParser;
+
 import org.codehaus.groovy.groovydoc.GroovyAnnotationRef;
 import org.codehaus.groovy.groovydoc.GroovyClassDoc;
 import org.codehaus.groovy.groovydoc.GroovyConstructorDoc;
@@ -38,6 +41,7 @@ import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.StringTokenizer;
 import java.util.regex.Matcher;
@@ -673,11 +677,24 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
     private GroovyClassDoc resolveInternalClassDocFromImport(GroovyRootDoc rootDoc, String baseName) {
         if (isPrimitiveType(baseName)) return null;
         for (String importName : importedClassesAndPackages) {
-            if (importName.endsWith("/" + baseName)) {
-                GroovyClassDoc doc = ((SimpleGroovyRootDoc)rootDoc).classNamedExact(importName);
-                if (doc != null) return doc;
+            String targetClassName = null;
+            if (aliases.containsKey(baseName)) {
+                targetClassName = aliases.get(baseName);
+            } else if (importName.endsWith("/" + baseName)) {
+                targetClassName = importName;
             } else if (importName.endsWith("/*")) {
-                GroovyClassDoc doc = ((SimpleGroovyRootDoc)rootDoc).classNamedExact(importName.substring(0, importName.length() - 1) + baseName);
+                targetClassName = importName.substring(0, importName.length() - 1) + baseName;
+            }
+            // need this for correct resolution of static imports
+            if (targetClassName != null){
+                GroovyClassDoc doc = null;
+                Optional<Name>  name = new JavaParser().parseName(targetClassName.replace('/','.')).getResult();
+                String staticPart = "";
+                while (doc == null && name.isPresent()) {               
+                    doc = ((SimpleGroovyRootDoc)rootDoc).classNamedExact(name.get().asString().replace('.','/')+staticPart);
+                    staticPart = "."+name.get().getIdentifier()+staticPart;
+                    name = name.get().getQualifier();
+                }
                 if (doc != null) return doc;
             }
         }
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 4e7a62ca98..b058508b95 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
@@ -877,6 +877,69 @@ public class GroovyDocToolTest extends GroovyTestCase {
         assertEquals("Classes from imported packages should shadow classes from default packages", "StaticList.List", extendedClass.group(5));
     }
 
+    public void testGroovyExtendsStaticImportedAliasesClassWithNameWhichExistInDefaultPackages() throws Exception {
+        // Groovy interface b.TestStatic imports a.StaticList.ListAlias as List and extends List.
+        // List should be recognized as a.StaticList.List and not java.util.List 
+        htmlTool.add(Arrays.asList(
+                "org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/a/StaticList.java",
+                "org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStaticAlias.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/TestStaticAlias.html");
+
+        // TestStatic should etends a.StaticList.List
+        final Matcher extendedClass = Pattern.compile("extends\\s+<a[^>]*href='[^']*(((java/util/)|(a/StaticList\\.))List(Alias)?)\\.html'[^>]*>((StaticList\\.)?List(Alias)?)</a>").matcher(testAdapterDoc);
+        
+        assertTrue("TestStatic interface should extends List", extendedClass.find());
+
+        assertEquals("Classes from imported packages should shadow classes from default packages", "a/StaticList.ListAlias", extendedClass.group(1));
+        assertEquals("Classes from imported packages should shadow classes from default packages", "StaticList.ListAlias", extendedClass.group(6));
+    }
+
+    public void testGroovyExtendsStaticStarImportedClassWithNameWhichExistInDefaultPackages() throws Exception {
+        // Groovy interface b.TestStaticStar imports a.StaticList.* and extends List.
+        // List should be recognized as a.StaticList.List and not java.util.List 
+        htmlTool.add(Arrays.asList(
+                "org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/a/StaticList.java",
+                "org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStaticStar.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/TestStaticStar.html");
+
+        // TestStatic should etends a.StaticList.List
+        final Matcher extendedClass = Pattern.compile("extends\\s+<a[^>]*href='[^']*(((java/util/)|(a/StaticList\\.))List)\\.html'[^>]*>((StaticList\\.)?List)</a>").matcher(testAdapterDoc);
+        
+        assertTrue("TestStaticStar interface should extends List", extendedClass.find());
+
+        assertEquals("Classes from imported packages should shadow classes from default packages", "a/StaticList.List", extendedClass.group(1));
+        assertEquals("Classes from imported packages should shadow classes from default packages", "StaticList.List", extendedClass.group(5));
+    }
+
+    public void testJavaExtendsStaticStarImportedClassWithNameWhichExistInDefaultPackages() throws Exception {
+        // Java interface b.TestStaticStar imports a.StaticList.* and extends List.
+        // List should be recognized as a.StaticList.List and not java.util.List 
+        htmlTool.add(Arrays.asList(
+                "org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/a/StaticList.java",
+                "org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStaticStar.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/TestStaticStar.html");
+
+        // TestStatic should etends a.StaticList.List
+        final Matcher extendedClass = Pattern.compile("extends\\s+<a[^>]*href='[^']*(((java/util/)|(a/StaticList\\.))List)\\.html'[^>]*>((StaticList\\.)?List)</a>").matcher(testAdapterDoc);
+        
+        assertTrue("TestStaticStar interface should extends List", extendedClass.find());
+
+        assertEquals("Classes from imported packages should shadow classes from default packages", "a/StaticList.List", extendedClass.group(1));
+        assertEquals("Classes from imported packages should shadow classes from default packages", "StaticList.List", extendedClass.group(5));
+    }
+
     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/b/TestStaticAlias.groovy b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStaticAlias.groovy
new file mode 100644
index 0000000000..6581668afa
--- /dev/null
+++ b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStaticAlias.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.StaticList.ListAlias as List;
+
+public interface TestStaticAlias 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/TestStaticStar.groovy b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStaticStar.groovy
new file mode 100644
index 0000000000..7a5b294160
--- /dev/null
+++ b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStaticStar.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.StaticList.*;
+
+public interface TestStaticStar 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/TestStaticStar.java b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStaticStar.java
new file mode 100644
index 0000000000..7a5b294160
--- /dev/null
+++ b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/testfiles/groovy_10593/b/TestStaticStar.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.StaticList.*;
+
+public interface TestStaticStar extends List {}
\ No newline at end of file


[groovy] 03/06: bugfix: (groovy-doc) add star imports in the list of imports used by SimpleGroovyClassDoc

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 52cc49ffe0801b9891acba23f7d5302323c9e47a
Author: Stephane Talbot <St...@univ-savoie.fr>
AuthorDate: Sun Apr 24 16:32:05 2022 +0200

    bugfix: (groovy-doc) add star imports in the list of imports used by SimpleGroovyClassDoc
---
 .../src/main/java/org/apache/groovy/antlr/GroovydocVisitor.java       | 4 ++++
 .../org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java     | 2 +-
 .../codehaus/groovy/tools/groovydoc/antlr4/GroovydocJavaVisitor.java  | 1 +
 3 files changed, 6 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 1f90685fd6..b1fa2a06ae 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
@@ -97,6 +97,10 @@ public class GroovydocVisitor extends ClassCodeVisitorSupport {
                 aliases.put(iNode.getAlias(), name.replace('.', '/'));
             }
         }
+        for (ImportNode iNode : node.getModule().getStarImports()) {
+            String name = iNode.getPackageName()+"*";
+            imports.add(name.replace('.', '/'));
+        }
         String name = node.getNameWithoutPackage();
 
         if (node instanceof InnerClassNode) {
diff --git a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
index d0ab5d9fc3..887fcae01f 100644
--- a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
+++ b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
@@ -677,7 +677,7 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
                 GroovyClassDoc doc = ((SimpleGroovyRootDoc)rootDoc).classNamedExact(importName);
                 if (doc != null) return doc;
             } else if (importName.endsWith("/*")) {
-                GroovyClassDoc doc = ((SimpleGroovyRootDoc)rootDoc).classNamedExact(importName.substring(0, importName.length() - 2) + baseName);
+                GroovyClassDoc doc = ((SimpleGroovyRootDoc)rootDoc).classNamedExact(importName.substring(0, importName.length() - 1) + baseName);
                 if (doc != null) return doc;
             }
         }
diff --git a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/antlr4/GroovydocJavaVisitor.java b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/antlr4/GroovydocJavaVisitor.java
index 9dcd3b0c5c..91acd2ef40 100644
--- a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/antlr4/GroovydocJavaVisitor.java
+++ b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/antlr4/GroovydocJavaVisitor.java
@@ -82,6 +82,7 @@ public class GroovydocJavaVisitor extends VoidVisitorAdapter<Object> {
         String qual = qualPath.map(value -> value.asString().replace('.', '/') + "/").orElse("");
         String id = n.getName().getIdentifier();
         String name = qual + id;
+        if (n.isAsterisk()) name +="/*";
         imports.add(name);
         aliases.put(id, name);
         super.visit(n, arg);