diff --git a/java/com/google/devtools/build/android/desugar/BitFlags.java b/java/com/google/devtools/build/android/desugar/BitFlags.java
index bb32c45..8be2288 100644
--- a/java/com/google/devtools/build/android/desugar/BitFlags.java
+++ b/java/com/google/devtools/build/android/desugar/BitFlags.java
@@ -15,14 +15,12 @@
 
 import org.objectweb.asm.Opcodes;
 
-/**
- * Convenience method for working with {@code int} bitwise flags.
- */
+/** Convenience method for working with {@code int} bitwise flags. */
 class BitFlags {
 
   /**
-   * Returns {@code true} iff <b>all</b> bits in {@code bitmask} are set in {@code flags}.
-   * Trivially returns {@code true} if {@code bitmask} is 0.
+   * Returns {@code true} iff <b>all</b> bits in {@code bitmask} are set in {@code flags}. Trivially
+   * returns {@code true} if {@code bitmask} is 0.
    */
   public static boolean isSet(int flags, int bitmask) {
     return (flags & bitmask) == bitmask;
diff --git a/java/com/google/devtools/build/android/desugar/CoreLibraryRewriter.java b/java/com/google/devtools/build/android/desugar/CoreLibraryRewriter.java
index cbb3271..7f1591b 100644
--- a/java/com/google/devtools/build/android/desugar/CoreLibraryRewriter.java
+++ b/java/com/google/devtools/build/android/desugar/CoreLibraryRewriter.java
@@ -116,6 +116,26 @@
       super.accept(cv, attrs, flags);
     }
 
+    @Override
+    public String getClassName() {
+      return prefix(super.getClassName());
+    }
+
+    @Override
+    public String getSuperName() {
+      String result = super.getSuperName();
+      return result != null ? prefix(result) : null;
+    }
+
+    @Override
+    public String[] getInterfaces() {
+      String[] result = super.getInterfaces();
+      for (int i = 0, len = result.length; i < len; ++i) {
+        result[i] = prefix(result[i]);
+      }
+      return result;
+    }
+
     /** Prefixes core library class names with prefix. */
     private String prefix(String typeName) {
       if (shouldPrefix(typeName)) {
diff --git a/java/com/google/devtools/build/android/desugar/LambdaClassMaker.java b/java/com/google/devtools/build/android/desugar/LambdaClassMaker.java
index 1f240ef..72f039a 100644
--- a/java/com/google/devtools/build/android/desugar/LambdaClassMaker.java
+++ b/java/com/google/devtools/build/android/desugar/LambdaClassMaker.java
@@ -27,6 +27,7 @@
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Stream;
 
 class LambdaClassMaker {
 
@@ -80,11 +81,12 @@
     if (!Files.exists(rootPathPrefix.getParent())) {
       return ImmutableList.of();
     }
-    return Files.list(rootPathPrefix.getParent())
-        .filter(
-            path ->
-                path.toString().startsWith(rootPathPrefixStr)
-                    && !existingPaths.contains(path))
-        .collect(ImmutableList.toImmutableList());
+    try (Stream<Path> paths =
+        Files.list(rootPathPrefix.getParent())
+            .filter(
+                path -> path.toString().startsWith(rootPathPrefixStr)
+                    && !existingPaths.contains(path))) {
+      return paths.collect(ImmutableList.toImmutableList());
+    }
   }
 }
