diff options
2 files changed, 39 insertions, 0 deletions
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/JavacTurbine.java b/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/JavacTurbine.java index e47a21d342..ef2ec5a868 100644 --- a/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/JavacTurbine.java +++ b/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/JavacTurbine.java @@ -312,6 +312,10 @@ public class JavacTurbine implements AutoCloseable { // drop class initializers, which are going to be empty after tree pruning return null; } + if ((access & (Opcodes.ACC_SYNTHETIC | Opcodes.ACC_BRIDGE)) != 0) { + // drop bridges (see b/31653210) + return null; + } return super.visitMethod(access, name, desc, signature, exceptions); } } diff --git a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java index fa63e08736..76454ae476 100644 --- a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java +++ b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java @@ -1263,4 +1263,39 @@ public class JavacTurbineTest { }; assertThat(text).isEqualTo(Joiner.on('\n').join(expected)); } + + @Test + public void bridge() throws Exception { + addSourceLines( + "Bridge.java", + "import java.util.concurrent.Callable;", + "class Bridge implements Callable<String> {", + " public String call() { return \"\"; }", + "}"); + + compile(); + + Map<String, byte[]> outputs = collectOutputs(); + + assertThat(outputs.keySet()).containsExactly("Bridge.class"); + + String text = textify(outputs.get("Bridge.class")); + String[] expected = { + "// class version 52.0 (52)", + "// access flags 0x20", + "// signature Ljava/lang/Object;Ljava/util/concurrent/Callable<Ljava/lang/String;>;", + "// declaration: Bridge implements java.util.concurrent.Callable<java.lang.String>", + "class Bridge implements java/util/concurrent/Callable {", + "", + "", + " // access flags 0x0", + " <init>()V", + "", + " // access flags 0x1", + " public call()Ljava/lang/String;", + "}", + "" + }; + assertThat(text).isEqualTo(Joiner.on('\n').join(expected)); + } } |