On Tue, 2 Dec 2025 16:43:43 GMT, Jonathan Gibbons <[email protected]> wrote:
> I'm not sure a shared interface gets you anything significant, since you
> cannot inherit a shared field that way.
Partly I was thinking the interface could make helpers that set end positions
type safe, e.g. for the `storeEnd` method in `JavacParser` if we could write
something like:
protected <T extends JCTree & JCTree.HasEndPos> T storeEnd(T tree, int endpos)
{ ... }
But there are other places that store end positions on a `JCTree` instead of a
specific subtype, so that approach only goes so far.
> Instead, you could have a `setEndPos` on `JCTree` that is a no-op on subtypes
> that do not need it, and which sets a locally declared field on subtypes that
> do need it.
I think the set of trees that end positions are stored for is: `JCAnnotation`,
`JCArrayAccess`, `JCArrayTypeTree`, `JCAssert`, `JCAssign`, `JCBinary`,
`JCBindingPattern`, `JCBlock`, `JCBreak`, `JCCase`, `JCClassDecl`,
`JCConstantCaseLabel`, `JCContinue`, `JCDefaultCaseLabel`, `JCDoWhileLoop`,
`JCExports`, `JCExpressionStatement`, `JCFieldAccess`, `JCIdent`, `JCIf`,
`JCImport`, `JCLambda`, `JCLiteral`, `JCMemberReference`, `JCMethodDecl`,
`JCMethodInvocation`, `JCModifiers`, `JCModuleDecl`, `JCNewArray`,
`JCNewClass`, `JCOpens`, `JCPackageDecl`, `JCParens`, `JCPatternCaseLabel`,
`JCPrimitiveTypeTree`, `JCProvides`, `JCRequires`, `JCReturn`, `JCSkip`,
`JCSwitch`, `JCThrow`, `JCTypeApply`, `JCTypeParameter`, `JCTypeUnion`,
`JCUnary`, `JCUses`, `JCVariableDecl`, `JCWildcard`, `TypeBoundKind`
I got that by instrumenting `SimpleEndPosTable` and building the JDK, it's
possible it missed a few.
And then we could add the following snippet to all of those classes:
private int endpos;
public int getEndPos() {
return endpos;
}
public void setEndPos(int endpso) {
this.endpos = endpos;
}
My feeling is that perhaps it's worth the extra memory to not have to duplicate
that code for all of those `JCTree`s, and also to avoid the risk of trying to
store end positions on trees that don't support it. But I am open to making
those changes if there's a preference for it.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/28610#issuecomment-3605955451