Move synchronization of class initializer from DexClass to MethodColl
Bug: 159194018
Change-Id: Ibd800bc484baaab0344b87d610d686df0d19e264
diff --git a/src/main/java/com/android/tools/r8/graph/DexClass.java b/src/main/java/com/android/tools/r8/graph/DexClass.java
index 1825fb3..ae39752 100644
--- a/src/main/java/com/android/tools/r8/graph/DexClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexClass.java
@@ -542,8 +542,10 @@
return false;
}
- public synchronized DexEncodedMethod getClassInitializer() {
- return methodCollection.getClassInitializer();
+ public DexEncodedMethod getClassInitializer() {
+ DexEncodedMethod classInitializer = methodCollection.getClassInitializer();
+ assert classInitializer != DexEncodedMethod.SENTINEL;
+ return classInitializer;
}
public Origin getOrigin() {
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index 2269517..4c0c7c5 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -120,7 +120,11 @@
public static final DexEncodedMethod[] EMPTY_ARRAY = {};
public static final DexEncodedMethod SENTINEL =
new DexEncodedMethod(
- null, null, DexAnnotationSet.empty(), ParameterAnnotationsList.empty(), null);
+ null,
+ MethodAccessFlags.fromDexAccessFlags(0),
+ DexAnnotationSet.empty(),
+ ParameterAnnotationsList.empty(),
+ null);
public static final Int2ReferenceMap<DebugLocalInfo> NO_PARAMETER_INFO =
new Int2ReferenceArrayMap<>(0);
@@ -247,6 +251,7 @@
this.code = code;
this.classFileVersion = classFileVersion;
this.d8R8Synthesized = d8R8Synthesized;
+ assert accessFlags != null;
assert code == null || !shouldNotHaveCode();
assert parameterAnnotationsList != null;
}
diff --git a/src/main/java/com/android/tools/r8/graph/MethodCollection.java b/src/main/java/com/android/tools/r8/graph/MethodCollection.java
index c93d366..b1a8f8e 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodCollection.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodCollection.java
@@ -178,7 +178,7 @@
cachedClassInitializer = DexEncodedMethod.SENTINEL;
}
- public DexEncodedMethod getClassInitializer() {
+ public synchronized DexEncodedMethod getClassInitializer() {
if (cachedClassInitializer == DexEncodedMethod.SENTINEL) {
cachedClassInitializer = null;
for (DexEncodedMethod directMethod : directMethods()) {
diff --git a/src/test/java/com/android/tools/r8/ir/conversion/CallGraphTestBase.java b/src/test/java/com/android/tools/r8/ir/conversion/CallGraphTestBase.java
index 2d56233..0465bc5 100644
--- a/src/test/java/com/android/tools/r8/ir/conversion/CallGraphTestBase.java
+++ b/src/test/java/com/android/tools/r8/ir/conversion/CallGraphTestBase.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.graph.DexTypeList;
+import com.android.tools.r8.graph.MethodAccessFlags;
import com.android.tools.r8.graph.ParameterAnnotationsList;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.conversion.CallGraph.Node;
@@ -50,7 +51,11 @@
new ProgramMethod(
clazz,
new DexEncodedMethod(
- signature, null, DexAnnotationSet.empty(), ParameterAnnotationsList.empty(), null));
+ signature,
+ MethodAccessFlags.fromDexAccessFlags(0),
+ DexAnnotationSet.empty(),
+ ParameterAnnotationsList.empty(),
+ null));
return new Node(method);
}