Remove cargo-culted workaround for JDK-6440786 ZipOutputStream has been able to create empty zip files since JDK7: https://bugs.openjdk.java.net/browse/JDK-6440786 -- MOS_MIGRATED_REVID=139089919
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 38b00fb..5934676 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
@@ -14,6 +14,8 @@ package com.google.devtools.build.java.turbine.javac; +import static java.nio.charset.StandardCharsets.UTF_8; + import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; @@ -28,8 +30,10 @@ import com.google.devtools.build.java.turbine.javac.ZipOutputFileManager.OutputFileObject; import com.sun.tools.javac.util.Context; import java.io.BufferedOutputStream; +import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStream; +import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.nio.file.FileVisitResult; import java.nio.file.Files; @@ -69,7 +73,10 @@ } public static Result compile(TurbineOptions turbineOptions) throws IOException { - try (JavacTurbine turbine = new JavacTurbine(new PrintWriter(System.err), turbineOptions)) { + try (JavacTurbine turbine = + new JavacTurbine( + new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.err, UTF_8))), + turbineOptions)) { return turbine.compile(); } } @@ -236,7 +243,6 @@ try (OutputStream fos = Files.newOutputStream(outputJar); ZipOutputStream zipOut = new ZipOutputStream(new BufferedOutputStream(fos, ZIPFILE_BUFFER_SIZE))) { - boolean hasEntries = false; for (Map.Entry<String, OutputFileObject> entry : files.entrySet()) { if (entry.getValue().location != StandardLocation.CLASS_OUTPUT) { continue; @@ -250,11 +256,6 @@ bytes = processBytecode(bytes); } ZipUtil.storeEntry(name, bytes, zipOut); - hasEntries = true; - } - if (!hasEntries) { - // ZipOutputStream refuses to create a completely empty zip file. - ZipUtil.storeEntry("dummy", new byte[0], zipOut); } } }
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 acc9d59..30c8e13 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
@@ -40,10 +40,12 @@ import com.sun.tools.javac.file.JavacFileManager; import com.sun.tools.javac.util.Context; import java.io.BufferedInputStream; +import java.io.BufferedWriter; import java.io.IOError; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.StringWriter; import java.net.URI; @@ -129,7 +131,9 @@ void compile() throws IOException { optionsBuilder.addSources(ImmutableList.copyOf(Iterables.transform(sources, TO_STRING))); try (JavacTurbine turbine = - new JavacTurbine(new PrintWriter(System.err), optionsBuilder.build())) { + new JavacTurbine( + new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.err, UTF_8))), + optionsBuilder.build())) { assertThat(turbine.compile()).isEqualTo(Result.OK_WITH_REDUCED_CLASSPATH); } } @@ -442,7 +446,13 @@ JavacTool tool = JavacTool.create(); JavacTask task = - tool.getTask(new PrintWriter(System.err, true), fm, null, options, null, units); + tool.getTask( + new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.err, UTF_8)), true), + fm, + null, + options, + null, + units); assertThat(task.call()).isTrue(); try (JarOutputStream jos = new JarOutputStream(Files.newOutputStream(jar))) { @@ -538,7 +548,9 @@ optionsBuilder.addSources(ImmutableList.copyOf(Iterables.transform(sources, TO_STRING))); try (JavacTurbine turbine = - new JavacTurbine(new PrintWriter(System.err), optionsBuilder.build())) { + new JavacTurbine( + new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.err, UTF_8))), + optionsBuilder.build())) { assertThat(turbine.compile()).isEqualTo(Result.OK_WITH_REDUCED_CLASSPATH); Context context = turbine.context; @@ -625,7 +637,9 @@ optionsBuilder.addSources(ImmutableList.copyOf(Iterables.transform(sources, TO_STRING))); try (JavacTurbine turbine = - new JavacTurbine(new PrintWriter(System.err), optionsBuilder.build())) { + new JavacTurbine( + new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.err, UTF_8))), + optionsBuilder.build())) { assertThat(turbine.compile()).isEqualTo(Result.OK_WITH_FULL_CLASSPATH); Context context = turbine.context; @@ -1067,7 +1081,7 @@ // don't set up any source files compile(); Map<String, byte[]> outputs = collectOutputs(); - assertThat(outputs.keySet()).containsExactly("dummy"); + assertThat(outputs.keySet()).isEmpty(); } /** An annotation processor that violates the contract. */