Inline all calls to DexEncodedMethod.create

Change-Id: I02ceffaef4a4354be2bf07619da52b05dc448e7c
diff --git a/src/main/java/com/android/tools/r8/GenerateLintFiles.java b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
index 22b810e..6c9025d 100644
--- a/src/main/java/com/android/tools/r8/GenerateLintFiles.java
+++ b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
@@ -33,7 +33,6 @@
 import com.android.tools.r8.graph.GraphLens;
 import com.android.tools.r8.graph.LazyLoadedDexApplication;
 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.desugar.desugaredlibrary.DesugaredLibraryConfiguration;
 import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibraryConfigurationParser;
@@ -153,17 +152,12 @@
         code = buildEmptyThrowingCfCode(method.getReference());
       }
       DexEncodedMethod throwingMethod =
-          DexEncodedMethod.create(
-                  method.getReference(),
-                  method.accessFlags,
-                  MethodTypeSignature.noSignature(),
-                  DexAnnotationSet.empty(),
-                  ParameterAnnotationsList.empty(),
-                  code,
-                  CfVersion.V1_6,
-                  AndroidApiLevel.UNKNOWN,
-                  AndroidApiLevel.UNKNOWN,
-                  false)
+          DexEncodedMethod.builder()
+              .setMethod(method.getReference())
+              .setAccessFlags(method.accessFlags)
+              .setGenericSignature(MethodTypeSignature.noSignature())
+              .setCode(code)
+              .setClassFileVersion(CfVersion.V1_6)
               .build();
       if (method.isStatic() || method.isDirectMethod()) {
         directMethods.add(throwingMethod);
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 9a0bba5..68a9a67 100644
--- a/src/main/java/com/android/tools/r8/dex/DexParser.java
+++ b/src/main/java/com/android/tools/r8/dex/DexParser.java
@@ -696,13 +696,14 @@
         }
       }
       methods[i] =
-          DexEncodedMethod.create(
-              method,
-              accessFlags,
-              methodTypeSignature,
-              methodAnnotations,
-              parameterAnnotationsIterator.getNextFor(method),
-              code);
+          DexEncodedMethod.builder()
+              .setMethod(method)
+              .setAccessFlags(accessFlags)
+              .setGenericSignature(methodTypeSignature)
+              .setAnnotations(methodAnnotations)
+              .setParameterAnnotations(parameterAnnotationsIterator.getNextFor(method))
+              .setCode(code)
+              .build();
     }
     return methods;
   }
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 f584196..9cc0945 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -1253,17 +1253,19 @@
     // Some debuggers (like IntelliJ) automatically skip synthetic methods on single step.
     newFlags.setSynthetic();
     newFlags.unsetAbstract();
-    return DexEncodedMethod.createSynthetic(
-        newMethod,
-        newFlags,
-        MethodTypeSignature.noSignature(),
-        DexAnnotationSet.empty(),
-        ParameterAnnotationsList.empty(),
-        ForwardMethodBuilder.builder(factory)
-            .setNonStaticSource(newMethod)
-            // Holder is companion class, or retarget method, not an interface.
-            .setStaticTarget(forwardMethod, false)
-            .build());
+    // Holder is companion class, or retarget method, not an interface.
+    return syntheticBuilder()
+        .setMethod(newMethod)
+        .setAccessFlags(newFlags)
+        .setGenericSignature(MethodTypeSignature.noSignature())
+        .setAnnotations(DexAnnotationSet.empty())
+        .setCode(
+            ForwardMethodBuilder.builder(factory)
+                .setNonStaticSource(newMethod)
+                // Holder is companion class, or retarget method, not an interface.
+                .setStaticTarget(forwardMethod, false)
+                .build())
+        .build();
   }
 
   public DexEncodedMethod toStaticMethodWithoutThis(AppView<AppInfoWithLiveness> appView) {
@@ -1405,134 +1407,6 @@
     this.genericSignature = MethodTypeSignature.noSignature();
   }
 
