On Mon, 17 May 2021 16:54:07 GMT, Hannes Wallnöfer <hann...@openjdk.org> wrote:

> The primary problem was that key `compiler.err.dc.ref.bad.parens` had the 
> wrong message "')' missing in reference". That error message is not used when 
> the right parenthesis is missing, but when it occurs before the end of the 
> signature. The missing parenthesis case is caught earlier by the parens 
> balancing code in `DocCommentParser#reference` and uses message 
> `compiler.err.dc.unterminated.signature` ("unterminated signature").
> 
> I changed the message for `compiler.err.dc.ref.bad.parens` to "unexpected 
> parenthesis". 
> 
> A secondary problem was that `DocCommentParser#reference` also threw 
> "unterminated signature" when there were too many closing angle brackets or 
> parentheses. These cases are now passed through 
> in`DocCommentParser#reference` so that `ReferenceParser#parse` can throw a 
> more appropriate error ("unexpected parenthesis" or "unexpected input"). 
> 
> Here's a list of what references now cause what error messages:
> 
>  - `#foo(int`     `unterminated signature`
>  - `#foo((int))`   `unexpected parenthesis`
>  - `#foo(int))`   `unexpected parenthesis`
>  - `#foo(int)x`   `unexpected parenthesis`
>  - `F<T`        `unterminated signature`
>  - `F<T>>`    `unexpected input`
> 
> I added two new tests for the cases with too many closing brackets/parens 
> that used to fail with "unterminated signature".

Thanks for reviewing, Pavel!

>     1. I think this error is a counterintuitive:
>        ```
>        #foo(int)x
>        error: unexpected parenthesis
>        ```
> 
> 
> It's `x` that is unexpected, not the parenthesis. It looks correct here, but 
> only coincidentally:
> 
> ```
>    #foo(int))
>    error: unexpected parenthesis
> ```

Yes, you can look at it both ways, either there is a closing parenthesis where 
it shouldn't be, or there is text following a correctly placed closing 
parenthesis. We tend to see one or the other depending on whether the text up 
to the closing parenthesis looks like a proper signature, but it's not as clear 
to the parser. 

I still like the more specific message. We can use a more generic "unexpected 
text" message, but I think it is less useful.

>     1. The latter case in your list, `F<T>>`, yields "unexpected text", not 
> "unexpected input".

That's my mistake, the resource key ends with `unexpected.input` but the 
English message is "unexpected text".

>     2. Why is there an asymmetry between wording for angle brackets and that 
> of parenthesis?

See my answer to point 1, I like the message to be as specific as possible.

-------------

PR: https://git.openjdk.java.net/jdk/pull/4068

Reply via email to