Revert changes to DexItemFactory#createType

Reason for revert: Nondeterminism in JetNewsAppPartial benchmark
Test: run_benchmark.py --benchmark JetNewsAppPartial --target r8-full -w 0 -i 100
Change-Id: I29db25d3094dfc6636c951413a72bd89fa3c6683
diff --git a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
index ad19a9f..ce75e87 100644
--- a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
+++ b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
@@ -3360,6 +3360,28 @@
     return markers;
   }
 
+  // Non-synchronized internal create.
+  private DexType internalCreateType(DexString descriptor) {
+    assert descriptor != null;
+    DexType result = types.get(descriptor);
+    if (result == null) {
+      if (descriptor.getFirstByteAsChar() != '[') {
+        result = new DexType(descriptor);
+      } else {
+        DexType elementType = createType(descriptor.toArrayElementDescriptor(this));
+        result = new DexArrayType(descriptor, elementType);
+      }
+      assert result.isArrayType()
+              || result.isClassType()
+              || result.isPrimitiveType()
+              || result.isVoidType()
+          : descriptor.toString();
+      assert !isInternalSentinel(result);
+      types.put(descriptor, result);
+    }
+    return result;
+  }
+
   private DexType createStaticallyKnownType(String descriptor) {
     return createStaticallyKnownType(createString(descriptor));
   }
@@ -3372,7 +3394,7 @@
   }
 
   private DexType createStaticallyKnownType(DexString descriptor) {
-    DexType type = createType(descriptor);
+    DexType type = internalCreateType(descriptor);
     // Conservatively add all statically known types to "compiler synthesized types set".
     addPossiblySynthesizedType(type);
     return type;
@@ -3380,8 +3402,8 @@
 
   // Safe synchronized external create. May be used for statically known types in synthetic code.
   // See the generated BackportedMethods.java for reference.
-  public DexType createSynthesizedType(String descriptor) {
-    DexType type = createType(createString(descriptor));
+  public synchronized DexType createSynthesizedType(String descriptor) {
+    DexType type = internalCreateType(createString(descriptor));
     addPossiblySynthesizedType(type);
     return type;
   }
@@ -3409,21 +3431,9 @@
     possibleCompilerSynthesizedTypes.forEach(fn);
   }
 
-  public DexType createType(DexString descriptor) {
-    assert descriptor != null;
-    DexType committed = committedTypes.get(descriptor);
-    if (committed != null) {
-      return committed;
-    }
-    if (descriptor.getFirstByteAsChar() != '[') {
-      return types.computeIfAbsent(descriptor, DexType::new);
-    }
-    DexType pending = types.get(descriptor);
-    if (pending != null) {
-      return pending;
-    }
-    DexType elementType = createType(descriptor.toArrayElementDescriptor(this));
-    return types.computeIfAbsent(descriptor, d -> new DexArrayType(d, elementType));
+  // Safe synchronized external create. Should never be used to create a statically known type!
+  public synchronized DexType createType(DexString descriptor) {
+    return internalCreateType(descriptor);
   }
 
   public DexType createType(String descriptor) {
@@ -3676,7 +3686,7 @@
   public void commitPendingItems() {
     commitPendingItems(committedMethodHandles, methodHandles);
     commitPendingItems(committedStrings, strings);
-    commitPendingItems(committedTypes, types);
+    // commitPendingItems(committedTypes, types);
     commitPendingItems(committedFields, fields);
     commitPendingItems(committedProtos, protos);
     commitPendingItems(committedMethods, methods);