-  public static DexEncodedMethod create(
-      DexMethod method,
-      MethodAccessFlags accessFlags,
-      MethodTypeSignature genericSignature,
-      DexAnnotationSet annotations,
-      ParameterAnnotationsList parameterAnnotationsList,
-      Code code) {
-    return builder()
-        .setMethod(method)
-        .setAccessFlags(accessFlags)
-        .setGenericSignature(genericSignature)
-        .setAnnotations(annotations)
-        .setParameterAnnotations(parameterAnnotationsList)
-        .setCode(code)
-        .build();
-  }
-
-  public static DexEncodedMethod createSynthetic(
-      DexMethod method,
-      MethodAccessFlags accessFlags,
-      MethodTypeSignature genericSignature,
-      DexAnnotationSet annotations,
-      ParameterAnnotationsList parameterAnnotationsList,
-      Code code) {
-    return syntheticBuilder()
-        .setMethod(method)
-        .setAccessFlags(accessFlags)
-        .setGenericSignature(genericSignature)
-        .setAnnotations(annotations)
-        .setParameterAnnotations(parameterAnnotationsList)
-        .setCode(code)
-        .build();
-  }
-
-  public static DexEncodedMethod create(
-      DexMethod method,
-      MethodAccessFlags accessFlags,
-      MethodTypeSignature genericSignature,
-      DexAnnotationSet annotations,
-      ParameterAnnotationsList parameterAnnotationsList,
-      Code code,
-      CfVersion classFileVersion,
-      AndroidApiLevel apiLevelForDefinition,
-      AndroidApiLevel apiLevelForCode) {
-    return builder()
-        .setMethod(method)
-        .setAccessFlags(accessFlags)
-        .setGenericSignature(genericSignature)
-        .setAnnotations(annotations)
-        .setParameterAnnotations(parameterAnnotationsList)
-        .setCode(code)
-        .setClassFileVersion(classFileVersion)
-        .setApiLevelForDefinition(apiLevelForDefinition)
-        .setApiLevelForCode(apiLevelForCode)
-        .build();
-  }
-
-  public static DexEncodedMethod createSynthetic(
-      DexMethod method,
-      MethodAccessFlags accessFlags,
-      MethodTypeSignature genericSignature,
-      DexAnnotationSet annotations,
-      ParameterAnnotationsList parameterAnnotationsList,
-      Code code,
-      CfVersion classFileVersion,
-      AndroidApiLevel apiLevelForDefinition,
-      AndroidApiLevel apiLevelForCode) {
-    return syntheticBuilder()
-        .setMethod(method)
-        .setAccessFlags(accessFlags)
-        .setGenericSignature(genericSignature)
-        .setAnnotations(annotations)
-        .setParameterAnnotations(parameterAnnotationsList)
-        .setCode(code)
-        .setClassFileVersion(classFileVersion)
-        .setApiLevelForDefinition(apiLevelForDefinition)
-        .setApiLevelForCode(apiLevelForCode)
-        .build();
-  }
-
-  public static DexEncodedMethod.Builder create(
-      DexMethod method,
-      MethodAccessFlags accessFlags,
-      MethodTypeSignature genericSignature,
-      DexAnnotationSet annotations,
-      ParameterAnnotationsList parameterAnnotationsList,
-      Code code,
-      CfVersion classFileVersion,
-      AndroidApiLevel apiLevelForDefinition,
-      AndroidApiLevel apiLevelForCode,
-      boolean deprecated) {
-    return builder()
-        .setMethod(method)
-        .setAccessFlags(accessFlags)
-        .setGenericSignature(genericSignature)
-        .setAnnotations(annotations)
-        .setParameterAnnotations(parameterAnnotationsList)
-        .setCode(code)
-        .setClassFileVersion(classFileVersion)
-        .setApiLevelForDefinition(apiLevelForDefinition)
-        .setApiLevelForCode(apiLevelForCode)
-        .setDeprecated(deprecated);
-  }
-
-  public static DexEncodedMethod.Builder createSynthetic(
-      DexMethod method,
-      MethodAccessFlags accessFlags,
-      MethodTypeSignature genericSignature,
-      DexAnnotationSet annotations,
-      ParameterAnnotationsList parameterAnnotationsList,
-      Code code,
-      CfVersion classFileVersion,
-      AndroidApiLevel apiLevelForDefinition,
-      AndroidApiLevel apiLevelForCode,
-      boolean deprecated) {
-    return syntheticBuilder()
-        .setMethod(method)
-        .setAccessFlags(accessFlags)
-        .setGenericSignature(genericSignature)
-        .setAnnotations(annotations)
-        .setParameterAnnotations(parameterAnnotationsList)
-        .setCode(code)
-        .setClassFileVersion(classFileVersion)
-        .setApiLevelForDefinition(apiLevelForDefinition)
-        .setApiLevelForCode(apiLevelForCode)
-        .setDeprecated(deprecated);
-  }
-
   public static Builder syntheticBuilder() {
     return new Builder(true);
   }
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 9eaf023..de21f86 100644
--- a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
+++ b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
@@ -902,17 +902,17 @@
             parent.application.getFactory()));
       }
       DexEncodedMethod dexMethod =
