From f7ac53e5e9bdabe081ae9f1dd8aebdf8431d4818 Mon Sep 17 00:00:00 2001 From: Jonathan Gibbons Date: Wed, 2 May 2018 11:11:06 -0700 Subject: [PATCH] 8201817: Taglet.init should be called with the "primary" doclet Reviewed-by: ksrini --- .../classes/jdk/javadoc/doclet/StandardDoclet.java | 2 +- .../internal/doclets/formats/html/HtmlDoclet.java | 5 +++-- .../internal/doclets/toolkit/BaseConfiguration.java | 13 ++++++++++++- .../doclet/testUserTaglet/TestUserTaglet.java | 6 +++--- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/doclet/StandardDoclet.java b/src/jdk.javadoc/share/classes/jdk/javadoc/doclet/StandardDoclet.java index 418a4d9664e..d7c77dcdffa 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/doclet/StandardDoclet.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/doclet/StandardDoclet.java @@ -44,7 +44,7 @@ public class StandardDoclet implements Doclet { private final HtmlDoclet htmlDoclet; public StandardDoclet() { - htmlDoclet = new HtmlDoclet(); + htmlDoclet = new HtmlDoclet(this); } @Override diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java index 632dca46e19..d72122029d9 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java @@ -31,6 +31,7 @@ import javax.lang.model.element.ModuleElement; import javax.lang.model.element.PackageElement; import javax.lang.model.element.TypeElement; +import jdk.javadoc.doclet.Doclet; import jdk.javadoc.doclet.DocletEnvironment; import jdk.javadoc.doclet.Reporter; import jdk.javadoc.internal.doclets.toolkit.AbstractDoclet; @@ -59,8 +60,8 @@ import jdk.javadoc.internal.doclets.toolkit.util.IndexBuilder; */ public class HtmlDoclet extends AbstractDoclet { - public HtmlDoclet() { - configuration = new HtmlConfiguration(this); + public HtmlDoclet(Doclet parent) { + configuration = new HtmlConfiguration(parent); } @Override // defined by Doclet diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/BaseConfiguration.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/BaseConfiguration.java index 3f6e90d5e29..de5f9db254e 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/BaseConfiguration.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/BaseConfiguration.java @@ -42,6 +42,9 @@ import com.sun.tools.javac.util.DefinedBy.Api; import jdk.javadoc.doclet.Doclet; import jdk.javadoc.doclet.DocletEnvironment; import jdk.javadoc.doclet.Reporter; +import jdk.javadoc.doclet.StandardDoclet; +import jdk.javadoc.doclet.Taglet; +import jdk.javadoc.internal.doclets.formats.html.HtmlDoclet; import jdk.javadoc.internal.doclets.toolkit.builders.BuilderFactory; import jdk.javadoc.internal.doclets.toolkit.taglets.TagletManager; import jdk.javadoc.internal.doclets.toolkit.util.DocFile; @@ -356,7 +359,15 @@ public abstract class BaseConfiguration { /** * Constructs the configurations needed by the doclet. * - * @param doclet the doclet that created this configuration + * @apiNote + * The {@code doclet} parameter is used when {@link Taglet#init(DocletEnvironment, Doclet) + * initializing tags}. + * Some doclets (such as the {@link StandardDoclet), may delegate to another + * (such as the {@link HtmlDoclet}). In such cases, the primary doclet (i.e + * {@code StandardDoclet}) should be provided here, and not any internal + * class like {@code HtmlDoclet}. + * + * @param doclet the doclet for this run of javadoc */ public BaseConfiguration(Doclet doclet) { this.doclet = doclet; diff --git a/test/langtools/jdk/javadoc/doclet/testUserTaglet/TestUserTaglet.java b/test/langtools/jdk/javadoc/doclet/testUserTaglet/TestUserTaglet.java index 4451d5c6887..1d6c2e3be23 100644 --- a/test/langtools/jdk/javadoc/doclet/testUserTaglet/TestUserTaglet.java +++ b/test/langtools/jdk/javadoc/doclet/testUserTaglet/TestUserTaglet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ /* * @test - * @bug 8176836 + * @bug 8176836 8201817 * @summary Provide Taglet with context * @library ../lib * @modules jdk.javadoc/jdk.javadoc.internal.tool @@ -52,7 +52,7 @@ public class TestUserTaglet extends JavadocTester { checkOutput("pkg/C.html", true, "
  • Element: CLASS C", "
  • Element supertypes: [java.lang.Object]", - "
  • Doclet: class jdk.javadoc.internal.doclets.formats.html.HtmlDoclet" + "
  • Doclet: class jdk.javadoc.doclet.StandardDoclet" ); } }