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

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


The following commit(s) were added to refs/heads/master by this push:
     new 65eee6b93c Fix missing module name in Javadoc URLs for Show Javadoc, 
etc.
     new 5ef781bbba Merge pull request #4363 from neilcsmith-net/javadoc-jpms
65eee6b93c is described below

commit 65eee6b93c974dc6657ceae979cd50bdc67fd578
Author: Neil C Smith <neilcsm...@apache.org>
AuthorDate: Mon Jul 11 17:11:16 2022 +0100

    Fix missing module name in Javadoc URLs for Show Javadoc, etc.
---
 .../modules/java/source/JavadocHelper.java         | 71 ++++++++++++++++------
 1 file changed, 52 insertions(+), 19 deletions(-)

diff --git 
a/java/java.source.base/src/org/netbeans/modules/java/source/JavadocHelper.java 
b/java/java.source.base/src/org/netbeans/modules/java/source/JavadocHelper.java
index c0db82ecd2..070d925daf 100644
--- 
a/java/java.source.base/src/org/netbeans/modules/java/source/JavadocHelper.java
+++ 
b/java/java.source.base/src/org/netbeans/modules/java/source/JavadocHelper.java
@@ -57,6 +57,8 @@ import java.util.logging.Logger;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ElementKind;
 import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.ModuleElement;
+import javax.lang.model.element.Name;
 import javax.lang.model.element.PackageElement;
 import javax.lang.model.element.TypeElement;
 import javax.lang.model.element.VariableElement;
@@ -578,6 +580,7 @@ public class JavadocHelper {
             throw new IllegalArgumentException("Cannot pass null as an 
argument of the SourceUtils.getJavadoc"); // NOI18N
         }
         ClassSymbol clsSym = null;
+        String moduleName = null;
         String pkgName;
         String pageName;
         boolean buildFragment = false;
@@ -592,6 +595,7 @@ public class JavadocHelper {
             if (clsSym == null) {
                 return Collections.emptyList();
             }
+            moduleName = moduleNameFor(element);
             pkgName = FileObjects.convertPackage2Folder(((PackageElement) 
element).getQualifiedName().toString());
             pageName = PACKAGE_SUMMARY;
         } else if (element.getKind() == ElementKind.MODULE) {
@@ -615,6 +619,7 @@ public class JavadocHelper {
             if (clsSym == null) {
                 return Collections.emptyList();
             }
+            moduleName = moduleNameFor(e);
             pkgName = FileObjects.convertPackage2Folder(((PackageElement) 
e).getQualifiedName().toString());
             pageName = sb.toString();
             buildFragment = element != clsSym;
@@ -626,6 +631,7 @@ public class JavadocHelper {
         if (clsSym.classfile != null) {
             try {
                 final URL classFile = clsSym.classfile.toUri().toURL();
+                final String moduleNameF = moduleName;
                 final String pkgNameF = pkgName;
                 final String pageNameF = pageName;
                 final Collection<? extends CharSequence> fragment = 
buildFragment ? getFragment(element) : Collections.<CharSequence>emptySet();
@@ -633,7 +639,7 @@ public class JavadocHelper {
                     @Override
                     @NonNull
                     public List<TextStream> call() throws Exception {
-                        return findJavadoc(classFile, pkgNameF, pageNameF, 
fragment, remoteJavadocPolicy);
+                        return findJavadoc(classFile, moduleNameF, pkgNameF, 
pageNameF, fragment, remoteJavadocPolicy);
                     }
                 };
                 final boolean sync = cancel == null || remoteJavadocPolicy != 
RemoteJavadocPolicy.USE;
@@ -676,9 +682,26 @@ public class JavadocHelper {
 
     private static final String PACKAGE_SUMMARY = "package-summary"; // NOI18N
 
+    private static String moduleNameFor(Element element) {
+        Element e = element;
+        while (e != null && e.getKind() != ElementKind.MODULE) {
+            e = element.getEnclosingElement();
+        }
+        if (e == null) {
+            return null;
+        }
+        String name = ((ModuleElement) e).getQualifiedName().toString();
+        if (!name.isEmpty()) {
+            return name;
+        } else {
+            return null;
+        }
+    }
+
     @NonNull
     private static List<TextStream> findJavadoc(
             @NonNull final URL classFile,
+            final String moduleName,
             @NonNull final String pkgName,
             @NonNull final String pageName,
             @NonNull final Collection<? extends CharSequence> fragment,
@@ -762,7 +785,12 @@ binRoots:   for (URL binary : binaries) {
                                 throw new 
IllegalArgumentException(remoteJavadocPolicy.name());
                         }
                     }
-                    URL url = new URL(root, pkgName + "/" + pageName + 
".html");
+                    URL url;
+                    if (moduleName != null) {
+                        url = new URL(root, moduleName + "/" + pkgName + "/" + 
pageName + ".html");
+                    } else {
+                        url = new URL(root, pkgName + "/" + pageName + 
".html");
+                    }
                     InputStream is = null;
                     String rootS = root.toString();
                     boolean useKnownGoodRoots = result.length == 1 && isRemote;
@@ -775,25 +803,30 @@ binRoots:   for (URL binary : binaries) {
                             } catch (InterruptedIOException iioe)  {
                                 throw iioe;
                             } catch (IOException x) {
-                                // Some libraries like OpenJFX prefix their
-                                // javadoc by module, similar to the JDK.
-                                // Only search there when the default fails
-                                // to avoid additional I/O.
-                                // NOTE: No multi-release jar support for now.
-                                URL moduleInfo = new URL(binary, 
"module-info.class");
-                                try (InputStream classData = 
moduleInfo.openStream()) {
-                                    ClassFile clazz = new ClassFile(classData, 
false);
-                                    Module module = clazz.getModule();
-                                    if (module == null) {
-                                        throw x;
-                                    }
-                                    String moduleName = module.getName();
-                                    if (moduleName == null) {
-                                        throw x;
+                                if (moduleName == null) {
+                                    // Some libraries like OpenJFX prefix their
+                                    // javadoc by module, similar to the JDK.
+                                    // Only search there when the default fails
+                                    // to avoid additional I/O.
+                                    // NOTE: No multi-release jar support for 
now.
+                                    URL moduleInfo = new URL(binary, 
"module-info.class");
+                                    try (InputStream classData = 
moduleInfo.openStream()) {
+                                        ClassFile clazz = new 
ClassFile(classData, false);
+                                        Module module = clazz.getModule();
+                                        if (module == null) {
+                                            throw x;
+                                        }
+                                        String modName = module.getName();
+                                        if (modName == null) {
+                                            throw x;
+                                        }
+                                        url = new URL(root, modName + "/" + 
pkgName + "/" + pageName + ".html");
                                     }
-                                    url = new URL(root, moduleName + "/" + 
pkgName + "/" + pageName + ".html");
-                                    is = openStream(url, 
Bundle.LBL_HTTPJavadocDownload());
+                                } else {
+                                    // fallback to without module name
+                                    url = new URL(root, pkgName + "/" + 
pageName + ".html");
                                 }
+                                is = openStream(url, 
Bundle.LBL_HTTPJavadocDownload());
                             }
                             if (useKnownGoodRoots) {
                                 knownGoodRoots.add(rootS);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to