-          DexEncodedMethod.create(
-                  method,
-                  flags,
-                  genericSignature,
-                  createAnnotationSet(annotations, options),
-                  parameterAnnotationsList,
-                  code,
-                  parent.version,
-                  AndroidApiLevel.UNKNOWN,
-                  AndroidApiLevel.UNKNOWN,
-                  deprecated)
+          DexEncodedMethod.builder()
+              .setMethod(method)
+              .setAccessFlags(flags)
+              .setGenericSignature(genericSignature)
+              .setAnnotations(createAnnotationSet(annotations, options))
+              .setParameterAnnotations(parameterAnnotationsList)
+              .setCode(code)
+              .setClassFileVersion(parent.version)
+              .setApiLevelForDefinition(AndroidApiLevel.UNKNOWN)
+              .setApiLevelForCode(AndroidApiLevel.UNKNOWN)
+              .setDeprecated(deprecated)
               .disableParameterAnnotationListCheck()
               .build();
       Wrapper<DexMethod> signature = MethodSignatureEquivalence.get().wrap(method);
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 f17015a..8854d1d 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java
@@ -131,16 +131,17 @@
 
     AndroidApiLevel apiReferenceLevel = classInitializerMerger.getApiReferenceLevel(appView);
     DexEncodedMethod definition =
-        DexEncodedMethod.createSynthetic(
-            newMethodReference,
-            MethodAccessFlags.createForClassInitializer(),
-            MethodTypeSignature.noSignature(),
-            DexAnnotationSet.empty(),
-            ParameterAnnotationsList.empty(),
-            classInitializerMerger.getCode(syntheticMethodReference),
-            classInitializerMerger.getCfVersion(),
-            apiReferenceLevel,
-            apiReferenceLevel);
+        DexEncodedMethod.syntheticBuilder()
+            .setMethod(newMethodReference)
+            .setAccessFlags(MethodAccessFlags.createForClassInitializer())
+            .setGenericSignature(MethodTypeSignature.noSignature())
+            .setAnnotations(DexAnnotationSet.empty())
+            .setParameterAnnotations(ParameterAnnotationsList.empty())
+            .setCode(classInitializerMerger.getCode(syntheticMethodReference))
+            .setClassFileVersion(classInitializerMerger.getCfVersion())
+            .setApiLevelForDefinition(apiReferenceLevel)
+            .setApiLevelForCode(apiReferenceLevel)
+            .build();
     classMethodsBuilder.addDirectMethod(definition);
 
     // In case we didn't synthesize CF code, we register the class initializer for conversion to dex
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 0daea92e..e76ef81 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java
@@ -362,16 +362,18 @@
 
     DexEncodedMethod representativeMethod = representative.getDefinition();
     DexEncodedMethod newInstanceInitializer =
-        DexEncodedMethod.createSynthetic(
-            newMethodReference,
-            getNewAccessFlags(),
-            MethodTypeSignature.noSignature(),
-            DexAnnotationSet.empty(),
-            ParameterAnnotationsList.empty(),
-            getNewCode(newMethodReference, syntheticMethodReference, needsClassId, extraNulls),
-            getNewClassFileVersion(),
-            representativeMethod.getApiLevelForDefinition(),
-            representativeMethod.getApiLevelForCode());
+        DexEncodedMethod.syntheticBuilder()
+            .setMethod(newMethodReference)
+            .setAccessFlags(getNewAccessFlags())
+            .setGenericSignature(MethodTypeSignature.noSignature())
+            .setAnnotations(DexAnnotationSet.empty())
+            .setParameterAnnotations(ParameterAnnotationsList.empty())
+            .setCode(
+                getNewCode(newMethodReference, syntheticMethodReference, needsClassId, extraNulls))
+            .setClassFileVersion(getNewClassFileVersion())
+            .setApiLevelForDefinition(representativeMethod.getApiLevelForDefinition())
+            .setApiLevelForCode(representativeMethod.getApiLevelForCode())
+            .build();
     classMethodsBuilder.addDirectMethod(newInstanceInitializer);
 
     if (mode.isFinal()) {
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 73c777e..1e375d6 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/VirtualMethodMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/VirtualMethodMerger.java
@@ -278,16 +278,17 @@
             bridgeMethodReference,
             appView.dexItemFactory());
     DexEncodedMethod newMethod =
-        DexEncodedMethod.createSynthetic(
-            newMethodReference,
-            getAccessFlags(),
-            MethodTypeSignature.noSignature(),
-            DexAnnotationSet.empty(),
-            ParameterAnnotationsList.empty(),
-            synthesizedCode,
-            classFileVersion,
-            representativeMethod.getApiLevelForDefinition(),
-            representativeMethod.getApiLevelForCode());
+        DexEncodedMethod.syntheticBuilder()
+            .setMethod(newMethodReference)
+            .setAccessFlags(getAccessFlags())
+            .setGenericSignature(MethodTypeSignature.noSignature())
+            .setAnnotations(DexAnnotationSet.empty())
+            .setParameterAnnotations(ParameterAnnotationsList.empty())
+            .setCode(synthesizedCode)
+            .setClassFileVersion(classFileVersion)
+            .setApiLevelForDefinition(representativeMethod.getApiLevelForDefinition())
+            .setApiLevelForCode(representativeMethod.getApiLevelForCode())
+            .build();
     if (!representative.getDefinition().isLibraryMethodOverride().isUnknown()) {
       newMethod.setLibraryMethodOverride(representative.getDefinition().isLibraryMethodOverride());
     }
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 dcc79bf..a18d9b9 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,15 +164,18 @@
             .setVirtualTarget(methodReference, methodHolder.isInterface())
             .setCastResult();
     DexEncodedMethod newVirtualMethod =
