diff --git a/hadoop-common-project/hadoop-annotations/pom.xml b/hadoop-common-project/hadoop-annotations/pom.xml index bc7a2ef60b696..86bc5d9237922 100644 --- a/hadoop-common-project/hadoop-annotations/pom.xml +++ b/hadoop-common-project/hadoop-annotations/pom.xml @@ -31,50 +31,24 @@ - jdiff + io.github.zhtttylz jdiff provided - - - jdk1.8 - - 1.8 - - - - jdk.tools - jdk.tools - 1.8 - system - ${java.home}/../lib/tools.jar - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - add-source - generate-sources - - add-source - - - - ${basedir}/src/main/java8 - - - - - - - - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + + + --add-modules + jdk.javadoc + + + + + diff --git a/hadoop-common-project/hadoop-annotations/src/main/java8/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsJDiffDoclet.java b/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsJDiffDoclet.java similarity index 56% rename from hadoop-common-project/hadoop-annotations/src/main/java8/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsJDiffDoclet.java rename to hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsJDiffDoclet.java index 5cc422f58938b..ab55d758edb06 100644 --- a/hadoop-common-project/hadoop-annotations/src/main/java8/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsJDiffDoclet.java +++ b/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsJDiffDoclet.java @@ -17,31 +17,55 @@ */ package org.apache.hadoop.classification.tools; -import com.sun.javadoc.DocErrorReporter; -import com.sun.javadoc.LanguageVersion; -import com.sun.javadoc.RootDoc; +import jdk.javadoc.doclet.DocletEnvironment; +import jdk.javadoc.doclet.Reporter; +import javax.lang.model.SourceVersion; import jdiff.JDiff; /** - * A Doclet - * for excluding elements that are annotated with + * + * Doclet for excluding elements that are annotated with * {@link org.apache.hadoop.classification.InterfaceAudience.Private} or * {@link org.apache.hadoop.classification.InterfaceAudience.LimitedPrivate}. * It delegates to the JDiff Doclet, and takes the same options. */ -public class ExcludePrivateAnnotationsJDiffDoclet { - - public static LanguageVersion languageVersion() { - return LanguageVersion.JAVA_1_5; +public final class ExcludePrivateAnnotationsJDiffDoclet { + + /** + * Returns the source version used by this doclet. + * + * @return the supported source version + */ + public static SourceVersion languageVersion() { + return SourceVersion.RELEASE_17; } - - public static boolean start(RootDoc root) { + + /** + * Legacy doclet entry point used by JDiff/Javadoc. + * + * @param root the doclet environment + * @return true if the doclet completed successfully + */ + public static boolean start(DocletEnvironment root) { System.out.println( ExcludePrivateAnnotationsJDiffDoclet.class.getSimpleName()); return JDiff.start(RootDocProcessor.process(root)); } - + + /** + * Utility class: provides only static entry points for JDiff. + */ + private ExcludePrivateAnnotationsJDiffDoclet() { + } + + /** + * Returns the length of a supported option. + * + * @param option the option name + * @return the number of arguments including the option itself + */ public static int optionLength(String option) { Integer length = StabilityOptions.optionLength(option); if (length != null) { @@ -49,9 +73,16 @@ public static int optionLength(String option) { } return JDiff.optionLength(option); } - + + /** + * Validates options before running the doclet. + * + * @param options the options to validate + * @param reporter the reporter to use for diagnostics + * @return true if the options are valid + */ public static boolean validOptions(String[][] options, - DocErrorReporter reporter) { + Reporter reporter) { StabilityOptions.validOptions(options, reporter); String[][] filteredOptions = StabilityOptions.filterOptions(options); return JDiff.validOptions(filteredOptions, reporter); diff --git a/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsStandardDoclet.java b/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsStandardDoclet.java new file mode 100644 index 0000000000000..31fa2fd7c79dd --- /dev/null +++ b/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsStandardDoclet.java @@ -0,0 +1,203 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.classification.tools; + +import jdk.javadoc.doclet.Doclet; +import jdk.javadoc.doclet.DocletEnvironment; +import jdk.javadoc.doclet.Reporter; +import javax.lang.model.SourceVersion; + +import jdk.javadoc.doclet.StandardDoclet; + +import java.util.Locale; +import java.util.Set; + +/** + * + * Doclet for excluding elements that are + * annotated with {@link org.apache.hadoop.classification.InterfaceAudience.Private} + * or {@link org.apache.hadoop.classification.InterfaceAudience.LimitedPrivate}. + * It delegates to the Standard Doclet, and takes the same options. + */ +public class ExcludePrivateAnnotationsStandardDoclet implements Doclet { + + private final StandardDoclet delegate = new StandardDoclet(); + private Reporter reporter; + private Locale locale; + + /** + * Public no-arg constructor required by the Javadoc tool. + */ + public ExcludePrivateAnnotationsStandardDoclet() { + } + + /** + * Returns the source version used by this doclet. + * + * @return the supported source version + */ + public static SourceVersion languageVersion() { + return SourceVersion.RELEASE_17; + } + + /** + * Legacy doclet entry point used by Javadoc. + * + * @param root the doclet environment + * @return true if the doclet completed successfully + */ + public static boolean start(DocletEnvironment root) { + System.out.println(ExcludePrivateAnnotationsStandardDoclet.class.getSimpleName()); + if (root.getSpecifiedElements().isEmpty()) { + return true; + } + return new StandardDoclet().run(root); + } + + /** + * Returns the length of a supported option. + * + * @param option the option name + * @return the number of arguments including the option itself + */ + public static int optionLength(String option) { + Integer length = StabilityOptions.optionLength(option); + if (length != null) { + return length; + } + for (Doclet.Option o : new StandardDoclet().getSupportedOptions()) { + for (String name : o.getNames()) { + if (name.equals(option)) { + return o.getArgumentCount() + 1; + } + } + } + return 0; + } + + /** + * Validates options before running the doclet. + * + * @param options the options to validate + * @param reporter the reporter to use for diagnostics + * @return true if the options are valid + */ + public static boolean validOptions(String[][] options, Reporter reporter) { + StabilityOptions.validOptions(options, reporter); + return true; + } + + @Override + public void init(Locale initLocale, Reporter initReporter) { + this.locale = initLocale; + this.reporter = initReporter; + delegate.init(locale, reporter); + } + + @Override + public String getName() { + return getClass().getSimpleName(); + } + + @Override + public Set