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.

Reply via email to