-        DexEncodedMethod.createSynthetic(
-            newMethod,
-            newAccessFlags,
-            methodDefinition.getGenericSignature(),
-            methodDefinition
-                .annotations()
-                .keepIf(x -> !isCovariantReturnTypeAnnotation(x.annotation)),
-            methodDefinition.parameterAnnotationsList.keepIf(Predicates.alwaysTrue()),
-            forwardMethodBuilder.build());
+        DexEncodedMethod.syntheticBuilder()
+            .setMethod(newMethod)
+            .setAccessFlags(newAccessFlags)
+            .setGenericSignature(methodDefinition.getGenericSignature())
+            .setAnnotations(
+                methodDefinition
+                    .annotations()
+                    .keepIf(x -> !isCovariantReturnTypeAnnotation(x.annotation)))
+            .setParameterAnnotations(
+                methodDefinition.parameterAnnotationsList.keepIf(Predicates.alwaysTrue()))
+            .setCode(forwardMethodBuilder.build())
+            .build();
     // Optimize to generate DexCode instead of CfCode.
     ProgramMethod programMethod = new ProgramMethod(methodHolder, newVirtualMethod);
     converter.optimizeSynthesizedMethod(programMethod);
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 50677f6..cf6954a 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,32 +159,36 @@
 
     // Synthesize main method.
     methods.add(
-        DexEncodedMethod.createSynthetic(
-            mainMethod,
-            MethodAccessFlags.fromSharedAccessFlags(
-                Constants.ACC_PUBLIC | Constants.ACC_FINAL, false),
-            MethodTypeSignature.noSignature(),
-            DexAnnotationSet.empty(),
-            ParameterAnnotationsList.empty(),
-            LambdaMainMethodSourceCode.build(this, mainMethod)));
+        DexEncodedMethod.syntheticBuilder()
+            .setMethod(mainMethod)
+            .setAccessFlags(
+                MethodAccessFlags.fromSharedAccessFlags(
+                    Constants.ACC_PUBLIC | Constants.ACC_FINAL, false))
+            .setGenericSignature(MethodTypeSignature.noSignature())
+            .setAnnotations(DexAnnotationSet.empty())
+            .setParameterAnnotations(ParameterAnnotationsList.empty())
+            .setCode(LambdaMainMethodSourceCode.build(this, mainMethod))
+            .build());
 
     // Synthesize bridge methods.
     for (DexProto bridgeProto : descriptor.bridges) {
       DexMethod bridgeMethod =
           appView.dexItemFactory().createMethod(type, bridgeProto, descriptor.name);
       methods.add(
-          DexEncodedMethod.createSynthetic(
-              bridgeMethod,
-              MethodAccessFlags.fromSharedAccessFlags(
-                  Constants.ACC_PUBLIC
-                      | Constants.ACC_FINAL
-                      | Constants.ACC_SYNTHETIC
-                      | Constants.ACC_BRIDGE,
-                  false),
-              MethodTypeSignature.noSignature(),
-              DexAnnotationSet.empty(),
-              ParameterAnnotationsList.empty(),
-              LambdaBridgeMethodSourceCode.build(this, bridgeMethod, mainMethod)));
+          DexEncodedMethod.syntheticBuilder()
+              .setMethod(bridgeMethod)
+              .setAccessFlags(
+                  MethodAccessFlags.fromSharedAccessFlags(
+                      Constants.ACC_PUBLIC
+                          | Constants.ACC_FINAL
+                          | Constants.ACC_SYNTHETIC
+                          | Constants.ACC_BRIDGE,
+                      false))
+              .setGenericSignature(MethodTypeSignature.noSignature())
+              .setAnnotations(DexAnnotationSet.empty())
+              .setParameterAnnotations(ParameterAnnotationsList.empty())
+              .setCode(LambdaBridgeMethodSourceCode.build(this, bridgeMethod, mainMethod))
+              .build());
     }
     builder.setVirtualMethods(methods);
   }
@@ -195,29 +199,33 @@
     List<DexEncodedMethod> methods = new ArrayList<>(stateless ? 2 : 1);
 
     // Constructor.
