Move calls of DexEncodedMethod constructors to create methods

This is the first step of refactoring DexEncodedMethod construction to
use builders.

Change-Id: I88e732756f4535d46329bc2562c0c4502834f99e
diff --git a/src/main/java/com/android/tools/r8/GenerateLintFiles.java b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
index 2906011..8a6645c 100644
--- a/src/main/java/com/android/tools/r8/GenerateLintFiles.java
+++ b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
@@ -153,7 +153,7 @@
         code = buildEmptyThrowingCfCode(method.getReference());
       }
       DexEncodedMethod throwingMethod =
-          new DexEncodedMethod(
+          DexEncodedMethod.create(
               method.getReference(),
               method.accessFlags,
               MethodTypeSignature.noSignature(),
diff --git a/src/main/java/com/android/tools/r8/dex/DexParser.java b/src/main/java/com/android/tools/r8/dex/DexParser.java
index b279333..9a0bba5 100644
--- a/src/main/java/com/android/tools/r8/dex/DexParser.java
+++ b/src/main/java/com/android/tools/r8/dex/DexParser.java
@@ -696,7 +696,7 @@
         }
       }
       methods[i] =
-          new DexEncodedMethod(
+          DexEncodedMethod.create(
               method,
               accessFlags,
               methodTypeSignature,
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 6cbb223..3708bd2 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -145,7 +145,12 @@
           MethodTypeSignature.noSignature(),
           DexAnnotationSet.empty(),
           ParameterAnnotationsList.empty(),
-          null);
+          null,
+          false,
+          null,
+          AndroidApiLevel.UNKNOWN,
+          AndroidApiLevel.UNKNOWN,
+          false);
   public static final Int2ReferenceMap<DebugLocalInfo> NO_PARAMETER_INFO =
       new Int2ReferenceArrayMap<>(0);
 
@@ -222,73 +227,7 @@
     obsolete = false;
   }
 
