diff options
author | Alexander Kriegisch <Alexander@Kriegisch.name> | 2021-05-28 15:11:32 +0700 |
---|---|---|
committer | Alexander Kriegisch <Alexander@Kriegisch.name> | 2021-05-28 16:27:34 +0700 |
commit | 94499e06295b4d3754c7228ad4e5710d2ac5ba42 (patch) | |
tree | 21c9e1ba1e9955713cfeb11ceca3b4a0bc5ed2c8 /ajdoc | |
parent | 520ed7b623263927b30fe1898b36f411490ba34d (diff) | |
download | aspectj-94499e06295b4d3754c7228ad4e5710d2ac5ba42.tar.gz aspectj-94499e06295b4d3754c7228ad4e5710d2ac5ba42.zip |
Revert "Always run javadoc using the ToolProvider API"
This reverts commit f70aeb5e, except for some commented-out parts of
code and an unused method. I also simplified the code, e.g. with regard
to exception handling, and did some more cosmetic stuff, but basically
it is a revert.
In order to make it compile on more recent JDKs which doe not have class
com.sun.tools.javadoc.Main, I used Class.forName in the method being
called on JDK 8 only.
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Diffstat (limited to 'ajdoc')
-rw-r--r-- | ajdoc/src/main/java/org/aspectj/tools/ajdoc/JavadocRunner.java | 50 | ||||
-rw-r--r-- | ajdoc/src/main/java/org/aspectj/tools/ajdoc/Main.java | 16 |
2 files changed, 48 insertions, 18 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 e1bbd9ad4..21c56d160 100644 --- a/ajdoc/src/main/java/org/aspectj/tools/ajdoc/JavadocRunner.java +++ b/ajdoc/src/main/java/org/aspectj/tools/ajdoc/JavadocRunner.java @@ -1,39 +1,55 @@ /* ******************************************************************* - * Copyright (c) 1999-2001 Xerox Corporation, + * Copyright (c) 1999-2001 Xerox Corporation, * 2002 Palo Alto Research Center, Incorporated (PARC). - * All rights reserved. - * This program and the accompanying materials are made available - * under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Xerox/PARC initial implementation + * All rights reserved. + * This program and the accompanying materials are made available + * under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Xerox/PARC initial implementation * Mik Kersten port to AspectJ 1.1+ code base * ******************************************************************/ package org.aspectj.tools.ajdoc; -import java.util.List; -import java.util.Vector; - import javax.tools.DocumentationTool; import javax.tools.DocumentationTool.DocumentationTask; import javax.tools.JavaFileObject; import javax.tools.StandardJavaFileManager; import javax.tools.ToolProvider; +import java.lang.reflect.InvocationTargetException; +import java.util.List; /** * @author Mik Kersten */ class JavadocRunner { + static void callJavadoc(String[] javadocArgs) { + try { + Class.forName("com.sun.tools.javadoc.Main") + .getMethod("execute", String[].class) + .invoke(null, new Object[] { javadocArgs }); + } + catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException("Failed to invoke javadoc", e); + } + } + public static void callJavadocViaToolProvider(Iterable<String> options, List<String> files) { - DocumentationTool doctool = ToolProvider.getSystemDocumentationTool(); - StandardJavaFileManager fm = doctool.getStandardFileManager(null, null, null); - Iterable<? extends JavaFileObject> jfos = fm.getJavaFileObjects(files.toArray(new String[0])); - DocumentationTask task = doctool.getTask(null/*standard System.err*/, null/*standard file manager*/, - null/*default diagnostic listener*/, null/*standard doclet*/, options, jfos); + DocumentationTool docTool = ToolProvider.getSystemDocumentationTool(); + StandardJavaFileManager fileManager = docTool.getStandardFileManager(null, null, null); + Iterable<? extends JavaFileObject> fileObjects = fileManager.getJavaFileObjects(files.toArray(new String[0])); + DocumentationTask task = docTool.getTask( + null, // default output writer (System.err) + null, // default file manager + null, // default diagnostic listener + null, // default doclet class + options, + fileObjects + ); task.call(); } } 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 53edcb42d..9f728a946 100644 --- a/ajdoc/src/main/java/org/aspectj/tools/ajdoc/Main.java +++ b/ajdoc/src/main/java/org/aspectj/tools/ajdoc/Main.java @@ -22,12 +22,20 @@ import java.io.FileOutputStream; import java.io.FileReader; import java.io.FilenameFilter; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Hashtable; +import java.util.LinkedList; +import java.util.List; +import java.util.StringTokenizer; +import java.util.Vector; 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 @@ -256,8 +264,10 @@ 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.is9VMOrGreater()) { options = new Vector<>(); Collections.addAll(options, javadocargs); + } } else { javadocargs = new String[options.size() + signatureFiles.length]; for (int k = 0; k < options.size(); k++) { @@ -270,7 +280,11 @@ public class Main implements Config { files.add(StructureUtil.translateAjPathName(signatureFile.getCanonicalPath())); } } + if (LangUtil.is9VMOrGreater()) { JavadocRunner.callJavadocViaToolProvider(options, files); + } else { + JavadocRunner.callJavadoc(javadocargs); + } } /** |