+    MethodAccessFlags accessFlags =
+        MethodAccessFlags.fromSharedAccessFlags(
+            (stateless ? Constants.ACC_PRIVATE : Constants.ACC_PUBLIC) | Constants.ACC_SYNTHETIC,
+            true);
     methods.add(
-        DexEncodedMethod.createSynthetic(
-            constructor,
-            MethodAccessFlags.fromSharedAccessFlags(
-                (stateless ? Constants.ACC_PRIVATE : Constants.ACC_PUBLIC)
-                    | Constants.ACC_SYNTHETIC,
-                true),
-            MethodTypeSignature.noSignature(),
-            DexAnnotationSet.empty(),
-            ParameterAnnotationsList.empty(),
-            LambdaConstructorSourceCode.build(this)));
+        DexEncodedMethod.syntheticBuilder()
+            .setMethod(constructor)
+            .setAccessFlags(accessFlags)
+            .setGenericSignature(MethodTypeSignature.noSignature())
+            .setAnnotations(DexAnnotationSet.empty())
+            .setParameterAnnotations(ParameterAnnotationsList.empty())
+            .setCode(LambdaConstructorSourceCode.build(this))
+            .build());
 
     // Class constructor for stateless lambda classes.
     if (stateless) {
       methods.add(
-          DexEncodedMethod.createSynthetic(
-              classConstructor,
-              MethodAccessFlags.fromSharedAccessFlags(
-                  Constants.ACC_SYNTHETIC | Constants.ACC_STATIC, true),
-              MethodTypeSignature.noSignature(),
-              DexAnnotationSet.empty(),
-              ParameterAnnotationsList.empty(),
-              LambdaClassConstructorSourceCode.build(this)));
+          DexEncodedMethod.syntheticBuilder()
+              .setMethod(classConstructor)
+              .setAccessFlags(
+                  MethodAccessFlags.fromSharedAccessFlags(
+                      Constants.ACC_SYNTHETIC | Constants.ACC_STATIC, true))
+              .setGenericSignature(MethodTypeSignature.noSignature())
+              .setAnnotations(DexAnnotationSet.empty())
+              .setParameterAnnotations(ParameterAnnotationsList.empty())
+              .setCode(LambdaClassConstructorSourceCode.build(this))
+              .build());
       feedback.classInitializerMayBePostponed(methods.get(1));
     }
     builder.setDirectMethods(methods);
@@ -575,13 +583,14 @@
                     // Always make the method public to provide access.
                     newAccessFlags.setPublic();
                     DexEncodedMethod newMethod =
-                        DexEncodedMethod.createSynthetic(
-                            callTarget,
-                            newAccessFlags,
-                            encodedMethod.getGenericSignature(),
-                            encodedMethod.annotations(),
-                            encodedMethod.parameterAnnotationsList,
-                            encodedMethod.getCode());
+                        DexEncodedMethod.syntheticBuilder()
+                            .setMethod(callTarget)
+                            .setAccessFlags(newAccessFlags)
+                            .setGenericSignature(encodedMethod.getGenericSignature())
+                            .setAnnotations(encodedMethod.annotations())
+                            .setParameterAnnotations(encodedMethod.parameterAnnotationsList)
+                            .setCode(encodedMethod.getCode())
+                            .build();
                     newMethod.copyMetadata(encodedMethod);
                     forcefullyMovedLambdaMethodConsumer.acceptForcefullyMovedLambdaMethod(
                         encodedMethod.getReference(), callTarget);
@@ -657,13 +666,14 @@
                     MethodAccessFlags newAccessFlags = encodedMethod.accessFlags.copy();
                     newAccessFlags.unsetPrivate();
                     DexEncodedMethod newMethod =
-                        DexEncodedMethod.createSynthetic(
-                            callTarget,
-                            newAccessFlags,
-                            encodedMethod.getGenericSignature(),
-                            encodedMethod.annotations(),
-                            encodedMethod.parameterAnnotationsList,
-                            encodedMethod.getCode());
+                        DexEncodedMethod.syntheticBuilder()
+                            .setMethod(callTarget)
+                            .setAccessFlags(newAccessFlags)
+                            .setGenericSignature(encodedMethod.getGenericSignature())
+                            .setAnnotations(encodedMethod.annotations())
+                            .setParameterAnnotations(encodedMethod.parameterAnnotationsList)
+                            .setCode(encodedMethod.getCode())
+                            .build();
                     newMethod.copyMetadata(encodedMethod);
                     forcefullyMovedLambdaMethodConsumer.acceptForcefullyMovedLambdaMethod(
                         encodedMethod.getReference(), callTarget);
