Discussion: Re: RFR: JDK-8242326: use new "summary-list" CSS class instead of general "block-list" for list of summary sections

Jonathan Gibbons jonathan.gibbons at oracle.com
Mon Apr 13 16:28:49 UTC 2020


On 4/10/20 8:51 AM, Hannes Wallnoefer wrote:
> With this changeset there are now three get*ListItem(Content) methods in SubWriterHolderWriter, all with the same implementation returning HtmlTree.LI(content). These methods are only called from the local `formats.html` package. Two of them, #getSummariesListItem and #getDetailsListItem are also defined in the ClassWriter interface, although they are never invoked on that interface or the implementing ClassWriterImpl class, only on SubWriterHolderWriter.

I'll investigate the two methods that I've put on ClassWriter that are 
never called. Admittedly SubWriterHolderWriter is itself a bit of a 
code-smell, and one I have not yet figured out how best to fix; the 
unused methods may be a side-effect of that.

>
> I guess all of the above could be justified by completeness and symmetry (for lack of better terms). But I wonder if these methods actually do carry their weight, both for having distinct methods and for defining some of them in ClassWriter.
>
> Note that this is not a criticism, just something I’m curious about.


It's a valid comment, and something I have been considering as well.  I 
partially touched on this in some of earlier RFR notes.

At some level, it's the pendulum swinging to the opposite extreme from 
the poorly-named overused getMemberTree-style methods that used 
blockList for everything.

There are various ways forward, preferably in separate changesets.

1. Leave as-is, with multiple like-named methods, with the same impl.  
This gives us the flexibility we need, if we ever want it, to set a 
different `class` attribute on different impls.

2. Collapse the `getXyzList` and `getXyzListItem` methods into just two, 
`getList` and `getListItem`, where the `getList` method and possibly the 
`getListItem` methods take a parameter for a new enum type, `ListKind`.

3. Have the `getXyzList` methods return a different type 
(`ListContent`?) such that `add`ing a method to these objects will 
automatically wrap the item in a suitable container, which may be either 
a simple `<li>` element, or an `<li>` element with an appropriate class 
attribute.

3a. Like 3, but without an explicit new type of Content ... just a new 
impl behind the scenes, such as special subtype of HtmlTree for UL/OL 
elements.

3b. Some combination of 1, 2 and 3a. Either use separate `getXyzList` 
methods or `getList(ListKind)`, but collapse the `getXyzListItem` 
methods into one, and leave it up to the list object to decide whether 
to "customize" individual list items returned from the general 
getListItem method.

Whether to put a `class` attribute on a `<li>` element depends on 
whether we want, or may want in the future, to use BEM naming for our 
CSS classes. In full BEM, every HTML element gets its own `class` 
attribute with an appropriate name. Right now, my sense is to /not/ use 
full BEM naming when there is an inherent HTML relationship, such that 
we can use the `>` selector, so that we can style the list items with 
`ul.LIST-CLASS > li { STYLES }`

---

For now, I'd like to leave this as an open/active discussion. Although 
there are more uses of `<ul class="block-list">` on other pages, we have 
addressed the 3 primary uses on the type-declaration pages. I'd like to 
continue the cleanup for other parts of module/package/type declaration 
pages, and see what other cleanup we would like to do. For example, I'd 
like to consider a impl-method naming cleanup to use `newXyz` or 
`buildXyz` instead of `getXyz` ... I'm thinking `newXyz` for basic 
factory methods, and `buildXyz` for more complex constructions. I'd also 
like to move away from the `addXyz(Content container)` style methods in 
which we build something and add it to a container in a single call, and 
move towards `container.add(buildXyz())` as providing a better 
separation of abstractions.

-- Jon



More information about the javadoc-dev mailing list