diff --git a/jar-infer/jar-infer-lib/src/main/java/com/uber/nullaway/jarinfer/BytecodeAnnotator.java b/jar-infer/jar-infer-lib/src/main/java/com/uber/nullaway/jarinfer/BytecodeAnnotator.java index c0ef25eab7..b657593e87 100644 --- a/jar-infer/jar-infer-lib/src/main/java/com/uber/nullaway/jarinfer/BytecodeAnnotator.java +++ b/jar-infer/jar-infer-lib/src/main/java/com/uber/nullaway/jarinfer/BytecodeAnnotator.java @@ -278,6 +278,8 @@ public static void annotateBytecodeInJar( // Do not use JarInputStream in place of JarFile/JarEntry. JarInputStream misses MANIFEST.MF // while iterating over the entries in the stream. // Reference: https://bugs.openjdk.java.net/browse/JDK-8215788 + // Note: we can't just put the code below inside stream().forach(), because it can throw + // IOException. for (JarEntry jarEntry : inputJar.stream().collect(ImmutableList.toImmutableList())) { InputStream is = inputJar.getInputStream(jarEntry); copyAndAnnotateJarEntry( diff --git a/jar-infer/jar-infer-lib/src/test/java/com/uber/nullaway/jarinfer/EntriesComparator.java b/jar-infer/jar-infer-lib/src/test/java/com/uber/nullaway/jarinfer/EntriesComparator.java index 6660f5f639..267c073b03 100644 --- a/jar-infer/jar-infer-lib/src/test/java/com/uber/nullaway/jarinfer/EntriesComparator.java +++ b/jar-infer/jar-infer-lib/src/test/java/com/uber/nullaway/jarinfer/EntriesComparator.java @@ -16,6 +16,7 @@ package com.uber.nullaway.jarinfer; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableSet; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -43,11 +44,11 @@ public static boolean compareEntriesInJars(String jarFile1, String jarFile2) thr Preconditions.checkArgument(jarFile1.endsWith(".jar"), "invalid jar file: " + jarFile1); Preconditions.checkArgument(jarFile2.endsWith(".jar"), "invalid jar file: " + jarFile2); JarFile jar1 = new JarFile(jarFile1); - Set jar1Entries = new HashSet<>(); - jar1.stream().forEach(entry -> jar1Entries.add(entry.getName())); JarFile jar2 = new JarFile(jarFile2); - Set jar2Entries = new HashSet<>(); - jar2.stream().forEach(entry -> jar2Entries.add(entry.getName())); + Set jar1Entries = + jar1.stream().map(ZipEntry::getName).collect(ImmutableSet.toImmutableSet()); + Set jar2Entries = + jar2.stream().map(ZipEntry::getName).collect(ImmutableSet.toImmutableSet()); return jar1Entries.equals(jar2Entries); } @@ -65,11 +66,11 @@ public static boolean compareEntriesInAars(String aarFile1, String aarFile2) thr Preconditions.checkArgument(aarFile1.endsWith(".aar"), "invalid aar file: " + aarFile1); Preconditions.checkArgument(aarFile2.endsWith(".aar"), "invalid aar file: " + aarFile2); ZipFile zip1 = new ZipFile(aarFile1); - Set zip1Entries = new HashSet<>(); - zip1.stream().forEach(entry -> zip1Entries.add(entry.getName())); ZipFile zip2 = new ZipFile(aarFile2); - Set zip2Entries = new HashSet<>(); - zip2.stream().forEach(entry -> zip2Entries.add(entry.getName())); + Set zip1Entries = + zip1.stream().map(ZipEntry::getName).collect(ImmutableSet.toImmutableSet()); + Set zip2Entries = + zip2.stream().map(ZipEntry::getName).collect(ImmutableSet.toImmutableSet()); if (!zip1Entries.equals(zip2Entries)) { return false; }