RFR [15] 8238969: Miscellaneous cleanup
Jonathan Gibbons
jonathan.gibbons at oracle.com
Fri Feb 14 20:17:30 UTC 2020
Ooops, my mistake. I misunderstodd the difference between .forEach and
.forEachOrdered.
-- Jon
On 02/14/2020 12:03 PM, Jonathan Gibbons wrote:
>
> Pavel,
>
> Mostly good; thanks for looking at this. There's one significant error
> which needs to be addressed. I also think the comments '// Consider
> this...' should be removed. The information may be interesting, and at
> least is preserved in this webrev + patch file, but the comments don't
> belong in the main source code.
>
> ----
>
> I don't care for some of the whitespace changes, but I won't object to
> any reformatting that is the result of reformatting in an IDE like
> IntelliJ with default settings.
>
> I don't like the notes to the future of the form: "// Consider this
> while ...". I think such notes belong outside the codebase, in some
> other form. I don't know of any precedent elsewhere in the
> (langtools) code base.
>
> AbstractMemberWriter ... it looks like it's only used one. I would
> inline its contents to the use site and remove the method. It doesn't
> carry its own weight, and the preferred replacement is easy enough to
> use directly. javadoc has too many methods which are just shorter
> rewritings of otherwise acceptable calls.
>
> HtmlDocletWriter ... the constructor comment was wrong, but the new
> comment is not very helpful. Suggest a standard comment of the form
> "Creates an {@code HtmlDocletWriter}." If you file me an RFE, I will
> fix the bad doc comment and do other cleanup for this file. For
> example, the constructor should be protected, since this class is
> always intended to be a supertype.
>
> ModuleWriterImpl: you've (uncharacteristically) change .forEach to
> .stream().forEach. Why?
>
> ModuleWriterImpl: in a number of places, you've renamed local
> variables, such as exportPkgList -> exportedPackagesSet. Consider
> dropping the collection-kind from the name, as in, "exportPkgList ->
> exportedPackages". Consider renaming lambda parameter name
> 'directive" to just "d", especially when the scope is small.
>
> TagletManager: I'm not sure about the new comment at 373. I don't
> think it is javadoc's job to detect mis-spellings, but "wrong case"
> may just be common enough to be worth checking for, especially when
> the correct name is mixed-case, like {@docRoot}, {@systemProperty}
>
> Utils.addModifier(line 510): forEachOrdered in WRONG. Modifiers should
> not be alphabetically sorted by name! A better change would be to
> change the parameter type to SortedSet, and then rely on the
> sort-order of the argument set.
>
> Utils: in a couple of places, you have used 'new ArrayList<DocTree>'.
> Did you try diamond syntax? I'm sort-of surprised if you can't use it
> there.
>
> Utils.Pair: it's on _my_ list to move this class out of Utils, but the
> changes here are OK for now.
>
> Start: the change to use nanoTime seems gratuitous. If you're going to
> edit this code, I suggest renaming "tm" to "start" or "startTime", and
> change line 552 to declare and use "elapsedTime" instead of reusing
> (and changing the units of) "tm".
>
> -- Jon
>
> On 02/13/2020 07:50 AM, Pavel Rappo wrote:
>> Hello,
>>
>> Please review the change forhttps://bugs.openjdk.java.net/browse/JDK-8238969:
>>
>> http://cr.openjdk.java.net/~prappo/8238969/webrev.00/
>>
>> During the last exploratory debugging session, I collected a number of issues
>> that I think are worth fixing. These include:
>>
>> 1. Indentation, unnecessary (and hopefully non-controversial) parentheses,
>> local variables' names, typos, method references (where practical), comments, etc.
>>
>> 2. Usages of the java.util.stream API. This could be thought of as complementary
>> change to that [1] of by Jonathan Gibbons, though it stemmed from an unrelated
>> investigation of mine.
>>
>> In a nutshell, some sites that use streams are order-sensitive, while others
>> are not. Where the order is important, I used forEachOrdered() or changed the
>> thing straight to Iterable.forEach(), eliding the in-between call to stream().
>> In some cases that allowed to simplify the thing into an atomic (as in "indivisible",
>> not "concurrent-atomic") operation from Collections API. For example:
>>
>> - jdk/javadoc/internal/doclets/formats/html/LinkFactoryImpl.java:136,138
>> - jdk/javadoc/internal/doclets/toolkit/util/Utils.java:3268
>>
>> Where the order was immaterial, I emphasized that by ensuring a non-deterministic
>> semantics was used. For that reason, in some places I inserted an in-between call
>> to stream(), if there was none previously.
>>
>> I'm still undecided on whether to use streams where the order is immaterial.
>> It's not about optimization, but readability. I guess it all depends on the
>> context and potential for using intermediate operations. It seems to be a
>> no-brainer when no intermediate operations, such as filtering or mapping,
>> are involved.
>>
>> Sadly, we don't seem to have good tools at hand for testing things like that.
>> One way this change could be tested is through using "unfriendly" (work-to-rule)
>> implementations of Collections and Stream APIs. For example, if the order of
>> iteration is unspecified, or better still, explicitly specified to be non-deterministic,
>> the implementation should make sure that the order is random. If a List is not
>> of the RandomAccess flavor it should impose a perceivable penalty for getting
>> elements by index, a call to Thread.sleep or a busy-loop would do.
>>
>> I'm sure such things exist in one form or another. We just don't have them, and
>> implementing those on our own is a project not for the faint-hearted! Immutable
>> collections, introduced in JEP 269, are good in this sense, though they are not
>> enough:
>>
>> The iteration order of set elements/mappings is unspecified and is subject
>> to change
>>
>> But I digress. The existing battery of tests passes.
>>
>> 3. Pinpoint uses of modern String APIs (and boy, did they fit in nicely!)
>>
>> - jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java:202
>> - jdk/javadoc/internal/tool/Start.java:289,291
>>
>> 4. Marking with in-line comments "Consider this while working on JDK-8238966"
>>
>> This is about future work on extracting joining-with-a-separator functionality.
>> I believe those comments have value, even though the issue they mark is not
>> addressed in this patch. Some of the sites seem to be a low-hanging fruit, but
>> the point is to consider them as a whole before proceeding with a fix.
>>
>> 5. Removal of the Result.serialVersionUID field
>>
>> I couldn't think of any use for that field. My best guess is that it's just a
>> leftover from the times when this enum was Error.
>>
>> Notes
>> =====
>>
>> a. jdk/javadoc/internal/doclets/formats/html/AbstractTreeWriter.java:143
>>
>> Shouldn't it use equals() instead of `==` in this case? A quick look shows a
>> surprising number of reference equality checks on javax.lang.model.element.Name
>> and javax.lang.model.element.Element instances. Why would we need to use
>> reference equality on types with explicitly defined equals() and hashCode()?
>>
>> b. What do people think of removing unused type members?
>>
>> Since jdk.javadoc doesn't seem to be using java.lang.reflect (beyond a couple of
>> trivial interactions with Doclet SPI), the compile-time checking should be enough
>> to make sure the removal is safe.
>>
>> The are some 100 (hundred) of unused methods across the jdk.javadoc codebase.
>>
>> -Pavel
>>
>> -------------------------------------------------------------------------------
>> [1]https://mail.openjdk.java.net/pipermail/javadoc-dev/2020-February/001390.html
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/javadoc-dev/attachments/20200214/6577d672/attachment-0001.htm>
More information about the javadoc-dev
mailing list