Merge "Avoid using HashMap.computeIfAbsent with recursive creation function."
diff --git a/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java b/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
index 410a47c..c5e62e2 100644
--- a/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
@@ -282,7 +282,8 @@
   }
 
   private Namespace getStateForPackagePrefix(String prefix) {
-    return states.computeIfAbsent(prefix, k -> {
+    Namespace state = states.get(prefix);
+    if (state == null) {
       // Calculate the parent package prefix, e.g., La/b/c -> La/b
       String parentPackage = getParentPackagePrefix(prefix);
       // Create a state for parent package prefix, if necessary, in a recursive manner.
@@ -291,13 +292,16 @@
       // From the super state, get a renamed package prefix for the current level.
       String renamedPackagePrefix = superState.nextPackagePrefix();
       // Create a new state, which corresponds to a new name space, for the current level.
-      return new Namespace(renamedPackagePrefix);
-    });
+      state = new Namespace(renamedPackagePrefix);
+      states.put(prefix, state);
+    }
+    return state;
   }
 
   private Namespace getStateForOuterClass(DexType outer) {
     String prefix = getClassBinaryNameFromDescriptor(outer.toDescriptorString());
-    return states.computeIfAbsent(prefix, k -> {
+    Namespace state = states.get(prefix);
+    if (state == null) {
       // Create a naming state with this classes renaming as prefix.
       DexString renamed = renaming.get(outer);
       if (renamed == null) {
@@ -311,8 +315,10 @@
         }
       }
       String binaryName = getClassBinaryNameFromDescriptor(renamed.toString());
-      return new Namespace(binaryName, "$");
-    });
+      state = new Namespace(binaryName, "$");
+      states.put(prefix, state);
+    }
+    return state;
   }
 
   private void renameArrayTypeIfNeeded(DexType type) {