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