On Wednesday, February 17, 2016 at 9:13:43 PM UTC+1, Goktug Gokdogan wrote: > > I think you didn't understand what I said. Let me try to clarify: > > "For any reason, if community wants to run the GWT 2.8 SDK in Java 7 > source level *(i.e. gwtc sourcelevel 7)*, they can theoretically do it by > supplying *a java7 compatible JRE emulation* without any compiler/SDK > changes *(but just setting the gwtc sourcelevel 7)*. That's why I didn't > originally remove Java7 option from the SourceLevel flag. > By removing the flag (which seems submitted now), the community will not > have that option *(i.e. they need also supply a modified compiler > together with the emulation)*." > > This may never happen but keeping the flag was cheap so I kept it. >
Thanks for the reminder Goktug. We had a quick discussion with Manolo about whether we should remove the -sourceLevel entirely, remove the 1.7 value only (only keeping 1.8), or "aliasing" 1.7 to 1.8 (with a warning). The immediate goal was to make it possible to build GWT with a JDK 7. Things can still change back. Let's see what we had and we could have (incl. what we have now): The problem we were having is that -sourceLevel defaulted to the level of the Java version being used to run GWTC, and defaulting to 7 as a last resort, which means that with a Java 7 (or 6) VM you'd have to pass "-sourceLevel 8" to make it work with the new Java 8-only emul. We have (had) several options: - leave it like that, forcing every Java 7 user to explicitly pass "-sourceLevel 8". They'd see it as a breaking change (which it could be, according to Daniel in this thread) and wouldn't understand why there's a "7" value that doesn't work. As a user, I'd probably see it as a bug. - change the default value to Java 8 (independently of the current JVM). This is backwards-compatible with people passing "-sourceLevel 8", breaking those passing "-sourceLevel 7" with cryptic errors due to GWT being incapable of compiling the Java 8-only emul, and "transparently upgrades" others to sourceLevel 8. - remove the "7" value, only leaving "8" as a valid value. Given that the default value depends on the current JVM and always has a valid fallback, that means GWT always uses Java 8, but starts to fail if you pass a sourceLevel with a value different from 8 or 1.8. This is backwards-compatible with people passing "-sourceLevel 8", breaking those passing "-sourceLevel 7" with an explicit error that this value is not supported, and "transparently upgrades" others to sourceLevel 8. This is what we did. - remove the -sourceLevel flag entirely; this would break many, many people; including those passing a "compatible" sourceLevel value. - alias the "-sourceLevel 7" to "-sourceLevel 8". In many cases this wouldn't break builds, except for those cases where people run into differences between Java 7 and Java 8, as Daniel mentioned. Those people possibly won't understand why their explicit "-sourceLevel 7" isn't honored (even if we issue a warning). - deprecate -sourceLevel and make it a no-op. This "transparently upgrades" everyone to Java 8, and is similar to the above case where "-sourceLevel 7" is aliased to "-sourceLevel 8" I think we chose the "least bad" of those options, by being explicit. People using Java 7 *and* using an explicit sourceLevel should be aware that JavaC and GWTC would use different rules, so let's force them to be extra-explicit. Note that whether you pass -sourceLevel or not, and with which value depends on how you call GWTC: In Maven, you have to configure your project with an explicit source level version (even for JavaC) unless you're OK with Java 1.4 or 1.5 (depending on the version of the maven-compiler-plugin, whose default version depends on the version of Maven you're using), and depending on how you configure it, it could instruct the gwt-maven-plugin (both flavors) to pass an explicit -sourceLevel to GWTC. This would break people using Java 7. In other words, it's quite likely that many projects (but far from all) have a configured (possibly implicitly) sourceLevel matching their JavaC source level. Gradle (gwt-gradle-plugin) only passes a sourceLevel if configured explicitly (through a specific property), independently of the source level configured for JavaC. Others (Ant, Buck, etc.) probably have to pass arguments explicitly. I have no idea what IDEs (Eclipse, IntelliJ) do. -- You received this message because you are subscribed to the Google Groups "GWT Contributors" group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit-contributors+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/google-web-toolkit-contributors/7d940cf7-d743-4845-9e82-70567c52eb27%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.