diff options
author | Liam Miller-Cushon <cushon@google.com> | 2021-09-27 11:50:02 -0700 |
---|---|---|
committer | Javac Team <javac-team+copybara@google.com> | 2021-09-27 11:50:39 -0700 |
commit | 3bac9d7ffd87c0e3ed8e27d72dc9cb2a4d00e364 (patch) | |
tree | d643ca2d4f8f971e4aced4ff0cc2ba6b19ea20dc | |
parent | cef7d152f99e5e59fe7b5f55105ad7085dd90b08 (diff) | |
download | turbine-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.java | 4 | ||||
-rw-r--r-- | javatests/com/google/turbine/lower/LowerTest.java | 34 |
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); } |