diff --git a/src/main/java/com/android/tools/r8/StringConsumer.java b/src/main/java/com/android/tools/r8/StringConsumer.java
index 1920d6d..d8f7d39 100644
--- a/src/main/java/com/android/tools/r8/StringConsumer.java
+++ b/src/main/java/com/android/tools/r8/StringConsumer.java
@@ -7,7 +7,6 @@
 import com.android.tools.r8.origin.PathOrigin;
 import com.android.tools.r8.utils.ExceptionDiagnostic;
 import java.io.BufferedWriter;
-import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
@@ -102,9 +101,9 @@
     public void accept(String string, DiagnosticsHandler handler) {
       super.accept(string, handler);
       try {
-        File parent = outputPath.getParent().toFile();
-        if (!parent.exists()) {
-          parent.mkdirs();
+        Path parent = outputPath.getParent();
+        if (parent != null && !parent.toFile().exists()) {
+          Files.createDirectories(parent);
         }
         Files.write(outputPath, string.getBytes(encoding));
       } catch (IOException e) {
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index 959fa7c..3393210 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
 
   // This field is accessed from release scripts using simple pattern matching.
   // Therefore, changing this field could break our release scripts.
-  public static final String LABEL = "1.3.37";
+  public static final String LABEL = "1.3.38";
 
   private Version() {
   }
diff --git a/src/main/java/com/android/tools/r8/graph/GraphLense.java b/src/main/java/com/android/tools/r8/graph/GraphLense.java
index 55c58c6ca..3cdd15d 100644
--- a/src/main/java/com/android/tools/r8/graph/GraphLense.java
+++ b/src/main/java/com/android/tools/r8/graph/GraphLense.java
@@ -360,20 +360,18 @@
 
     @Override
     public DexField getRenamedFieldSignature(DexField originalField) {
-      DexField renamedField =
-          originalFieldSignatures != null
-              ? originalFieldSignatures.inverse().getOrDefault(originalField, originalField)
-              : originalField;
-      return previousLense.getRenamedFieldSignature(renamedField);
+      DexField renamedField = previousLense.getRenamedFieldSignature(originalField);
+      return originalFieldSignatures != null
+          ? originalFieldSignatures.inverse().getOrDefault(renamedField, renamedField)
+          : renamedField;
     }
 
     @Override
     public DexMethod getRenamedMethodSignature(DexMethod originalMethod) {
-      DexMethod renamedMethod =
-          originalMethodSignatures != null
-              ? originalMethodSignatures.inverse().getOrDefault(originalMethod, originalMethod)
-              : originalMethod;
-      return previousLense.getRenamedMethodSignature(renamedMethod);
+      DexMethod renamedMethod = previousLense.getRenamedMethodSignature(originalMethod);
+      return originalMethodSignatures != null
+          ? originalMethodSignatures.inverse().getOrDefault(renamedMethod, renamedMethod)
+          : renamedMethod;
     }
 
     @Override
diff --git a/src/test/java/com/android/tools/r8/utils/GenerateMainDexListCommandTest.java b/src/test/java/com/android/tools/r8/utils/GenerateMainDexListCommandTest.java
index c80b72e..6b4be93 100644
--- a/src/test/java/com/android/tools/r8/utils/GenerateMainDexListCommandTest.java
+++ b/src/test/java/com/android/tools/r8/utils/GenerateMainDexListCommandTest.java
@@ -15,6 +15,7 @@
 import com.android.tools.r8.GenerateMainDexListCommand;
 import com.android.tools.r8.StringConsumer;
 import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.origin.Origin;
 import com.google.common.collect.ImmutableList;
 import java.io.IOException;
@@ -95,8 +96,10 @@
     addAndroidJarsToCommandLine(args);
     addInputJarsToCommandLine(args);
     addMainDexRuleToCommandLine(args);
-    assertEquals(0, ToolHelper.forkGenerateMainDexList(
-        working, args, "--main-dex-list-output", mainDexListOutput).exitCode);
+    ProcessResult result =
+        ToolHelper.forkGenerateMainDexList(
+            working, args, "--main-dex-list-output", mainDexListOutput);
+    assertEquals(result.stderr, 0, result.exitCode);
     assertTrue(Files.exists(output));
     assertTrue(Files.size(output) > 0);
   }
