From 94499e06295b4d3754c7228ad4e5710d2ac5ba42 Mon Sep 17 00:00:00 2001 From: Alexander Kriegisch Date: Fri, 28 May 2021 15:11:32 +0700 Subject: [PATCH] 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 --- .../aspectj/tools/ajdoc/JavadocRunner.java | 50 ++++++++++++------- .../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 options, List files) { - DocumentationTool doctool = ToolProvider.getSystemDocumentationTool(); - StandardJavaFileManager fm = doctool.getStandardFileManager(null, null, null); - Iterable 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 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); + } } /** -- 2.39.5