Public API for programmatic registration of Taglet?
Jonathan Gibbons
jonathan.gibbons at oracle.com
Wed May 2 18:23:30 UTC 2018
FYI, the Taglet.init issue has been addressed.
https://bugs.openjdk.java.net/browse/JDK-8201817
The issue about programmatic registration (addCustomTag) is still under
investigation.
-- Jon
On 4/18/18 9:08 AM, Martin Desruisseaux wrote:
>
> Hello
>
> I'm trying to write an extension of the standard doclet together with
> custom taglets in the same JAR file. The custom taglets and doclet
> need to share information. But I faced the following difficulties:
>
> When the Taglet.init(DocletEnvironment,Doclet) method is invoked, the
> doclet argument given by the caller is the internal HtmlDoclet wrapped
> by StandardDoclet, not my custom StandardDoclet subtype. So I can not
> get my doclet and taglet in touch that way.
>
> The lazy workaround - shared static fields - does not work because the
> taglet is loaded in a different class loader than the doclet. So even
> if I change a static field value from the taglet, the doclet never see
> that change. This is not a multi-threading issue; I tested with
> volatile static field. I also verified that the class loaders for the
> same class were different depending on whether the class of my JAR
> file is accessed from the doclet or from the taglet.
>
> I tried to wrap DocletEnvironment in order to return a customised
> ForwardingJavaFileManager, in an attempt to control which ClassLoader
> is used for loading the taglet. But the standard doclet does not seem
> to accept customized DocletEnvironment, as suggested by the error that
> I got:
>
> java.lang.ClassCastException: org.opengis.tools.doclet.ForwardingDocletEnvironment cannot be cast to jdk.javadoc/jdk.javadoc.internal.tool.DocEnvImpl
> at jdk.javadoc/jdk.javadoc.internal.doclets.toolkit.WorkArounds.<init>(WorkArounds.java:101)
> at jdk.javadoc/jdk.javadoc.internal.doclets.toolkit.AbstractDoclet.run(AbstractDoclet.java:108)
> at jdk.javadoc/jdk.javadoc.doclet.StandardDoclet.run(StandardDoclet.java:72)
> (...snip...)
>
> The jdk.javadoc.internal.doclets.toolkit.taglets.TagletManager class
> has public void addCustomTag(Taglet) method which seems perfect for my
> need, but I found no public API for accessing this functionality.
>
> Is there a public way for a doclet to know its registered taglets, or
> any other workaround that I may have missed? If not, would the
> following evolution of Javadoc tools be possible?
>
> * When extending the StandardDoclet, the doclet given in
> Taglet.init(...) method should be the user StandardDoclet instance
> instead than the JDK internal HtmlDoclet.
> * Alternatively, a public API for addCustomTag(…) functionality
> would also work.
>
> Regards,
>
> Martin
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/javadoc-dev/attachments/20180502/155ca5cc/attachment.html>
More information about the javadoc-dev
mailing list