RFR: 8350212: Track source end positions of declarations that support @SuppressWarnings [v3]

Archie Cobbs acobbs at openjdk.org
Tue Apr 8 19:55:14 UTC 2025


On Tue, 8 Apr 2025 14:56:41 GMT, Jan Lahoda <jlahoda at openjdk.org> wrote:

>> Archie Cobbs has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Add missing variable decl end position.
>
> The new calls to `storeEnd` seem to partly duplicate existing `to`/`toP` calls. That feels a bit unfortunate - as we may be adding new places that create AST node for declarations, and one sometimes forgets to do `to`/`toP` - and forgetting `storeEnd` might lead to weird problems.
> 
> I tried to re-write this part by putting the the set logic directly into the end pos tables here:
> https://github.com/archiecobbs/jdk/compare/JDK-8350212...lahodaj:jdk:JDK-8350212?expand=1
> 
> Notes:
> - I believe the fact that implictly declared classes don't have an end position was intentional at that time. I don't have an issue with changing that, just pointing it out.
> - for blocks, `endpos` is actually pointing at the start of the closing brace, not the end (I think, at least). So, I've renamed the field, but kept the semantics.
> 
> What do you think?

Description of the latest changes (these incorporate some of @lahodaj's suggestions as well):

General:
* Always store ending positions for `@SuppressWarnings`-bearing declarations, blocks, and switches.
* Always require a `EndPosTable` when using methods `TreeInfo.endPos()` and `TreeInfo.diagEndPos()`.

`JCTree`:
* Remove "one-off" ending position fields in specific `JCTree` classes, except for `JCBlock`
  and `JCSwitchExpression` which still need them; rename those two fields `bracePos`.

`JavacParser`
* Replace `EmptyEndPosTable` with `MinimalEndPosTable` which remembers the minimal required set.
* `EndPosTable` methods `to()` and `toP()` are unused; remove them and the now unneeded `parser` field.
* Make `storeEnd()` and `attach()` fluent methods and use that to cleanup a bit.
* Store ending position for implicit classes for consistency with other `JCClassDecl`'s.
* Fix module ending positions to be at the closing brace instead of EOF.

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

PR Comment: https://git.openjdk.org/jdk/pull/23669#issuecomment-2787512884


More information about the compiler-dev mailing list