@@ -720,13 +730,14 @@
       ProgramMethod accessorMethod =
           new ProgramMethod(
               accessorClass,
-              DexEncodedMethod.createSynthetic(
-                  callTarget,
-                  MethodAccessFlags.createPublicStaticSynthetic(),
-                  MethodTypeSignature.noSignature(),
-                  DexAnnotationSet.empty(),
-                  ParameterAnnotationsList.empty(),
-                  AccessorMethodSourceCode.build(LambdaClass.this, callTarget)));
+              DexEncodedMethod.syntheticBuilder()
+                  .setMethod(callTarget)
+                  .setAccessFlags(MethodAccessFlags.createPublicStaticSynthetic())
+                  .setGenericSignature(MethodTypeSignature.noSignature())
+                  .setAnnotations(DexAnnotationSet.empty())
+                  .setParameterAnnotations(ParameterAnnotationsList.empty())
+                  .setCode(AccessorMethodSourceCode.build(LambdaClass.this, callTarget))
+                  .build());
       accessorClass.addDirectMethod(accessorMethod.getDefinition());
       if (appView.options().isDesugaredLibraryCompilation()
           || appView.options().isGeneratingDex()) {
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 883cc24..3289a18 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,14 +140,16 @@
                       newClass,
                       ignore -> new TreeSet<>(Comparator.comparing(DexEncodedMethod::getReference)))
                   .add(
-                      DexEncodedMethod.createSynthetic(
-                          retargetMethod,
-                          MethodAccessFlags.fromCfAccessFlags(
-                              Constants.ACC_PUBLIC | Constants.ACC_STATIC, false),
-                          MethodTypeSignature.noSignature(),
-                          DexAnnotationSet.empty(),
-                          ParameterAnnotationsList.empty(),
-                          null));
+                      DexEncodedMethod.syntheticBuilder()
+                          .setMethod(retargetMethod)
+                          .setAccessFlags(
+                              MethodAccessFlags.fromCfAccessFlags(
+                                  Constants.ACC_PUBLIC | Constants.ACC_STATIC, false))
+                          .setGenericSignature(MethodTypeSignature.noSignature())
+                          .setAnnotations(DexAnnotationSet.empty())
+                          .setParameterAnnotations(ParameterAnnotationsList.empty())
+                          .setCode(null)
+                          .build());
             }
           });
     }
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 053ac7c..fe0f206 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,13 +561,14 @@
     // TODO(b/146114533): Fix inlining in synthetic methods and remove unsetBridge.
     newFlags.unsetBridge();
     newFlags.setSynthetic();
-    return DexEncodedMethod.createSynthetic(
-        methodToInstall,
-        newFlags,
-        MethodTypeSignature.noSignature(),
-        DexAnnotationSet.empty(),
-        ParameterAnnotationsList.empty(),
-        code);
+    return DexEncodedMethod.syntheticBuilder()
+        .setMethod(methodToInstall)
+        .setAccessFlags(newFlags)
+        .setGenericSignature(MethodTypeSignature.noSignature())
+        .setAnnotations(DexAnnotationSet.empty())
+        .setParameterAnnotations(ParameterAnnotationsList.empty())
+        .setCode(code)
+        .build();
   }
 
   private List<DexEncodedMethod> allImplementedMethods(DexClass clazz) {
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 055905d..64c05ee 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,13 +800,15 @@
     MethodAccessFlags accessFlags = MethodAccessFlags.builder().setPublic().build();
     DexMethod newMethod = method.withHolder(clazz.getType(), dexItemFactory);
     DexEncodedMethod newEncodedMethod =
-        DexEncodedMethod.createSynthetic(
-            newMethod,
-            accessFlags,
-            MethodTypeSignature.noSignature(),
-            DexAnnotationSet.empty(),
-            ParameterAnnotationsList.empty(),
-            createExceptionThrowingCfCode(newMethod, accessFlags, errorType, dexItemFactory));
+        DexEncodedMethod.syntheticBuilder()
+            .setMethod(newMethod)
+            .setAccessFlags(accessFlags)
+            .setGenericSignature(MethodTypeSignature.noSignature())
+            .setAnnotations(DexAnnotationSet.empty())
+            .setParameterAnnotations(ParameterAnnotationsList.empty())
+            .setCode(
+                createExceptionThrowingCfCode(newMethod, accessFlags, errorType, dexItemFactory))
+            .build();
     addSyntheticMethod(clazz.asProgramClass(), newEncodedMethod);
   }
 
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 5d9a60f..cae162d 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,13 +289,14 @@
         MethodAccessFlags.fromSharedAccessFlags(
             Constants.ACC_SYNTHETIC | Constants.ACC_PRIVATE, false);
     DexEncodedMethod encodedMethod =
-        DexEncodedMethod.createSynthetic(
-            method,
-            methodAccessFlags,
-            MethodTypeSignature.noSignature(),
-            DexAnnotationSet.empty(),
-            ParameterAnnotationsList.empty(),
-            null);
+        DexEncodedMethod.syntheticBuilder()
+            .setMethod(method)
+            .setAccessFlags(methodAccessFlags)
+            .setGenericSignature(MethodTypeSignature.noSignature())
+            .setAnnotations(DexAnnotationSet.empty())
+            .setParameterAnnotations(ParameterAnnotationsList.empty())
+            .setCode(null)
+            .build();
     encodedMethod.setCode(provider.generateCfCode(), appView);
     return new ProgramMethod(clazz, encodedMethod);
   }
