On Fri, 19 Nov 2021 10:02:26 GMT, Pavel Rappo <[email protected]> wrote:
>> src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/SnippetTaglet.java
>> line 202:
>>
>>> 200: fileObject =
>>> fileManager.getFileForInput(Location.SNIPPET_PATH, "", v);
>>> 201: }
>>> 202: } catch (IOException | IllegalArgumentException e) { //
>>> TODO: test this when JDK-8276892 is integrated
>>
>> FYI: The documented conditions of `IllegalArgumentException` do not arise in
>> this context, although it's not wrong to catch the exception.
>
> You are much more knowledgeable in FileManager than I am. My thinking was
> that while it's probably not an issue with the default file manager, I
> couldn't guarantee that IllegalArgumentException is not thrown if this code
> runs with a custom file manager.
I was just reading the documented conditions for this `JavaFileManager` method
to throw `IllegalArgumentException`. That being said, one of the problems with
ILA, and potentially other unchecked exception, is that they can occur from
deep within the method that is called.
FYI, javac has a way of wrapping user-provided components so that it can better
handle unexpected exceptions from user-provided code as compared to unexpected
exceptions in javac itself. If you're interested, see`javac`
`ClientCodeWrapper`. And, to be clear, I'm *not* suggesting that for javadoc
at this time!
>> test/langtools/jdk/javadoc/doclet/testSnippetTag/TestSnippetMarkup.java line
>> 71:
>>
>>> 69: * @build javadoc.tester.* toolbox.ToolBox toolbox.ModuleBuilder
>>> builder.ClassBuilder
>>> 70: * @run main TestSnippetMarkup
>>> 71: */
>>
>> The standard convention is to put the jtreg comment right after the legal
>> header, before the imports.
>
> I was surprised to hear that this is a convention, so much so that I wrote a
> script to survey the JDK tests in this regard. The script showed that while
> what you said is true for javadoc, it is not so true for other areas (even in
> langtools). That said, I can see the rationale for having this convention and
> will update the snippet tests accordingly.
>
> Separately. If there's a value in mass-fixing the JDK tests so that they
> follow this convention, I can create a PR to do that. Here are some numbers
> provided by the script, to assess the situation. There are 32,920
> `test/**/*.java` files. Of these, 19,190 have jtreg comments. Of these, 4,284
> (or 22%) do not follow the convention one way or another. If pursued, that
> might result in an extremely tedious-to-review PR.
Maybe the convention is not as strong as I thought. It definitely does not
warrant mass updates.
I'd be OK to review any updates needed for javadoc tests.
>> test/langtools/jdk/javadoc/doclet/testSnippetTag/TestSnippetMarkup.java line
>> 388:
>>
>>> 386: // generate documentation at low cost and do not interfere
>>> with the
>>> 387: // calling test state; for that, do not create file trees, do
>>> not write
>>> 388: // to std out/err, and generally try to keep everything in
>>> memory
>>
>> I understand what you're doing here, but I'm surprised you need to go to the
>> trouble of a separate run of javadoc to get the link output. Can you not
>> put the link tag and the link markup tag in the same source, and then
>> extract the two `<a>` from the generated file? Maybe put distinguishing
>> characters around each instance, to make locating them easier. For example:
>>
>>
>> /**
>> * First sentence. TAG {@link Object} TAG.
>> * {@snippet :
>> * MARKUP Object MARKUP // @link substring=Object target=Object
>> * }
>> */
>
> What you suggested is how I had that initially. But then a test purist in me
> demanded a clear way of getting the link without interfering with the test
> logic.
>
> As for text blocks: to me, indenting a text block is a complex, subjective
> and unsettled issue. I would postpone re-indenting them for now, primarily
> because of the churn it would otherwise introduce to the dependent PRs.
>
> If neither of these issues is a showstopper, I would really like to integrate
> this PR to unlock more urgent work on the snippets feature before RDP 1,
> which is on 2021/12/09 as per the Schedule at
> https://openjdk.java.net/projects/jdk/18/. Sometime after this PR is
> integrated, we can revisit this.
OK, but the test purist in me dislikes the significant amount of inline
overhead to address this concern.
I'll pass on this for now, because I agree with unblocking the dependent PRs,
but it seems like that is a negative side-effect of dependent PRs in general.
Once we get past this, at a minimum, I would suggest moving the in-memory file
manager out of this class, and then potentially reconsider the decision that it
is good practice to do the separate run.
>> test/langtools/jdk/javadoc/doclet/testSnippetTag/TestSnippetPathOption.java
>> line 168:
>>
>>> 166: */
>>> 167: @Test
>>> 168: public void testSearchPath(Path base) throws Exception {
>>
>> Not wrong, but arguably somewhat superfluous. This is close to being a file
>> manager test, not a snippet test.
>
> I can add a comment that this test is a part of an end-to-end demonstration
> of how --snippet-path should work. This is a black-box test that assumes
> nothing about the implementation of the feature.
OK, but I still think the test is somewhat unnecessary. But now you have it,
don't delete it.
-------------
PR: https://git.openjdk.java.net/jdk/pull/6359