When I resuscitated this project (formerly FreeCC as JavaCC 21) at the very end of 2019, I converged on setting JDK 8 as the minimal target and I haven't revisited that decision. (Until now anyway).
That was a pretty easy decision since JDK 11 was released in September 2018, so was probably a bit too new at that point. The other thing was that the move from JDK 7 to 8 was pretty revolutionary, with the introuction of lambas and all the functional programming stuff. It really seemed like one would not want to cut oneself off from that. And it didn't really seem like the subsequent JDK releases after 8 brought anything comparable to the table. But I also looked into it and it appeared that JDK 8 was very dominant in actual installed base out there, at that point in time.
But now, 3 years later, the latest JDK release is JDK 19, but the LTS (long-term support) releases available are JDK 8, 11, and 17. JDK 17, released October 2021, looks too new. So that basically leaves 8 and 11. JDK 11 is now over 4 years old and it looks like most of the installed base is on that, at least for active development. I think the graph below is from asking developers (in early 2022) what version of Java they were developing against.
What is reported here is probably answering a somewhat different question, which is about deployed Java apps, not what is being used in development, so that says that 46% of systems are still running Java 8 (vs. 48% on Java 11) but that was nearly a year ago, so one would have to assume some shrinkage on the Java 8 number. But probably, the graph above is more relevant, which is what people are developing against.
So, let's see... what would we get going to 11?
Well, there is that whole module thing, what was called "project jigsaw".Just offhand, the idea that you can define your XXX parser classes as a "module", at least it sounds good, though I'd have to admit that I'm not actually familiar enough with that to know for sure. That was introduced in JDK 9 actually, but if one is going to jump ahead, it should be to 11, I think, since that's the next LTS version.
JDK 9 also introuced the ability to put private methods in interfaces, which I think is kind of nice, though not earth shattering, nothing like JDK 8 introducing lambdas and the stream API etc.
JDK 11 introduced the "var" keyword, so you can use this to define local variables and it just uses type inference. That can clean up the generated code a fair bit probably.
I'm leaning towards moving to JDK 11 as the minimum target for Congo, but I'm wavering too. Somehow I don't think that most people starting a new project would be put off by that, but I'm hardly sure either. So I figured I'd just put that out there as a question.