aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiam Miller-Cushon <cushon@google.com>2021-09-27 11:50:02 -0700
committerJavac Team <javac-team+copybara@google.com>2021-09-27 11:50:39 -0700
commit3bac9d7ffd87c0e3ed8e27d72dc9cb2a4d00e364 (patch)
treed643ca2d4f8f971e4aced4ff0cc2ba6b19ea20dc
parentcef7d152f99e5e59fe7b5f55105ad7085dd90b08 (diff)
downloadturbine-3bac9d7ffd87c0e3ed8e27d72dc9cb2a4d00e364.tar.gz
Use Java 8 bytecode at minimum
Follow-up to https://github.com/google/turbine/commit/006a74b6cd7565221a2d7fe9593c103bdd83584c. Supporting `-source 7 -target 7` regresses support for type annotations, since turbine continues to emit the attributes but they aren't recognized in v51 class files. PiperOrigin-RevId: 399244322
-rw-r--r--java/com/google/turbine/lower/Lower.java4
-rw-r--r--javatests/com/google/turbine/lower/LowerTest.java34
2 files changed, 37 insertions, 1 deletions
diff --git a/java/com/google/turbine/lower/Lower.java b/java/com/google/turbine/lower/Lower.java
index 39df9d1..9b2d49f 100644
--- a/java/com/google/turbine/lower/Lower.java
+++ b/java/com/google/turbine/lower/Lower.java
@@ -18,6 +18,7 @@ package com.google.turbine.lower;
import static com.google.common.collect.Iterables.getOnlyElement;
import static com.google.turbine.binder.DisambiguateTypeAnnotations.groupRepeated;
+import static java.lang.Math.max;
import static java.util.Objects.requireNonNull;
import com.google.common.base.Function;
@@ -121,7 +122,8 @@ public class Lower {
CompoundEnv.<ClassSymbol, TypeBoundClass>of(classpath).append(new SimpleEnv<>(units));
ImmutableMap.Builder<String, byte[]> result = ImmutableMap.builder();
Set<ClassSymbol> symbols = new LinkedHashSet<>();
- int majorVersion = languageVersion.majorVersion();
+ // Output Java 8 bytecode at minimum, for type annotations
+ int majorVersion = max(languageVersion.majorVersion(), 52);
for (ClassSymbol sym : units.keySet()) {
result.put(sym.binaryName(), lower(units.get(sym), env, sym, symbols, majorVersion));
}
diff --git a/javatests/com/google/turbine/lower/LowerTest.java b/javatests/com/google/turbine/lower/LowerTest.java
index d95cd57..67fb549 100644
--- a/javatests/com/google/turbine/lower/LowerTest.java
+++ b/javatests/com/google/turbine/lower/LowerTest.java
@@ -638,6 +638,40 @@ public class LowerTest {
assertThat((testAccess[0] & TurbineFlag.ACC_PROTECTED)).isNotEqualTo(TurbineFlag.ACC_PROTECTED);
}
+ @Test
+ public void minClassVersion() throws Exception {
+ BindingResult bound =
+ Binder.bind(
+ ImmutableList.of(Parser.parse("class Test {}")),
+ ClassPathBinder.bindClasspath(ImmutableList.of()),
+ TURBINE_BOOTCLASSPATH,
+ /* moduleVersion=*/ Optional.empty());
+ Map<String, byte[]> lowered =
+ Lower.lowerAll(
+ LanguageVersion.fromJavacopts(ImmutableList.of("-source", "7", "-target", "7")),
+ bound.units(),
+ bound.modules(),
+ bound.classPathEnv())
+ .bytes();
+ int[] major = {0};
+ new ClassReader(lowered.get("Test"))
+ .accept(
+ new ClassVisitor(Opcodes.ASM9) {
+ @Override
+ public void visit(
+ int version,
+ int access,
+ String name,
+ String signature,
+ String superName,
+ String[] interfaces) {
+ major[0] = version;
+ }
+ },
+ 0);
+ assertThat(major[0]).isEqualTo(Opcodes.V1_8);
+ }
+
static String lines(String... lines) {
return Joiner.on(System.lineSeparator()).join(lines);
}