On Mon, 16 May 2022 10:07:18 GMT, Pavel Rappo <[email protected]> wrote:
> So far the idea looks okay. My feedback is purely on its implementation.
>
> I'm concerned about backward compatibility. If we believe that it is unlikely
> that javadoc can be configured to use a custom implentation of
> `DocTreeFactory`, then the proposed implementation looks okay. Otherwise,
> consider a case where a new javadoc tool reads old doc comments. Do we expect
> it to fail with `UnsupportedOperationException` for every `value` tag in
> those doc comments?
>
> My inline comments below are about that latter case; ignore them if you don't
> think it's an issue.
1. It is very unlikely that you could/would configure mismatched versions of
the jdk.javadoc and jdk.compiler modules.
2. Note that a new javadoc tool can read old doc comments (because the format
is optional) and should not throw exceptions. The problem will occur if a new
javadoc tool uses and old `DocCommentParser` in a mismatched module.
> src/jdk.compiler/share/classes/com/sun/tools/javac/parser/DocCommentParser.java
> line 1605:
>
>> 1603: if (ch == '}') {
>> 1604: nextChar();
>> 1605: return m.at(pos).newValueTree(format, ref);
>
> If `format == null` call `newValueTree(ref)`; otherwise call
> `newValueTree(format, ref)`.
I guess I don't think it's an issue but I'm OK with the proposed next form.
> src/jdk.compiler/share/classes/com/sun/tools/javac/tree/DocTreeMaker.java
> line 482:
>
>> 480:
>> 481: @Override @DefinedBy(Api.COMPILER_TREE)
>> 482: public DCValue newValueTree(ReferenceTree ref) {
>
> Revert the implementation of this method.
That's not necessary, because we're in the private implementation world here.
The important change you're suggesting is to the methods in the
`DocTreeFactory` interface.
> src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ValueTaglet.java
> line 112:
>
>> 110: text = String.format(configuration.getLocale(), f,
>> field.getConstantValue());
>> 111: } catch (IllegalFormatException e) {
>> 112: messages.warning(holder,
>
> Doesn't CSR say that it is an *error*?
The CSR doesn't say, but I changed it to an error anyway.
> test/langtools/tools/javac/doctree/ValueTest.java line 108:
>
>> 106: */
>> 107:
>> 108: /**
>
> Consider adding the following cases:
> * erroneous format
> * valid format and reference followed by the trailing "junk"
done
-------------
PR: https://git.openjdk.java.net/jdk/pull/8565