RFR : JDK-8219632: Remove reference to com.sun.javadoc API in RemoveOldDoclet test

Jonathan Gibbons jonathan.gibbons at oracle.com
Fri Mar 8 22:34:54 UTC 2019


Filed JDK-8220382

-- Jon


On 03/08/2019 02:26 PM, Jonathan Gibbons wrote:
>
> This note is for the record, since I just spent a bunch more time 
> understanding this change.
>
> Here is the net change in Start.java, from changeset 53884 (before the 
> initial fix in thie work to remove the old doclet) to the proposed 
> changeset.
>
> $ diff Start-before.java 
> src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java
> 411,427c411,412
> <             if (apiMode) {
> <                 com.sun.tools.javadoc.main.Start ostart
> <                         = new com.sun.tools.javadoc.main.Start(context);
> <                 return ostart.begin(docletClass, options, fileObjects)
> <                         ? OK
> <                         : ERROR;
> <             }
> <             warn("main.legacy_api");
> <             String[] array = options.toArray(new 
> String[options.size()]);
> <             int rc = com.sun.tools.javadoc.Main.execute(
> <                     messager.programName,
> <                     messager.getWriter(WriterKind.ERROR),
> <                     messager.getWriter(WriterKind.WARNING),
> <                     messager.getWriter(WriterKind.NOTICE),
> <                     docletClass.getName(),
> <                     array);
> <             return (rc == 0) ? OK : ERROR;
> ---
> >             error("main.not_a_doclet", docletClass.getName());
> >             return ERROR;
>
> It's notable, and confusing, that this change is *only* about handling 
> the case when a Doclet class is passed in through the API, and the 
> code was previously trying to disambiguate between old-style doclets 
> and new-style doclets.  In hindsight, it is a regrttable, but 
> understandable decision to have allowed a Doclet class to be passed 
> in, instead of a Doclet instance -- and the roots of that decision go 
> all the way back to original javadoc.
>
> The net result is that instantiating doclets is still a bit of a mess. 
> See for example, the almost-duplicated code between 750-759 and 
> 771-781. And in both of those places, we just instantiate the class, 
> without trying to create an instance, which is done in lines 400-409.
>
> It would be better to refactor the code so that Start.preprocess 
> returns a Doclet, not a Class<?>, meaning that the instantiation 
> should be moved from Start.begin into Start.preprocess.
>
> -- Jon
>
>
>
> On 03/08/2019 01:35 PM, Jonathan Gibbons wrote:
>>
>> Priya,
>>
>> In the test, you use a literal string for the test class name. A 
>> better style is to use the name of the .class literal, as in
>>
>> 46 static final String Doclet_CLASS_NAME = TestDoclet.class.getName();
>> Fix that, and you're good to go.
>>
>> -- Jon
>>
>> On 02/25/2019 03:48 AM, Priya Lakshmi Muthuswamy wrote:
>>> Hi,
>>>
>>> Kindly review the fix for 
>>> https://bugs.openjdk.java.net/browse/JDK-8219632
>>> webrev : http://cr.openjdk.java.net/~pmuthuswamy/8219632/webrev.00/
>>>
>>> jdk/javadoc/tool/removeOldDoclet/RemoveOldDoclet.java tries to use 
>>> OldDoclet.jasm which hold reference to removed API com.sun.javadoc.
>>> As part of the fix for 
>>> JDK-8219575(jdk/javadoc/tool/removeOldDoclet/RemoveOldDoclet test 
>>> fails in mach5),
>>> tried to handle the NoDefClassFoundError.
>>>
>>> This fix removes the reference to com.sun.javadoc in test class and 
>>> the handling of NoClassDefFoundError.
>>> If user creates any Doclet which doesn't implement 
>>> jdk.javadoc.doclet.Doclet, there will be error stating that its not 
>>> a valid Doclet.
>>>
>>> Thanks,
>>> Priya
>>>
>>>
>>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/javadoc-dev/attachments/20190308/3ea7336b/attachment-0001.html>


More information about the javadoc-dev mailing list