RFR: 8372948: Store end positions directly in JCTree [v6]

Jan Lahoda jlahoda at openjdk.org
Tue Jan 27 14:07:47 UTC 2026


On Mon, 26 Jan 2026 13:04:42 GMT, Liam Miller-Cushon <cushon at openjdk.org> wrote:

>> test/langtools/tools/javac/api/TestJavacTask_Lock.java line 72:
>> 
>>> 70:         fm = comp.getStandardFileManager(null, null, null);
>>> 71:         try {
>>> 72:             MethodKind first = MethodKind.CALL;
>> 
>> I think it would be good to preserve the behavior (i.e. prevent `parse` followed by `call` or `parse`). Otherwise, I am not sure if there may not be some a bit surprising effects (like calling `parse`, then `analyze` then `parse` again and `analyze` again might lead to some weird errors). If there would be a reason to relax this restriction, it would probably merit its own PR and own investigation of effects.
>
> Thanks, I had meant to look into this more if there was interest in the overall change, so this seems like a good time to revisit it.
> 
> Currently it works because a repeated call to `PARSE`, or calling `CALL` after `PARSE`, will fail with `IllegalStateException: endPosTable already set`. I reverted the workaround in the test and added an explicit check to replace the dependency on the `EndPosTable`:
> 
> 
> +        if (used.get())
> +            throw new IllegalStateException();
> 
> 
> I also noticed that there's no validation to disallow repeated calls to `ANALZYE`, I wonder if there should be?

Thanks! Calling `analyze` multiple time should not break anything, I think - that don't necessarily mean it is a good idea, but I suspect calling `parse` multiple times could lead to weird outcomes, so that one was more important.

I think adhering to the current behavior for now is good - we can thing and decide separately whether we want to make `parse` safe to call multiple times, restrict `analyze`, or let things be.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/28610#discussion_r2732160099


More information about the compiler-dev mailing list