@@ -588,13 +589,14 @@
         MethodAccessFlags.fromSharedAccessFlags(
             Constants.ACC_SYNTHETIC | Constants.ACC_PROTECTED, true);
     DexEncodedMethod init =
-        DexEncodedMethod.createSynthetic(
-            factory.recordMembers.init,
-            methodAccessFlags,
-            MethodTypeSignature.noSignature(),
-            DexAnnotationSet.empty(),
-            ParameterAnnotationsList.empty(),
-            null);
+        DexEncodedMethod.syntheticBuilder()
+            .setMethod(factory.recordMembers.init)
+            .setAccessFlags(methodAccessFlags)
+            .setGenericSignature(MethodTypeSignature.noSignature())
+            .setAnnotations(DexAnnotationSet.empty())
+            .setParameterAnnotations(ParameterAnnotationsList.empty())
+            .setCode(null)
+            .build();
     init.setCode(
         new CallObjectInitCfCodeProvider(appView, factory.recordTagType).generateCfCode(), appView);
     return init;
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 65055b4..cb48970 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,16 +248,17 @@
 
     private DexEncodedMethod createClassInitializer(
         DexType sharedUtilityClassType, DexEncodedField valuesField) {
-      return DexEncodedMethod.createSynthetic(
-          dexItemFactory.createClassInitializer(sharedUtilityClassType),
-          MethodAccessFlags.createForClassInitializer(),
-          MethodTypeSignature.noSignature(),
-          DexAnnotationSet.empty(),
-          ParameterAnnotationsList.empty(),
-          createClassInitializerCode(sharedUtilityClassType, valuesField),
-          CfVersion.V1_6,
-          minApiLevelIfEnabledOrUnknown(appView),
-          minApiLevelIfEnabledOrUnknown(appView));
+      return DexEncodedMethod.syntheticBuilder()
+          .setMethod(dexItemFactory.createClassInitializer(sharedUtilityClassType))
+          .setAccessFlags(MethodAccessFlags.createForClassInitializer())
+          .setGenericSignature(MethodTypeSignature.noSignature())
+          .setAnnotations(DexAnnotationSet.empty())
+          .setParameterAnnotations(ParameterAnnotationsList.empty())
+          .setCode(createClassInitializerCode(sharedUtilityClassType, valuesField))
+          .setClassFileVersion(CfVersion.V1_6)
+          .setApiLevelForDefinition(minApiLevelIfEnabledOrUnknown(appView))
+          .setApiLevelForCode(minApiLevelIfEnabledOrUnknown(appView))
+          .build();
     }
 
     private CfCode createClassInitializerCode(
@@ -291,19 +292,22 @@
     private DexEncodedMethod createValuesMethod(
         DexType sharedUtilityClassType, DexEncodedField valuesField) {
       DexEncodedMethod valuesMethod =
-          DexEncodedMethod.createSynthetic(
-              dexItemFactory.createMethod(
-                  sharedUtilityClassType,
-                  dexItemFactory.createProto(dexItemFactory.intArrayType, dexItemFactory.intType),
-                  "values"),
-              MethodAccessFlags.createPublicStaticSynthetic(),
-              MethodTypeSignature.noSignature(),
-              DexAnnotationSet.empty(),
-              ParameterAnnotationsList.empty(),
-              createValuesMethodCode(sharedUtilityClassType, valuesField),
-              CfVersion.V1_6,
-              minApiLevelIfEnabledOrUnknown(appView),
-              minApiLevelIfEnabledOrUnknown(appView));
+          DexEncodedMethod.syntheticBuilder()
+              .setMethod(
+                  dexItemFactory.createMethod(
+                      sharedUtilityClassType,
+                      dexItemFactory.createProto(
+                          dexItemFactory.intArrayType, dexItemFactory.intType),
+                      "values"))
+              .setAccessFlags(MethodAccessFlags.createPublicStaticSynthetic())
+              .setGenericSignature(MethodTypeSignature.noSignature())
+              .setAnnotations(DexAnnotationSet.empty())
+              .setParameterAnnotations(ParameterAnnotationsList.empty())
+              .setCode(createValuesMethodCode(sharedUtilityClassType, valuesField))
+              .setClassFileVersion(CfVersion.V1_6)
+              .setApiLevelForDefinition(minApiLevelIfEnabledOrUnknown(appView))
+              .setApiLevelForCode(minApiLevelIfEnabledOrUnknown(appView))
+              .build();
       this.valuesMethod = valuesMethod;
       return valuesMethod;
     }
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 6930734..ceb661a 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -9,6 +9,7 @@
 import static com.android.tools.r8.ir.code.Invoke.Type.STATIC;
 
 import com.android.tools.r8.androidapi.AndroidApiReferenceLevelCache;
+import com.android.tools.r8.cf.CfVersion;
 import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
 import com.android.tools.r8.graph.AppView;
@@ -1440,17 +1441,20 @@
       // be updated by the end of vertical class merging.
       synthesizedBridges.add(code);
 
+      CfVersion classFileVersion =
+          method.hasClassFileVersion() ? method.getClassFileVersion() : null;
       DexEncodedMethod bridge =
-          DexEncodedMethod.createSynthetic(
-              newMethod,
-              accessFlags,
-              MethodTypeSignature.noSignature(),
-              DexAnnotationSet.empty(),
-              ParameterAnnotationsList.empty(),
-              code,
-              method.hasClassFileVersion() ? method.getClassFileVersion() : null,
-              method.getApiLevelForDefinition(),
-              method.getApiLevelForDefinition());
+          DexEncodedMethod.syntheticBuilder()
+              .setMethod(newMethod)
+              .setAccessFlags(accessFlags)
+              .setGenericSignature(MethodTypeSignature.noSignature())
+              .setAnnotations(DexAnnotationSet.empty())
+              .setParameterAnnotations(ParameterAnnotationsList.empty())
+              .setCode(code)
+              .setClassFileVersion(classFileVersion)
+              .setApiLevelForDefinition(method.getApiLevelForDefinition())
+              .setApiLevelForCode(method.getApiLevelForDefinition())
+              .build();
       bridge.setLibraryMethodOverride(method.isLibraryMethodOverride());
       if (method.accessFlags.isPromotedToPublic()) {
         // The bridge is now the public method serving the role of the original method, and should
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 064a733..0e45bd8 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java
@@ -106,17 +106,19 @@
     assert name != null;
     DexMethod methodSignature = getMethodSignature();
     MethodAccessFlags accessFlags = getAccessFlags();
+    Code code = accessFlags.isAbstract() ? null : getCodeObject(methodSignature);
     DexEncodedMethod method =
-        DexEncodedMethod.createSynthetic(
-            methodSignature,
-            accessFlags,
-            genericSignature,
-            annotations,
-            parameterAnnotationsList,
-            accessFlags.isAbstract() ? null : getCodeObject(methodSignature),
-            classFileVersion,
-            AndroidApiLevel.UNKNOWN,
-            AndroidApiLevel.UNKNOWN);
+        DexEncodedMethod.syntheticBuilder()
+            .setMethod(methodSignature)
+            .setAccessFlags(accessFlags)
+            .setGenericSignature(genericSignature)
+            .setAnnotations(annotations)
+            .setParameterAnnotations(parameterAnnotationsList)
+            .setCode(code)
+            .setClassFileVersion(classFileVersion)
+            .setApiLevelForDefinition(AndroidApiLevel.UNKNOWN)
+            .setApiLevelForCode(AndroidApiLevel.UNKNOWN)
+            .build();
     assert isValidSyntheticMethod(method, syntheticKind);
     if (onBuildConsumer != null) {
       onBuildConsumer.accept(method);
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 4b8eef2..11588d7 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,13 +53,14 @@
     ProgramMethod method =
         new ProgramMethod(
             clazz,
-            DexEncodedMethod.create(
-                signature,
-                MethodAccessFlags.fromDexAccessFlags(0),
-                MethodTypeSignature.noSignature(),
-                DexAnnotationSet.empty(),
-                ParameterAnnotationsList.empty(),
-                null));
+            DexEncodedMethod.builder()
+                .setMethod(signature)
+                .setAccessFlags(MethodAccessFlags.fromDexAccessFlags(0))
+                .setGenericSignature(MethodTypeSignature.noSignature())
+                .setAnnotations(DexAnnotationSet.empty())
+                .setParameterAnnotations(ParameterAnnotationsList.empty())
+                .setCode(null)
+                .build());
     return new Node(method);
   }
 
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 68b1f25..b38b552 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
@@ -856,13 +856,14 @@
             new SynthesizedCode(
                 (ignored, callerPosition) -> new ReturnVoidCode(voidReturnMethod, callerPosition));
         DexEncodedMethod method =
-            DexEncodedMethod.create(
-                voidReturnMethod,
-                access,
-                MethodTypeSignature.noSignature(),
-                DexAnnotationSet.empty(),
-                ParameterAnnotationsList.empty(),
-                code);
+            DexEncodedMethod.builder()
+                .setMethod(voidReturnMethod)
+                .setAccessFlags(access)
+                .setGenericSignature(MethodTypeSignature.noSignature())
+                .setAnnotations(DexAnnotationSet.empty())
+                .setParameterAnnotations(ParameterAnnotationsList.empty())
+                .setCode(code)
+                .build();
         ProgramMethod programMethod = new ProgramMethod(programClass, method);
         IRCode ir = code.buildIR(programMethod, appView, Origin.unknown());
         RegisterAllocator allocator = new LinearScanRegisterAllocator(appView, ir);