-  public DexEncodedMethod(
-      DexMethod method,
-      MethodAccessFlags accessFlags,
-      MethodTypeSignature genericSignature,
-      DexAnnotationSet annotations,
-      ParameterAnnotationsList parameterAnnotationsList,
-      Code code) {
-    this(
-        method,
-        accessFlags,
-        genericSignature,
-        annotations,
-        parameterAnnotationsList,
-        code,
-        false,
-        null,
-        AndroidApiLevel.UNKNOWN,
-        AndroidApiLevel.UNKNOWN);
-  }
-
-  public DexEncodedMethod(
-      DexMethod method,
-      MethodAccessFlags accessFlags,
-      MethodTypeSignature genericSignature,
-      DexAnnotationSet annotations,
-      ParameterAnnotationsList parameterAnnotationsList,
-      Code code,
-      boolean d8R8Synthesized) {
-    this(
-        method,
-        accessFlags,
-        genericSignature,
-        annotations,
-        parameterAnnotationsList,
-        code,
-        d8R8Synthesized,
-        null,
-        AndroidApiLevel.UNKNOWN,
-        AndroidApiLevel.UNKNOWN);
-  }
-
-  public DexEncodedMethod(
-      DexMethod method,
-      MethodAccessFlags accessFlags,
-      MethodTypeSignature genericSignature,
-      DexAnnotationSet annotations,
-      ParameterAnnotationsList parameterAnnotationsList,
-      Code code,
-      boolean d8R8Synthesized,
-      CfVersion classFileVersion,
-      AndroidApiLevel apiLevelForDefinition,
-      AndroidApiLevel apiLevelForCode) {
-    this(
-        method,
-        accessFlags,
-        genericSignature,
-        annotations,
-        parameterAnnotationsList,
-        code,
-        d8R8Synthesized,
-        classFileVersion,
-        apiLevelForDefinition,
-        apiLevelForCode,
-        false);
-  }
-
-  public DexEncodedMethod(
+  private DexEncodedMethod(
       DexMethod method,
       MethodAccessFlags accessFlags,
       MethodTypeSignature genericSignature,
@@ -1316,7 +1255,7 @@
     // Some debuggers (like IntelliJ) automatically skip synthetic methods on single step.
     newFlags.setSynthetic();
     newFlags.unsetAbstract();
-    return new DexEncodedMethod(
+    return DexEncodedMethod.create(
         newMethod,
         newFlags,
         MethodTypeSignature.noSignature(),
@@ -1469,6 +1408,100 @@
     this.genericSignature = MethodTypeSignature.noSignature();
   }
 
+  public static DexEncodedMethod create(
+      DexMethod method,
+      MethodAccessFlags accessFlags,
+      MethodTypeSignature genericSignature,
+      DexAnnotationSet annotations,
+      ParameterAnnotationsList parameterAnnotationsList,
+      Code code) {
+    return DexEncodedMethod.create(
+        method,
+        accessFlags,
+        genericSignature,
+        annotations,
+        parameterAnnotationsList,
+        code,
+        false,
+        null,
+        AndroidApiLevel.UNKNOWN,
+        AndroidApiLevel.UNKNOWN,
+        false);
+  }
+
+  public static DexEncodedMethod create(
+      DexMethod method,
+      MethodAccessFlags accessFlags,
+      MethodTypeSignature genericSignature,
+      DexAnnotationSet annotations,
+      ParameterAnnotationsList parameterAnnotationsList,
+      Code code,
+      boolean d8R8Synthesized) {
+    return DexEncodedMethod.create(
+        method,
+        accessFlags,
+        genericSignature,
+        annotations,
+        parameterAnnotationsList,
+        code,
+        d8R8Synthesized,
+        null,
+        AndroidApiLevel.UNKNOWN,
+        AndroidApiLevel.UNKNOWN,
+        false);
+  }
+
+  public static DexEncodedMethod create(
+      DexMethod method,
+      MethodAccessFlags accessFlags,
+      MethodTypeSignature genericSignature,
+      DexAnnotationSet annotations,
+      ParameterAnnotationsList parameterAnnotationsList,
+      Code code,
+      boolean d8R8Synthesized,
+      CfVersion classFileVersion,
+      AndroidApiLevel apiLevelForDefinition,
+      AndroidApiLevel apiLevelForCode) {
+    return DexEncodedMethod.create(
+        method,
+        accessFlags,
+        genericSignature,
+        annotations,
+        parameterAnnotationsList,
+        code,
+        d8R8Synthesized,
+        classFileVersion,
+        apiLevelForDefinition,
+        apiLevelForCode,
+        false);
+  }
+
+  public static DexEncodedMethod create(
+      DexMethod method,
+      MethodAccessFlags accessFlags,
+      MethodTypeSignature genericSignature,
+      DexAnnotationSet annotations,
+      ParameterAnnotationsList parameterAnnotationsList,
+      Code code,
+      boolean d8R8Synthesized,
+      CfVersion classFileVersion,
+      AndroidApiLevel apiLevelForDefinition,
+      AndroidApiLevel apiLevelForCode,
+      boolean deprecated) {
+    return new DexEncodedMethod(
+        method,
+        accessFlags,
+        genericSignature,
+        annotations,
+        parameterAnnotationsList,
+        code,
+        d8R8Synthesized,
+        classFileVersion,
+        apiLevelForDefinition,
+        apiLevelForCode,
+        deprecated);
+  }
+
   private static Builder syntheticBuilder(DexEncodedMethod from) {
     return new Builder(from, true);
   }
@@ -1709,7 +1742,7 @@
       assert apiLevelForDefinition != null;
       assert apiLevelForCode != null;
       DexEncodedMethod result =
-          new DexEncodedMethod(
+          DexEncodedMethod.create(
               method,
               accessFlags,
               genericSignature,
diff --git a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
index 2f052aa..0242f96 100644
--- a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
+++ b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
@@ -902,7 +902,7 @@
             parent.application.getFactory()));
       }
       DexEncodedMethod dexMethod =
-          new DexEncodedMethod(
+          DexEncodedMethod.create(
               method,
               flags,
               genericSignature,
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java
index 43a2c8a..b9a9fb3 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java
@@ -131,7 +131,7 @@
 
     AndroidApiLevel apiReferenceLevel = classInitializerMerger.getApiReferenceLevel(appView);
     DexEncodedMethod definition =
-        new DexEncodedMethod(
+        DexEncodedMethod.create(
             newMethodReference,
             MethodAccessFlags.createForClassInitializer(),
             MethodTypeSignature.noSignature(),
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java
index d6ae971..d8a2a04 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java
@@ -362,7 +362,7 @@
 
     DexEncodedMethod representativeMethod = representative.getDefinition();
     DexEncodedMethod newInstanceInitializer =
-        new DexEncodedMethod(
+        DexEncodedMethod.create(
             newMethodReference,
             getNewAccessFlags(),
             MethodTypeSignature.noSignature(),
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/VirtualMethodMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/VirtualMethodMerger.java
index be6a5a2..9251913 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/VirtualMethodMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/VirtualMethodMerger.java
@@ -278,7 +278,7 @@
             bridgeMethodReference,
             appView.dexItemFactory());
     DexEncodedMethod newMethod =
-        new DexEncodedMethod(
+        DexEncodedMethod.create(
             newMethodReference,
             getAccessFlags(),
             MethodTypeSignature.noSignature(),
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java b/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
index 5760bd2..ee37c25 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
@@ -164,7 +164,7 @@
             .setVirtualTarget(methodReference, methodHolder.isInterface())
             .setCastResult();
     DexEncodedMethod newVirtualMethod =
-        new DexEncodedMethod(
+        DexEncodedMethod.create(
             newMethod,
             newAccessFlags,
             methodDefinition.getGenericSignature(),
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
index e8bdbb9..d2a80bf 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
@@ -159,7 +159,7 @@
 
     // Synthesize main method.
     methods.add(
-        new DexEncodedMethod(
+        DexEncodedMethod.create(
             mainMethod,
             MethodAccessFlags.fromSharedAccessFlags(
                 Constants.ACC_PUBLIC | Constants.ACC_FINAL, false),
@@ -174,7 +174,7 @@
       DexMethod bridgeMethod =
           appView.dexItemFactory().createMethod(type, bridgeProto, descriptor.name);
       methods.add(
-          new DexEncodedMethod(
+          DexEncodedMethod.create(
               bridgeMethod,
               MethodAccessFlags.fromSharedAccessFlags(
                   Constants.ACC_PUBLIC
@@ -198,7 +198,7 @@
 
     // Constructor.
     methods.add(
-        new DexEncodedMethod(
+        DexEncodedMethod.create(
             constructor,
             MethodAccessFlags.fromSharedAccessFlags(
                 (stateless ? Constants.ACC_PRIVATE : Constants.ACC_PUBLIC)
@@ -213,7 +213,7 @@
     // Class constructor for stateless lambda classes.
     if (stateless) {
       methods.add(
-          new DexEncodedMethod(
+          DexEncodedMethod.create(
               classConstructor,
               MethodAccessFlags.fromSharedAccessFlags(
                   Constants.ACC_SYNTHETIC | Constants.ACC_STATIC, true),
@@ -579,7 +579,7 @@
                     // Always make the method public to provide access.
                     newAccessFlags.setPublic();
                     DexEncodedMethod newMethod =
-                        new DexEncodedMethod(
+                        DexEncodedMethod.create(
                             callTarget,
                             newAccessFlags,
                             encodedMethod.getGenericSignature(),
@@ -662,7 +662,7 @@
                     MethodAccessFlags newAccessFlags = encodedMethod.accessFlags.copy();
                     newAccessFlags.unsetPrivate();
                     DexEncodedMethod newMethod =
-                        new DexEncodedMethod(
+                        DexEncodedMethod.create(
                             callTarget,
                             newAccessFlags,
                             encodedMethod.getGenericSignature(),
@@ -726,7 +726,7 @@
       ProgramMethod accessorMethod =
           new ProgramMethod(
               accessorClass,
-              new DexEncodedMethod(
+              DexEncodedMethod.create(
                   callTarget,
                   MethodAccessFlags.createPublicStaticSynthetic(),
                   MethodTypeSignature.noSignature(),
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterLibraryTypeSynthesizor.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterLibraryTypeSynthesizor.java
index 8c5a747..618a528 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterLibraryTypeSynthesizor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryRetargeterLibraryTypeSynthesizor.java
@@ -140,7 +140,7 @@
                       newClass,
                       ignore -> new TreeSet<>(Comparator.comparing(DexEncodedMethod::getReference)))
                   .add(
-                      new DexEncodedMethod(
+                      DexEncodedMethod.create(
                           retargetMethod,
                           MethodAccessFlags.fromCfAccessFlags(
                               Constants.ACC_PUBLIC | Constants.ACC_STATIC, false),
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryWrapperSynthesizer.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryWrapperSynthesizer.java
index aa69845..b41acbf 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryWrapperSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/DesugaredLibraryWrapperSynthesizer.java
@@ -561,7 +561,7 @@
     // TODO(b/146114533): Fix inlining in synthetic methods and remove unsetBridge.
     newFlags.unsetBridge();
     newFlags.setSynthetic();
-    return new DexEncodedMethod(
+    return DexEncodedMethod.create(
         methodToInstall,
         newFlags,
         MethodTypeSignature.noSignature(),
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
index 97d890c..226a377 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
@@ -800,7 +800,7 @@
     MethodAccessFlags accessFlags = MethodAccessFlags.builder().setPublic().build();
     DexMethod newMethod = method.withHolder(clazz.getType(), dexItemFactory);
     DexEncodedMethod newEncodedMethod =
-        new DexEncodedMethod(
+        DexEncodedMethod.create(
             newMethod,
             accessFlags,
             MethodTypeSignature.noSignature(),
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordRewriter.java
index 7c26d30..fb91122 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordRewriter.java
@@ -289,7 +289,7 @@
         MethodAccessFlags.fromSharedAccessFlags(
             Constants.ACC_SYNTHETIC | Constants.ACC_PRIVATE, false);
     DexEncodedMethod encodedMethod =
-        new DexEncodedMethod(
+        DexEncodedMethod.create(
             method,
             methodAccessFlags,
             MethodTypeSignature.noSignature(),
@@ -589,7 +589,7 @@
         MethodAccessFlags.fromSharedAccessFlags(
             Constants.ACC_SYNTHETIC | Constants.ACC_PROTECTED, true);
     DexEncodedMethod init =
-        new DexEncodedMethod(
+        DexEncodedMethod.create(
             factory.recordMembers.init,
             methodAccessFlags,
             MethodTypeSignature.noSignature(),
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/SharedEnumUnboxingUtilityClass.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/SharedEnumUnboxingUtilityClass.java
index 9614ede..c92fc24 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/SharedEnumUnboxingUtilityClass.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/SharedEnumUnboxingUtilityClass.java
@@ -248,7 +248,7 @@
 
     private DexEncodedMethod createClassInitializer(
         DexType sharedUtilityClassType, DexEncodedField valuesField) {
-      return new DexEncodedMethod(
+      return DexEncodedMethod.create(
           dexItemFactory.createClassInitializer(sharedUtilityClassType),
           MethodAccessFlags.createForClassInitializer(),
           MethodTypeSignature.noSignature(),
@@ -292,7 +292,7 @@
     private DexEncodedMethod createValuesMethod(
         DexType sharedUtilityClassType, DexEncodedField valuesField) {
       DexEncodedMethod valuesMethod =
-          new DexEncodedMethod(
+          DexEncodedMethod.create(
               dexItemFactory.createMethod(
                   sharedUtilityClassType,
                   dexItemFactory.createProto(dexItemFactory.intArrayType, dexItemFactory.intType),
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index 27d25bb..2ee8ce5 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -1441,7 +1441,7 @@
       synthesizedBridges.add(code);
 
       DexEncodedMethod bridge =
-          new DexEncodedMethod(
+          DexEncodedMethod.create(
               newMethod,
               accessFlags,
               MethodTypeSignature.noSignature(),
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java
index 196af3b..caec40e 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java
@@ -108,7 +108,7 @@
     DexMethod methodSignature = getMethodSignature();
     MethodAccessFlags accessFlags = getAccessFlags();
     DexEncodedMethod method =
-        new DexEncodedMethod(
+        DexEncodedMethod.create(
             methodSignature,
             accessFlags,
             genericSignature,
diff --git a/src/test/java/com/android/tools/r8/dex/JumboStringProcessing.java b/src/test/java/com/android/tools/r8/dex/JumboStringProcessing.java
index e5b4c08..4517cef 100644
--- a/src/test/java/com/android/tools/r8/dex/JumboStringProcessing.java
+++ b/src/test/java/com/android/tools/r8/dex/JumboStringProcessing.java
@@ -155,7 +155,7 @@
     DexCode code = new DexCode(1, 0, 0, instructions, new Try[0], new TryHandler[0], null);
     MethodAccessFlags flags = MethodAccessFlags.fromSharedAccessFlags(Constants.ACC_PUBLIC, false);
     DexEncodedMethod method =
-        new DexEncodedMethod(
+        DexEncodedMethod.create(
             null,
             flags,
             MethodTypeSignature.noSignature(),
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 4e41e64..4b8eef2 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
@@ -53,7 +53,7 @@
     ProgramMethod method =
         new ProgramMethod(
             clazz,
-            new DexEncodedMethod(
+            DexEncodedMethod.create(
                 signature,
                 MethodAccessFlags.fromDexAccessFlags(0),
                 MethodTypeSignature.noSignature(),
diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
index 0005549..68b1f25 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
@@ -856,7 +856,7 @@
             new SynthesizedCode(
                 (ignored, callerPosition) -> new ReturnVoidCode(voidReturnMethod, callerPosition));
         DexEncodedMethod method =
-            new DexEncodedMethod(
+            DexEncodedMethod.create(
                 voidReturnMethod,
                 access,
                 MethodTypeSignature.noSignature(),