Hi Kumar,
Thanks for the feedback. I'll be posting another webrev shortly.
Let me respond here to some of the issues you raise.
+ // Special case to allow '{@link ...}' to appear in the string.
+ // A less general case would be to detect literal use of Object.equals
+ // A more general case would be to allow access to DocCommentParser
somehow
Yes the church vs. state rule, I don't quite understand the problem we
are trying solve with this code.
I'm not sure this is the church vs. state rule. The problem I am
solving is that I want the localized generated comment to be able to
refer to the program elements like Objects.equals. Without any special
handling, using `{@link}` in a resource in the resource file will be
treated as literal text and will appear in the generated text exactly as
written. The special handling I provided was to explicitly detect
`{@link} strings and to replace them in the synthesized DocCommentTree
with the appropriate LinkTree node. As such, it's like a custom
micro-parser for `{@link}' in the resource string. As I mentioned in
the comment, the alternatives are to make the code be even more
specialized and detect/replace an otherwise plain string of
'Objects.equals` or whatever, or at the other extreme, to create and use
a full DocCommentParser on the resource string to create the DocCommentTree.
With the Element ordering changes (ElementComparator) I thought this
might cause failures
in TestOrdering, I guess the previous ordering are being preserved,
but there are no Records
elements in this test ?
The change was mostly just a simple/trivial refactoring from using a
custom static Map to get the ordering constant, to using a switch
statement. I assumed the existing tests would cover the change. You are
right that we could update the existing ordering test to include records.
-- Jon
On 11/02/2019 08:12 AM, Kumar Srinivasan wrote:
Hi Jon,
Firstly I must commend the javadoc.next project for updating
javadoc/doclet to use jx.l.m and
other improvements to the doc comments management, this has made it
relatively easy for javadoc
to implement new language features, such as this. Having said that,
the changes are looking
great, and the langtools stalwarts have done due diligence.
Here are some minor review comments, I don't need to see another revision.
Default webrev:
src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ClassBuilder.java
Likely search/replace
- * Keep track of whether or not this typeElement is an record.
+ * Keep track of whether or not this typeElement is a record.
- // only one canonical constructor; no longer need to keep looking
+ // only one canonical constructor; no need to keep looking
- TypeMirror objectType =
utils.elementUtils.getTypeElement("java.lang.Object").asType();
+ TypeMirror objectType = utils.getObjectType();
There is a symbol table cache maintained in Utils, for performance
improvements.
src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java
Nice simplifications to modifiersToString. <blush>
With the Element ordering changes (ElementComparator) I thought this
might cause failures
in TestOrdering, I guess the previous ordering are being preserved,
but there are no Records
elements in this test ?
src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/CommentUtils.java
+ private void add(List<DocTree> contents, String resourceKey) {
+ // Special case to allow '{@link ...}' to appear in the string.
+ // A less general case would be to detect literal use of Object.equals
+ // A more general case would be to allow access to DocCommentParser
somehow
Yes the church vs. state rule, I don't quite understand the problem we
are trying solve with this code.
+ * name is to be inserted. T
+ * @param key the resource key for the description
Looks like we have a hanging "T".
One last thing, was the doc comparator run ? The reason I ask, there
seems to be unrelated
improvements ex: Utils::modifiersToString etc, not sure if regressions
are lurking in the output.
Best,
Kumar Srinivasan
PS: I will have to go into radio silence for some time.
On Wed, Oct 30, 2019 at 4:54 PM Jonathan Gibbons
<[email protected] <mailto:[email protected]>> wrote:
Please review a moderately small update to the proposed support for
records in javadoc.
The primary change is to include record components in the
signature of a
record displayed near the top of the page.
In addition, a "combo test" is added into TestRecordTypes.java to
verify
the presence or absence of annotations in various places in the
generated page for a record, depending on the `@Target` of the
annotations.
Finally, there are some small cosmetic changes, and the supporting
files
for some previously published examples.
Two webrevs are provided.
The first is a cumulative webrev of the modified javadoc source
and test
files, compared against the default branch of the amber repo (i.e.
the
state of the jdk/jdk repo)
http://cr.openjdk.java.net/~jjg/amber-records/webrev.default/
<http://cr.openjdk.java.net/%7Ejjg/amber-records/webrev.default/>
The second is a "delta webrev" of the recently modified javadoc
source
and test files, compared against the tip of the records branch of the
amber repo.
http://cr.openjdk.java.net/~jjg/amber-records/webrev.tip/
<http://cr.openjdk.java.net/%7Ejjg/amber-records/webrev.tip/>
Also, the sets of examples are updated, showing examples linked
and not
linked to JDK API docs
http://cr.openjdk.java.net/~jjg/amber-records/examples/api-with-link/
<http://cr.openjdk.java.net/%7Ejjg/amber-records/examples/api-with-link/>
http://cr.openjdk.java.net/~jjg/amber-records/examples/api-no-link/
<http://cr.openjdk.java.net/%7Ejjg/amber-records/examples/api-no-link/>
Finally, I note a curiosity, arising from the proposed spec. This is
the first occurrence that I can think of in which an item that is
syntactically necessary in the source code does /not/ show up in the
same place in the generated documentation. In general, in previous
instances where the documented signatures differ from the source
code,
the difference has been the addition of default or mandated elements.
Here, the presence of an annotation on the declaration of a record
component in source code may not show up in the corresponding
place in
the documented signature, depending on the specified @Target for the
annotation. I'm not saying that's wrong, but it is curious, and
may need
explaining to some.
-- Jon
JEP 359: https://openjdk.java.net/jeps/359