Merge "Inherit useIdentifierNameString from the inlinee."
diff --git a/.gitignore b/.gitignore
index b66a429..f743d94 100644
--- a/.gitignore
+++ b/.gitignore
@@ -60,6 +60,8 @@
 third_party/goyt.tar.gz
 third_party/ddmlib
 third_party/ddmlib.tar.gz
+third_party/core-lambda-stubs
+third_party/core-lambda-stubs.tar.gz
 src/test/jack/ub-jack
 gradle-app.setting
 gradlew
diff --git a/build.gradle b/build.gradle
index 49e69a2..8893820 100644
--- a/build.gradle
+++ b/build.gradle
@@ -292,6 +292,7 @@
                 "android_cts_baseline",
                 "shadow",
                 "ddmlib",
+                "core-lambda-stubs",
         ],
         // All dex-vms have a fixed OS of Linux, as they are only supported on Linux, and will be run in a Docker
         // container on other platforms where supported.
diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index a806138..a7bb291 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -148,8 +148,8 @@
       throws IOException, CompilationException {
     try {
       // Disable global optimizations.
-      options.skipMinification = true;
-      options.inlineAccessors = false;
+      options.enableMinification = false;
+      options.enableInlining = false;
       options.outline.enabled = false;
 
       Timing timing = new Timing("DX timer");
diff --git a/src/main/java/com/android/tools/r8/D8Command.java b/src/main/java/com/android/tools/r8/D8Command.java
index 0e39dae..2678c1f 100644
--- a/src/main/java/com/android/tools/r8/D8Command.java
+++ b/src/main/java/com/android/tools/r8/D8Command.java
@@ -329,22 +329,22 @@
     internal.minApiLevel = getMinApiLevel();
     internal.intermediate = intermediate;
     // Assert and fixup defaults.
-    assert !internal.skipMinification;
-    internal.skipMinification = true;
-    assert internal.useTreeShaking;
-    internal.useTreeShaking = false;
+    assert internal.enableMinification;
+    internal.enableMinification = false;
+    assert internal.enableTreeShaking;
+    internal.enableTreeShaking = false;
     assert !internal.passthroughDexCode;
     internal.passthroughDexCode = true;
 
     // Disable some of R8 optimizations.
-    assert internal.inlineAccessors;
-    internal.inlineAccessors = false;
-    assert internal.removeSwitchMaps;
-    internal.removeSwitchMaps = false;
+    assert internal.enableInlining;
+    internal.enableInlining = false;
+    assert internal.enableSwitchMapRemoval;
+    internal.enableSwitchMapRemoval = false;
     assert internal.outline.enabled;
     internal.outline.enabled = false;
-    assert internal.propagateMemberValue;
-    internal.propagateMemberValue = false;
+    assert internal.enableValuePropagation;
+    internal.enableValuePropagation = false;
 
     internal.enableDesugaring = getEnableDesugaring();
     return internal;
diff --git a/src/main/java/com/android/tools/r8/DexFileMergerHelper.java b/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
index 57b3804..bcbddb1 100644
--- a/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
+++ b/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
@@ -56,8 +56,8 @@
     options.enableDesugaring = false;
     options.enableMainDexListCheck = false;
     options.minimalMainDex = minimalMainDex;
-    options.skipMinification = true;
-    options.inlineAccessors = false;
+    options.enableMinification = false;
+    options.enableInlining = false;
     options.outline.enabled = false;
 
     ExecutorService executor = ThreadUtils.getExecutorService(ThreadUtils.NOT_SPECIFIED);
diff --git a/src/main/java/com/android/tools/r8/DexSplitterHelper.java b/src/main/java/com/android/tools/r8/DexSplitterHelper.java
index c086c7e..d28f93f 100644
--- a/src/main/java/com/android/tools/r8/DexSplitterHelper.java
+++ b/src/main/java/com/android/tools/r8/DexSplitterHelper.java
@@ -38,8 +38,8 @@
     options.enableDesugaring = false;
     options.enableMainDexListCheck = false;
     options.minimalMainDex = false;
-    options.skipMinification = true;
-    options.inlineAccessors = false;
+    options.enableMinification = false;
+    options.enableInlining = false;
     options.outline.enabled = false;
 
     ExecutorService executor = ThreadUtils.getExecutorService(ThreadUtils.NOT_SPECIFIED);
diff --git a/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java b/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java
index 62ab21b..f9e0ebf 100644
--- a/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java
+++ b/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java
@@ -204,8 +204,8 @@
     internal.mainDexKeepRules = mainDexKeepRules;
     internal.mainDexListConsumer = mainDexListConsumer;
     internal.minimalMainDex = internal.debug;
-    internal.removeSwitchMaps = false;
-    internal.inlineAccessors = false;
+    internal.enableSwitchMapRemoval = false;
+    internal.enableInlining = false;
     return internal;
   }
 }
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 345a671..906c8d8 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -287,7 +287,7 @@
           out.flush();
           proguardSeedsData = bytes.toString();
         }
