From f70aeb5ed94ccdfeaa8ab7b1260a6fcceb490b5a Mon Sep 17 00:00:00 2001 From: Lars Grefer Date: Fri, 14 Aug 2020 00:22:30 +0200 Subject: [PATCH] Always run javadoc using the ToolProvider API `com.sun.tools.javadoc.Main` isn't available in recent Java versions (13+) Signed-off-by: Lars Grefer --- .../aspectj/tools/ajdoc/JavadocRunner.java | 71 ------------------- .../java/org/aspectj/tools/ajdoc/Main.java | 20 ++---- 2 files changed, 4 insertions(+), 87 deletions(-) diff --git a/ajdoc/src/main/java/org/aspectj/tools/ajdoc/JavadocRunner.java b/ajdoc/src/main/java/org/aspectj/tools/ajdoc/JavadocRunner.java index 64e53eead..ed13fabe4 100644 --- a/ajdoc/src/main/java/org/aspectj/tools/ajdoc/JavadocRunner.java +++ b/ajdoc/src/main/java/org/aspectj/tools/ajdoc/JavadocRunner.java @@ -30,77 +30,6 @@ import javax.tools.ToolProvider; */ class JavadocRunner { - static boolean has14ToolsAvailable() { - try { - Class jdMainClass = com.sun.tools.javadoc.Main.class; - Class[] paramTypes = new Class[] { String[].class }; - jdMainClass.getMethod("execute", paramTypes); - } catch (NoClassDefFoundError e) { - return false; - } catch (UnsupportedClassVersionError e) { - return false; - } catch (NoSuchMethodException e) { - return false; - } - return true; - } - - static void callJavadoc(String[] javadocargs) { - // final SecurityManager defaultSecurityManager = System.getSecurityManager(); - // - // System.setSecurityManager( new SecurityManager() { - // public void checkExit(int status) { - // if (status == 0) { - // throw new SecurityException(); - // } - // else { - // System.setSecurityManager(defaultSecurityManager); - // //System.out.println("Error: javadoc exited unexpectedly"); - // System.exit(0); - // throw new SecurityException(); - // } - // } - // public void checkPermission( java.security.Permission permission ) { - // if ( defaultSecurityManager != null ) - // defaultSecurityManager.checkPermission( permission ); - // } - // public void checkPermission( java.security.Permission permission, - // Object context ) { - // if ( defaultSecurityManager != null ) - // defaultSecurityManager.checkPermission( permission, context ); - // } - // } ); - - try { - // for JDK 1.4 and above call the execute method... - Class jdMainClass = com.sun.tools.javadoc.Main.class; - Method executeMethod = null; - try { - Class[] paramTypes = new Class[] { String[].class }; - executeMethod = jdMainClass.getMethod("execute", paramTypes); - } catch (NoSuchMethodException e) { - com.sun.tools.javadoc.Main.main(javadocargs); - // throw new UnsupportedOperationException("ajdoc requires a tools library from JDK 1.4 or later."); - } - try { - executeMethod.invoke(null, new Object[] { javadocargs }); - } catch (IllegalArgumentException e1) { - throw new RuntimeException("Failed to invoke javadoc"); - } catch (IllegalAccessException e1) { - throw new RuntimeException("Failed to invoke javadoc"); - } catch (InvocationTargetException e1) { - throw new RuntimeException("Failed to invoke javadoc"); - } - // main method is documented as calling System.exit() - which stops us dead in our tracks - // com.sun.tools.javadoc.Main.main( javadocargs ); - } catch (SecurityException se) { - // Do nothing since we expect it to be thrown - // System.out.println( ">> se: " + se.getMessage() ); - } - // Set the security manager back - // System.setSecurityManager(defaultSecurityManager); - } - public static void callJavadocViaToolProvider(Vector options, List files) { DocumentationTool doctool = ToolProvider.getSystemDocumentationTool(); StandardJavaFileManager fm = doctool.getStandardFileManager(null, null, null); diff --git a/ajdoc/src/main/java/org/aspectj/tools/ajdoc/Main.java b/ajdoc/src/main/java/org/aspectj/tools/ajdoc/Main.java index 2b2a24a26..26857b41c 100644 --- a/ajdoc/src/main/java/org/aspectj/tools/ajdoc/Main.java +++ b/ajdoc/src/main/java/org/aspectj/tools/ajdoc/Main.java @@ -35,7 +35,6 @@ import org.aspectj.asm.AsmManager; import org.aspectj.bridge.IMessage; import org.aspectj.bridge.Version; import org.aspectj.util.FileUtil; -import org.aspectj.util.LangUtil; /** * This is an old implementation of ajdoc that does not use an OO style. However, it does the job, and should serve to evolve a @@ -104,11 +103,6 @@ public class Main implements Config { public static void main(String[] args) { clearState(); - if (!JavadocRunner.has14ToolsAvailable()) { - System.err.println("ajdoc requires a JDK 1.4 or later tools jar - exiting"); - aborted = true; - return; - } // STEP 1: parse the command line and do other global setup sourcepath.addElement("."); // add the current directory to the classapth @@ -267,11 +261,9 @@ public class Main implements Config { for (int k = 0; k < fileList.size(); k++) { javadocargs[numExtraArgs + options.size() + packageList.size() + k] = fileList.elementAt(k); } - if (LangUtil.is19VMOrGreater()) { - options = new Vector<>(); - for (String a: javadocargs) { - options.add(a); - } + options = new Vector<>(); + for (String a: javadocargs) { + options.add(a); } } else { javadocargs = new String[options.size() + signatureFiles.length]; @@ -285,11 +277,7 @@ public class Main implements Config { files.add(StructureUtil.translateAjPathName(signatureFile.getCanonicalPath())); } } - if (LangUtil.is19VMOrGreater()) { - JavadocRunner.callJavadocViaToolProvider(options, files); - } else { - JavadocRunner.callJavadoc(javadocargs); - } + JavadocRunner.callJavadocViaToolProvider(options, files); } /** -- 2.39.5