Remove redundant synchronization in DexProgramClass addDirect/VirtualMethod

The synchronization in these methods were incorrect because they were
locking on the actual object while the field itself was being overwritten.

These methods are only called from R8.run() -> MemberRebindingAnalysis.run()
on a single thread. So until this holds we don't need synchronization here.

Change-Id: I32afb4f33099fa66e97c1a55420ebdbbc9ee0746
diff --git a/src/main/java/com/android/tools/r8/graph/DexProgramClass.java b/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
index 625e28f..945b58b 100644
--- a/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
@@ -342,19 +342,15 @@
     assert !virtualMethod.accessFlags.isStatic();
     assert !virtualMethod.accessFlags.isPrivate();
     assert !virtualMethod.accessFlags.isConstructor();
-    synchronized (virtualMethods) {
-      virtualMethods = Arrays.copyOf(virtualMethods, virtualMethods.length + 1);
-      virtualMethods[virtualMethods.length - 1] = virtualMethod;
-    }
+    virtualMethods = Arrays.copyOf(virtualMethods, virtualMethods.length + 1);
+    virtualMethods[virtualMethods.length - 1] = virtualMethod;
   }
 
   public void addDirectMethod(DexEncodedMethod staticMethod) {
     assert staticMethod.accessFlags.isStatic() || staticMethod.accessFlags.isPrivate()
         || staticMethod.accessFlags.isConstructor();
-    synchronized (directMethods) {
-      directMethods = Arrays.copyOf(directMethods, directMethods.length + 1);
-      directMethods[directMethods.length - 1] = staticMethod;
-    }
+    directMethods = Arrays.copyOf(directMethods, directMethods.length + 1);
+    directMethods[directMethods.length - 1] = staticMethod;
   }
 
   public void sortMembers() {