-        if (options.useTreeShaking) {
+        if (options.enableTreeShaking) {
           TreePruner pruner = new TreePruner(application, appInfo.withLiveness(), options);
           application = pruner.run();
           // Recompute the subtyping information.
@@ -329,7 +329,7 @@
       if (appInfo.hasLiveness()) {
         graphLense = new MemberRebindingAnalysis(appInfo.withLiveness(), graphLense).run();
         // Class merging requires inlining.
-        if (!options.skipClassMerging && options.inlineAccessors) {
+        if (options.enableClassMerging && options.enableInlining) {
           timing.begin("ClassMerger");
           SimpleClassMerger classMerger = new SimpleClassMerger(application,
               appInfo.withLiveness(), graphLense, timing);
@@ -400,12 +400,12 @@
 
       appInfo = new AppInfoWithSubtyping(application);
 
-      if (options.useTreeShaking || !options.skipMinification) {
+      if (options.enableTreeShaking || options.enableMinification) {
         timing.begin("Post optimization code stripping");
         try {
           Enqueuer enqueuer = new Enqueuer(appInfo, options);
           appInfo = enqueuer.traceApplication(rootSet, timing);
-          if (options.useTreeShaking) {
+          if (options.enableTreeShaking) {
             TreePruner pruner = new TreePruner(application, appInfo.withLiveness(), options);
             application = pruner.run();
             appInfo = appInfo.withLiveness()
@@ -420,7 +420,7 @@
       }
 
       // Only perform discard-checking if tree-shaking is turned on.
-      if (options.useTreeShaking && !rootSet.checkDiscarded.isEmpty()) {
+      if (options.enableTreeShaking && !rootSet.checkDiscarded.isEmpty()) {
         new DiscardedChecker(rootSet, application, options).run();
       }
 
@@ -428,9 +428,9 @@
       // If we did not have keep rules, everything will be marked as keep, so no minification
       // will happen. Just avoid the overhead.
       NamingLens namingLens =
-          options.skipMinification
-              ? NamingLens.getIdentityLens()
-              : new Minifier(appInfo.withLiveness(), rootSet, options).run(timing);
+          options.enableMinification
+              ? new Minifier(appInfo.withLiveness(), rootSet, options).run(timing)
+              : NamingLens.getIdentityLens();
       timing.end();
 
       ProguardMapSupplier proguardMapSupplier;
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index e46f743..7004d5f 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -636,26 +636,17 @@
     internal.programConsumer = getProgramConsumer();
     internal.minApiLevel = getMinApiLevel();
     internal.enableDesugaring = getEnableDesugaring();
-    // -dontoptimize disables optimizations by flipping related flags.
-    if (!proguardConfiguration.isOptimizing()) {
-      internal.skipClassMerging = true;
-      internal.addNonNull = false;
-      internal.inlineAccessors = false;
-      internal.removeSwitchMaps = false;
-      internal.outline.enabled = false;
-      internal.propagateMemberValue = false;
-    }
-    assert !internal.skipMinification;
-    internal.skipMinification = !getEnableMinification();
-    assert internal.useTreeShaking;
-    internal.useTreeShaking = getEnableTreeShaking();
+    assert internal.enableMinification;
+    internal.enableMinification = getEnableMinification();
+    assert internal.enableTreeShaking;
+    internal.enableTreeShaking = getEnableTreeShaking();
     assert !internal.ignoreMissingClasses;
     internal.ignoreMissingClasses = proguardConfiguration.isIgnoreWarnings()
         // TODO(70706667): We probably only want this in Proguard compatibility mode.
         || (forceProguardCompatibility
             && !proguardConfiguration.isOptimizing()
-            && internal.skipMinification
-            && !internal.useTreeShaking);
+            && !internal.enableMinification
+            && !internal.enableTreeShaking);
 
     assert !internal.verbose;
     internal.mainDexKeepRules = mainDexKeepRules;
@@ -667,7 +658,7 @@
 
     if (internal.debug) {
       // TODO(zerny): Should we support inlining in debug mode? b/62937285
-      internal.inlineAccessors = false;
+      internal.enableInlining = false;
       // TODO(zerny): Should we support outlining in debug mode? b/62937285
       internal.outline.enabled = false;
     }
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 31bd727..bb4b629 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -34,7 +34,7 @@
 import com.android.tools.r8.ir.optimize.Inliner;
 import com.android.tools.r8.ir.optimize.Inliner.Constraint;
 import com.android.tools.r8.ir.optimize.MemberValuePropagation;
-import com.android.tools.r8.ir.optimize.NonNullMarker;
+import com.android.tools.r8.ir.optimize.NonNullTracker;
 import com.android.tools.r8.ir.optimize.Outliner;
 import com.android.tools.r8.ir.optimize.PeepholeOptimizer;
 import com.android.tools.r8.ir.regalloc.LinearScanRegisterAllocator;
@@ -82,7 +82,7 @@
   private final CodeRewriter codeRewriter;
   private final MemberValuePropagation memberValuePropagation;
   private final LensCodeRewriter lensCodeRewriter;
-  private final NonNullMarker nonNullMarker;
+  private final NonNullTracker nonNullTracker;
   private final Inliner inliner;
   private final ProtoLitePruner protoLiteRewriter;
   private final IdentifierNameStringMarker identifierNameStringMarker;
@@ -113,17 +113,18 @@
             ? new InterfaceMethodRewriter(this, options) : null;
     if (enableWholeProgramOptimizations) {
       assert appInfo.hasLiveness();
-      this.nonNullMarker = new NonNullMarker();
+      this.nonNullTracker = new NonNullTracker();
       this.inliner = new Inliner(appInfo.withLiveness(), graphLense, options);
       this.outliner = new Outliner(appInfo.withLiveness(), options);
       this.memberValuePropagation =
-          options.propagateMemberValue ? new MemberValuePropagation(appInfo.withLiveness()) : null;
+          options.enableValuePropagation ?
+              new MemberValuePropagation(appInfo.withLiveness()) : null;
       this.lensCodeRewriter = new LensCodeRewriter(graphLense, appInfo.withSubtyping());
       if (appInfo.hasLiveness()) {
         // When disabling the pruner here, also disable the ProtoLiteExtension in R8.java.
         this.protoLiteRewriter =
             options.forceProguardCompatibility ? null : new ProtoLitePruner(appInfo.withLiveness());
-        if (!appInfo.withLiveness().identifierNameStrings.isEmpty() && !options.skipMinification) {
+        if (!appInfo.withLiveness().identifierNameStrings.isEmpty() && options.enableMinification) {
           this.identifierNameStringMarker = new IdentifierNameStringMarker(appInfo.withLiveness());
         } else {
           this.identifierNameStringMarker = null;
@@ -133,7 +134,7 @@
         this.identifierNameStringMarker = null;
       }
     } else {
-      this.nonNullMarker = null;
+      this.nonNullTracker = null;
       this.inliner = null;
       this.outliner = null;
       this.memberValuePropagation = null;
@@ -557,18 +558,18 @@
     if (memberValuePropagation != null) {
       memberValuePropagation.rewriteWithConstantValues(code, method.method.holder);
     }
-    if (options.removeSwitchMaps && appInfo.hasLiveness()) {
+    if (options.enableSwitchMapRemoval && appInfo.hasLiveness()) {
       codeRewriter.removeSwitchMaps(code);
     }
     if (options.disableAssertions) {
       codeRewriter.disableAssertions(code);
     }
-    if (options.addNonNull && nonNullMarker != null) {
-      nonNullMarker.addNonNull(code);
+    if (options.enableNonNullTracking && nonNullTracker != null) {
+      nonNullTracker.addNonNull(code);
       assert code.isConsistentSSA();
     }
     TypeEnvironment typeEnvironment = TypeAnalysis.getDefaultTypeEnvironment();
-    if (options.inlineAccessors && inliner != null) {
+    if (options.enableInlining && inliner != null) {
       typeEnvironment = new TypeAnalysis(appInfo, method, code);
       // TODO(zerny): Should we support inlining in debug mode? b/62937285
       assert !options.debug;
@@ -586,8 +587,8 @@
     codeRewriter.rewriteSwitch(code);
     codeRewriter.processMethodsNeverReturningNormally(code);
     codeRewriter.simplifyIf(code, typeEnvironment);
-    if (options.addNonNull && nonNullMarker != null) {
-      nonNullMarker.cleanupNonNull(code);
+    if (options.enableNonNullTracking && nonNullTracker != null) {
+      nonNullTracker.cleanupNonNull(code);
       assert code.isConsistentSSA();
     }
     if (!options.debug) {
@@ -675,7 +676,7 @@
   private void markProcessed(DexEncodedMethod method, IRCode code, OptimizationFeedback feedback) {
     // After all the optimizations have take place, we compute whether method should be inlinedex.
     Constraint state;
-    if (!options.inlineAccessors || inliner == null) {
+    if (!options.enableInlining || inliner == null) {
       state = Constraint.NEVER;
     } else {
       state = inliner.computeInliningConstraint(code, method);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index ade9fb4..da28ce0 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -269,8 +269,8 @@
       if (!target.isProcessed()) {
         new LensCodeRewriter(graphLense, appInfo).rewrite(code, target);
       }
-      if (options.addNonNull) {
-        new NonNullMarker().addNonNull(code);
+      if (options.enableNonNullTracking) {
+        new NonNullTracker().addNonNull(code);
       }
       return code;
     }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/NonNullMarker.java b/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
similarity index 99%
rename from src/main/java/com/android/tools/r8/ir/optimize/NonNullMarker.java
rename to src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
index 9bc2918..9f15bc2 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/NonNullMarker.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
@@ -20,9 +20,9 @@
 import java.util.ListIterator;
 import java.util.Set;
 
-public class NonNullMarker {
+public class NonNullTracker {
 
-  public NonNullMarker() {
+  public NonNullTracker() {
   }
 
   @VisibleForTesting
diff --git a/src/main/java/com/android/tools/r8/naming/Minifier.java b/src/main/java/com/android/tools/r8/naming/Minifier.java
index 4181f7e..03c4c33 100644
--- a/src/main/java/com/android/tools/r8/naming/Minifier.java
+++ b/src/main/java/com/android/tools/r8/naming/Minifier.java
@@ -37,7 +37,7 @@
   }
 
   public NamingLens run(Timing timing) {
-    assert !options.skipMinification;
+    assert options.enableMinification;
     timing.begin("MinifyClasses");
     Map<DexType, DexString> classRenaming =
         new ClassNameMinifier(appInfo, rootSet, options).computeRenaming(timing);
diff --git a/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java b/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
index 3b795af..871812a 100644
--- a/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
+++ b/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
@@ -93,7 +93,7 @@
     }
     DexClass definition = appInfo.definitionFor(annotationType);
     // TODO(73102187): How to handle annotations without definition.
-    if (options.useTreeShaking && definition == null) {
+    if (options.enableTreeShaking && definition == null) {
       return false;
     }
     return definition == null || definition.isLibraryClass()
diff --git a/src/main/java/com/android/tools/r8/shaking/TreePruner.java b/src/main/java/com/android/tools/r8/shaking/TreePruner.java
index 9a57b07..27a6405 100644
--- a/src/main/java/com/android/tools/r8/shaking/TreePruner.java
+++ b/src/main/java/com/android/tools/r8/shaking/TreePruner.java
@@ -41,8 +41,7 @@
 
   public DexApplication run() {
     application.timing.begin("Pruning application...");
-    if (options.debugKeepRules && !options.skipMinification) {
-
+    if (options.debugKeepRules && options.enableMinification) {
       options.reporter.info(
           new StringDiagnostic(
               "Debugging keep rules on a minified build might yield broken builds, as "
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index e34ec89..8c3c6ed 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -65,6 +65,15 @@
     this.reporter = reporter;
     this.proguardConfiguration = proguardConfiguration;
     itemFactory = proguardConfiguration.getDexItemFactory();
+    // -dontoptimize disables optimizations by flipping related flags.
+    if (!proguardConfiguration.isOptimizing()) {
+      enableClassMerging = false;
+      enableNonNullTracking = false;
+      enableInlining = false;
+      enableSwitchMapRemoval = false;
+      outline.enabled = false;
+      enableValuePropagation = false;
+    }
   }
 
   public boolean printTimes = false;
@@ -73,12 +82,12 @@
   public boolean passthroughDexCode = false;
 
   // Optimization-related flags. These should conform to -dontoptimize.
-  public boolean skipClassMerging = true;
-  public boolean addNonNull = true;
-  public boolean inlineAccessors = true;
-  public boolean removeSwitchMaps = true;
+  public boolean enableClassMerging = false;
+  public boolean enableNonNullTracking = true;
+  public boolean enableInlining = true;
+  public boolean enableSwitchMapRemoval = true;
   public final OutlineOptions outline = new OutlineOptions();
-  public boolean propagateMemberValue = true;
+  public boolean enableValuePropagation = true;
 
   // Number of threads to use while processing the dex files.
   public int numberOfThreads = ThreadUtils.NOT_SPECIFIED;
@@ -162,14 +171,14 @@
   // to disable the check that the build makes sense for multi-dexing.
   public boolean enableMainDexListCheck = true;
 
-  public boolean useTreeShaking = true;
+  public boolean enableTreeShaking = true;
 
   public boolean printCfg = false;
   public String printCfgFile;
   public boolean ignoreMissingClasses = false;
   // EXPERIMENTAL flag to get behaviour as close to Proguard as possible.
   public boolean forceProguardCompatibility = false;
-  public boolean skipMinification = false;
+  public boolean enableMinification = true;
   public boolean disableAssertions = true;
   public boolean debugKeepRules = false;
 
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index 8cd4323..32c0175 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -1424,7 +1424,7 @@
               builder.build(),
               options -> {
                 if (disableInlining) {
-                  options.inlineAccessors = false;
+                  options.enableInlining = false;
                 }
                 options.lineNumberOptimization = LineNumberOptimization.OFF;
                 // Some tests actually rely on missing classes for what they test.
diff --git a/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardedTest.java b/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardedTest.java
index a56c0c8..1938c46 100644
--- a/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardedTest.java
+++ b/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardedTest.java
@@ -36,7 +36,7 @@
   }
 
   private void noInlining(InternalOptions options) {
-    options.inlineAccessors = false;
+    options.enableInlining = false;
   }
 
   private String checkDiscardRule(boolean member, Class annotation) {
diff --git a/src/test/java/com/android/tools/r8/classmerging/ClassMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/ClassMergingTest.java
index 52066a6..e256ae4 100644
--- a/src/test/java/com/android/tools/r8/classmerging/ClassMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/ClassMergingTest.java
@@ -38,7 +38,7 @@
   public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
 
   private void configure(InternalOptions options) {
-    options.skipClassMerging = false;
+    options.enableClassMerging = true;
   }
 
   private void runR8(Path proguardConfig, Consumer<InternalOptions> optionsConsumer)
diff --git a/src/test/java/com/android/tools/r8/debug/LineNumberOptimizationTest.java b/src/test/java/com/android/tools/r8/debug/LineNumberOptimizationTest.java
index e251662..d944a75 100644
--- a/src/test/java/com/android/tools/r8/debug/LineNumberOptimizationTest.java
+++ b/src/test/java/com/android/tools/r8/debug/LineNumberOptimizationTest.java
@@ -51,7 +51,7 @@
           if (!dontOptimizeByEnablingDebug) {
             options.lineNumberOptimization = lineNumberOptimization;
           }
-          options.inlineAccessors = false;
+          options.enableInlining = false;
         });
     DebugTestConfig config = new D8DebugTestConfig();
     config.addPaths(outjar);
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/NullabilityTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/NullabilityTest.java
index 62a9c49..5150223 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/NullabilityTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/NullabilityTest.java
@@ -29,7 +29,7 @@
 import com.android.tools.r8.ir.optimize.nonnull.NonNullAfterArrayAccess;
 import com.android.tools.r8.ir.optimize.nonnull.NonNullAfterFieldAccess;
 import com.android.tools.r8.ir.optimize.nonnull.NonNullAfterInvoke;
-import com.android.tools.r8.ir.optimize.NonNullMarker;
+import com.android.tools.r8.ir.optimize.NonNullTracker;
 import com.android.tools.r8.naming.MemberNaming.MethodSignature;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.DescriptorUtils;
@@ -58,8 +58,8 @@
     DexInspector dexInspector = new DexInspector(appInfo.app);
     DexEncodedMethod foo = dexInspector.clazz(mainClass.getName()).method(signature).getMethod();
     IRCode irCode = foo.buildIR(TEST_OPTIONS);
-    NonNullMarker nonNullMarker = new NonNullMarker();
-    nonNullMarker.addNonNull(irCode);
+    NonNullTracker nonNullTracker = new NonNullTracker();
+    nonNullTracker.addNonNull(irCode);
     TypeAnalysis analysis = new TypeAnalysis(appInfo, foo, irCode);
     inspector.accept(appInfo, analysis);
     verifyLastInvoke(irCode, analysis, npeCaught);
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/NonNullMarkerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/NonNullTrackerTest.java
similarity index 96%
rename from src/test/java/com/android/tools/r8/ir/optimize/NonNullMarkerTest.java
rename to src/test/java/com/android/tools/r8/ir/optimize/NonNullTrackerTest.java
index b139f32..646cfaf 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/NonNullMarkerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/NonNullTrackerTest.java
@@ -31,7 +31,7 @@
 import java.util.function.Consumer;
 import org.junit.Test;
 
-public class NonNullMarkerTest extends TestBase {
+public class NonNullTrackerTest extends TestBase {
   private static final InternalOptions TEST_OPTIONS = new InternalOptions();
 
   private void buildAndTest(
@@ -50,9 +50,9 @@
     IRCode irCode = foo.buildIR(TEST_OPTIONS);
     checkCountOfNonNull(irCode, 0);
 
-    NonNullMarker nonNullMarker = new NonNullMarker();
+    NonNullTracker nonNullTracker = new NonNullTracker();
 
-    nonNullMarker.addNonNull(irCode);
+    nonNullTracker.addNonNull(irCode);
     assertTrue(irCode.isConsistentSSA());
     checkCountOfNonNull(irCode, expectedNumberOfNonNull);
 
@@ -60,7 +60,7 @@
       testAugmentedIRCode.accept(irCode);
     }
 
-    nonNullMarker.cleanupNonNull(irCode);
+    nonNullTracker.cleanupNonNull(irCode);
     assertTrue(irCode.isConsistentSSA());
     checkCountOfNonNull(irCode, 0);
   }
@@ -75,7 +75,7 @@
       if (curr.isNonNull()) {
         // Make sure non-null is added to the right place.
         assertTrue(prev == null
-            || NonNullMarker.throwsOnNullInput(prev)
+            || NonNullTracker.throwsOnNullInput(prev)
             || (prev.isIf() && prev.asIf().isZeroTest())
             || !curr.getBlock().getPredecessors().contains(prev.getBlock()));
         count++;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
index f282b42..9c03ee7 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
@@ -100,7 +100,7 @@
             .build();
     // TODO(62048823): Enable minification.
     ToolHelper.runR8(command, o -> {
-      o.skipMinification = true;
+      o.enableMinification = false;
     });
     String artOutput = ToolHelper.runArtNoVerificationErrors(out + "/classes.dex",
         "inlining.Inlining");
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java b/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java
index 4fc51b5..92e43d0 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java
@@ -31,7 +31,7 @@
   private void buildAndTest(Class<?> testClass, List<MethodSignature> signatures) throws Exception {
     AndroidApp app = buildAndroidApp(ToolHelper.getClassAsBytes(testClass));
     AndroidApp r8Result = compileWithR8(
-        app, keepMainProguardConfiguration(testClass), o -> o.inlineAccessors = false);
+        app, keepMainProguardConfiguration(testClass), o -> o.enableInlining = false);
     DexInspector dexInspector = new DexInspector(r8Result);
     for (MethodSignature signature : signatures) {
       DexEncodedMethod method =
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinClass.java b/src/test/java/com/android/tools/r8/kotlin/KotlinClass.java
index 602c992..87ffcef 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinClass.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinClass.java
@@ -63,7 +63,15 @@
 
   public MemberNaming.MethodSignature getGetterForProperty(String name) {
     String type = getProperty(name).type;
-    String getterName = "get" + name.substring(0, 1).toUpperCase() + name.substring(1);
+    String getterName;
+    if (name.length() > 2 && name.startsWith("is")
+        && (name.charAt(2) == '_' || Character.isUpperCase(name.charAt(2)))) {
+      // Getter for property "isAbc" is "isAbc".
+      getterName = name;
+    } else {
+      // Getter for property "abc" is "getAbc".
+      getterName = "get" + Character.toUpperCase(name.charAt(0)) + name.substring(1);
+    }
     return new MemberNaming.MethodSignature(getterName, type, Collections.emptyList());
   }
 }
diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
index 57faa69..36ad4c9 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
@@ -150,7 +150,7 @@
         expectedMainDexList,
         minSdk,
         (options) -> {
-          options.inlineAccessors = false;
+          options.enableInlining = false;
         });
   }
 
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
index 9b0b566..e2dfb6d 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
@@ -84,7 +84,7 @@
         .addLibraryFiles(JAR_LIBRARIES)
         .setMinApiLevel(minApiLevel);
     ToolHelper.getAppBuilder(builder).addProgramFiles(programFile);
-    ToolHelper.runR8(builder.build(), options -> options.inlineAccessors = false);
+    ToolHelper.runR8(builder.build(), options -> options.enableInlining = false);
   }
 
   private static boolean coolInvokes(InstructionSubject instruction) {
diff --git a/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java b/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java
index 276b763..deb90e4 100644
--- a/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java
+++ b/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java
@@ -293,7 +293,7 @@
       throws ProguardRuleParserException, ExecutionException, CompilationException, IOException {
     return ToolHelper.runR8(command, options -> {
       // Disable inlining to make this test not depend on inlining decisions.
-      options.inlineAccessors = false;
+      options.enableInlining = false;
     });
   }
 }
diff --git a/src/test/java/com/android/tools/r8/naming/overloadaggressively/OverloadAggressivelyTest.java b/src/test/java/com/android/tools/r8/naming/overloadaggressively/OverloadAggressivelyTest.java
index 1254d4b..dce8880 100644
--- a/src/test/java/com/android/tools/r8/naming/overloadaggressively/OverloadAggressivelyTest.java
+++ b/src/test/java/com/android/tools/r8/naming/overloadaggressively/OverloadAggressivelyTest.java
@@ -72,7 +72,7 @@
             Origin.unknown())
         .setOutput(out, OutputMode.DexIndexed)
         .build();
-    return ToolHelper.runR8(command, o -> o.inlineAccessors = false);
+    return ToolHelper.runR8(command, o -> o.enableInlining = false);
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java b/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
index 3c79bd3..3c724c0 100644
--- a/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
@@ -26,7 +26,7 @@
     AndroidApp app = compileWithR8(
         ImmutableList.of(testClass),
         keepMainProguardConfiguration(testClass, true, false),
-        options -> options.inlineAccessors = false);
+        options -> options.enableInlining = false);
     DexInspector x = new DexInspector(app);
 
     ClassSubject clazz = x.clazz(ClassWithAssertions.class);
diff --git a/src/test/java/com/android/tools/r8/shaking/PrintUsageTest.java b/src/test/java/com/android/tools/r8/shaking/PrintUsageTest.java
index 94e7669..cce5a96 100644
--- a/src/test/java/com/android/tools/r8/shaking/PrintUsageTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/PrintUsageTest.java
@@ -79,7 +79,7 @@
             .build();
     ToolHelper.runR8(command, options -> {
       // Disable inlining to make this test not depend on inlining decisions.
-      options.inlineAccessors = false;
+      options.enableInlining = false;
     });
   }
 
diff --git a/src/test/java/com/android/tools/r8/shaking/TreeShakingSpecificTest.java b/src/test/java/com/android/tools/r8/shaking/TreeShakingSpecificTest.java
index fdb35fb..cba8686 100644
--- a/src/test/java/com/android/tools/r8/shaking/TreeShakingSpecificTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/TreeShakingSpecificTest.java
@@ -94,7 +94,7 @@
         .addProguardConfigurationFiles(keepRules, printMapping);
     ToolHelper.getAppBuilder(builder).addProgramFiles(originalDex);
     // Turn off inlining, as we want the mapping that is printed to be stable.
-    ToolHelper.runR8(builder.build(), options -> options.inlineAccessors = false);
+    ToolHelper.runR8(builder.build(), options -> options.enableInlining = false);
 
     Path outputmapping = out.resolve("mapping.txt");
     // Remove comments.
diff --git a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
index 732f397..fe1f1eb 100644
--- a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
@@ -145,7 +145,7 @@
             .addProguardConfigurationFiles(ListUtils.map(keepRulesFiles, Paths::get))
             .addLibraryFiles(JAR_LIBRARIES);
     ToolHelper.getAppBuilder(builder).addProgramFiles(Paths.get(programFile));
-    ToolHelper.runR8(builder.build(), options -> options.inlineAccessors = inline);
+    ToolHelper.runR8(builder.build(), options -> options.enableInlining = inline);
   }
 
   public static void shaking1HasNoClassUnused(DexInspector inspector) {
diff --git a/src/test/java/com/android/tools/r8/smali/OutlineTest.java b/src/test/java/com/android/tools/r8/smali/OutlineTest.java
index 402e639..64ea9b4 100644
--- a/src/test/java/com/android/tools/r8/smali/OutlineTest.java
+++ b/src/test/java/com/android/tools/r8/smali/OutlineTest.java
@@ -49,7 +49,7 @@
   private Consumer<InternalOptions> configureOptions(Consumer<OutlineOptions> optionsConsumer) {
     return options -> {
       // Disable inlining to make sure that code looks as expected.
-      options.inlineAccessors = false;
+      options.enableInlining = false;
       // Also apply outline options.
       optionsConsumer.accept(options.outline);
     };
diff --git a/src/test/java/com/android/tools/r8/smali/RemoveWriteOfUnusedFieldsTest.java b/src/test/java/com/android/tools/r8/smali/RemoveWriteOfUnusedFieldsTest.java
index 2dec26c..dae717e 100644
--- a/src/test/java/com/android/tools/r8/smali/RemoveWriteOfUnusedFieldsTest.java
+++ b/src/test/java/com/android/tools/r8/smali/RemoveWriteOfUnusedFieldsTest.java
@@ -59,7 +59,7 @@
         compileWithR8(
             AndroidApp.builder().addDexProgramData(builder.compile(), Origin.unknown()).build(),
             keepMainProguardConfiguration("Test"),
-            options -> options.inlineAccessors = false);
+            options -> options.enableInlining = false);
 
     DexInspector inspector = new DexInspector(app);
     MethodSubject method = inspector.clazz("Test").method("void", "test", ImmutableList.of());
@@ -111,7 +111,7 @@
         compileWithR8(
             AndroidApp.builder().addDexProgramData(builder.compile(), Origin.unknown()).build(),
             keepMainProguardConfiguration("Test"),
-            options -> options.inlineAccessors = false);
+            options -> options.enableInlining = false);
 
     DexInspector inspector = new DexInspector(app);
     MethodSubject method = inspector.clazz("Test").method("void", "test", ImmutableList.of());
diff --git a/third_party/core-lambda-stubs.tar.gz.sha1 b/third_party/core-lambda-stubs.tar.gz.sha1
new file mode 100644
index 0000000..3b8961a
--- /dev/null
+++ b/third_party/core-lambda-stubs.tar.gz.sha1
@@ -0,0 +1 @@
+23dd799b1df85a68110bf06f672177d553b0682c
\ No newline at end of file