On Fri, 1 Oct 2021 16:23:24 GMT, Jonathan Gibbons <j...@openjdk.org> wrote:
>> Hmmm. I doubt this is the only place where the values are conflated. I'll >> check with other `javac` folk about defining >> `com.sun.tools.javac.util.Position.NOPOS` in terms of >> `javax.tools.Diagnostic.NOPOS`. The internal version predates the public >> value, but the two are intended to be the same. > > I changed the line, but only to remove the redundant use of `Position.` > The two values, `Diagnostic.NOPOS` and `Position.NOPOS` are intended to be > the same value, allowing for the difference in type. The difference in type > for `NOPOS`, and all methods in `Trees` (and `DocTrees`) that return > positions, was intended to allow other implementations of `javax.tools` to > handle longer source files (!!!) even though `javac` only support `int`-sized > files. Would you consider changing the definition of `Position.NOPOS` to this as you described elsewhere? Position.NOPOS = (int) Diagnostic.NOPOS Separately, consider adding these two assertions to com.sun.tools.javac.util.Position: static { assert NOPOS == ((int) javax.tools.Diagnostic.NOPOS); assert ((long) NOPOS) == javax.tools.Diagnostic.NOPOS; } These assertions would document our intent clearly and verifiably: these constants can be used interchangeably, barring occasional downcasting. ------------- PR: https://git.openjdk.java.net/jdk/pull/5510