Support Java 6 as a source language. For 1.5 VMs, rewrite v6 class files to v5.
Review by: tobyr
Issue: 2223
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@3648 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java b/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java
index fca9dfe..f9e19a7 100644
--- a/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java
@@ -211,10 +211,14 @@
CompilerOptions.IGNORE);
settings.put(CompilerOptions.OPTION_LocalVariableAttribute,
CompilerOptions.GENERATE);
- settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_1_5);
- settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_1_5);
+
+ /*
+ * Wish we could target 1.5 class file, but this isn't allowed. :(
+ */
+ settings.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_1_6);
+ settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_1_6);
settings.put(CompilerOptions.OPTION_TargetPlatform,
- CompilerOptions.VERSION_1_5);
+ CompilerOptions.VERSION_1_6);
// This is needed by TypeOracleBuilder to parse metadata.
if (enableDocCommentSupport) {
diff --git a/dev/core/src/com/google/gwt/dev/shell/rewrite/ForceClassVersion15.java b/dev/core/src/com/google/gwt/dev/shell/rewrite/ForceClassVersion15.java
new file mode 100644
index 0000000..b6839cc
--- /dev/null
+++ b/dev/core/src/com/google/gwt/dev/shell/rewrite/ForceClassVersion15.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.dev.shell.rewrite;
+
+import com.google.gwt.dev.asm.ClassAdapter;
+import com.google.gwt.dev.asm.ClassVisitor;
+import com.google.gwt.dev.asm.Opcodes;
+
+/**
+ * Performs any rewriting necessary to ensure that class files are 1.5
+ * compatible.
+ */
+class ForceClassVersion15 extends ClassAdapter {
+
+ public ForceClassVersion15(ClassVisitor v) {
+ super(v);
+ }
+
+ @Override
+ public void visit(final int version, final int access, final String name,
+ final String signature, final String superName, final String[] interfaces) {
+ assert (version >= Opcodes.V1_5 && version <= Opcodes.V1_6);
+ super.visit(Opcodes.V1_5, access, name, signature, superName, interfaces);
+ }
+}
diff --git a/dev/core/src/com/google/gwt/dev/shell/rewrite/HostedModeClassRewriter.java b/dev/core/src/com/google/gwt/dev/shell/rewrite/HostedModeClassRewriter.java
index 9dbcefb..418429b 100644
--- a/dev/core/src/com/google/gwt/dev/shell/rewrite/HostedModeClassRewriter.java
+++ b/dev/core/src/com/google/gwt/dev/shell/rewrite/HostedModeClassRewriter.java
@@ -187,6 +187,10 @@
v = new RewriteJsniMethods(v);
+ if (Double.parseDouble(System.getProperty("java.class.version")) < Opcodes.V1_6) {
+ v = new ForceClassVersion15(v);
+ }
+
new ClassReader(classBytes).accept(v, 0);
return writer.toByteArray();
}