Move -checkdiscard rule to its own file
This ensures that it is possible to build r8lib.jar with -dontoptimize or --debug.
Change-Id: I84b5b39fe3ce762582caf8cc6a1f265273be5088
diff --git a/d8_r8/test/build.gradle.kts b/d8_r8/test/build.gradle.kts
index dbf9725..5452757 100644
--- a/d8_r8/test/build.gradle.kts
+++ b/d8_r8/test/build.gradle.kts
@@ -188,6 +188,7 @@
val r8WithRelocatedDepsJar = r8WithRelocatedDepsTask.getSingleOutputFile()
val keepRuleFiles = listOf(
getRoot().resolveAll("src", "main", "keep.txt"),
+ getRoot().resolveAll("src", "main", "discard.txt"),
generatedKeepRulesProvider.getSingleOutputFile(),
// TODO(b/294351878): Remove once enum issue is fixed
getRoot().resolveAll("src", "main", "keep_r8resourceshrinker.txt"))
diff --git a/src/main/discard.txt b/src/main/discard.txt
new file mode 100644
index 0000000..0bb3220
--- /dev/null
+++ b/src/main/discard.txt
@@ -0,0 +1,11 @@
+# Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+# Annotations for stripping debug code from r8lib.
+-assumenosideeffects class * {
+ @com.android.tools.r8.annotations.AssumeNoSideEffects <methods>;
+}
+-checkdiscard class * {
+ @com.android.tools.r8.annotations.CheckDiscard <fields>;
+}
diff --git a/src/main/keep.txt b/src/main/keep.txt
index 5faed98..83f70b1 100644
--- a/src/main/keep.txt
+++ b/src/main/keep.txt
@@ -27,13 +27,5 @@
# TODO(b/176783536): Avoid need to use -dontwarn.
-include dontwarn.txt
-# Annotations for stripping debug code from r8lib.
--assumenosideeffects class * {
- @com.android.tools.r8.annotations.AssumeNoSideEffects <methods>;
-}
--checkdiscard class * {
- @com.android.tools.r8.annotations.CheckDiscard <fields>;
-}
-
# Test in this class is using the class name to fing the original .java file.
-keep class com.android.tools.r8.ir.desugar.varhandle.VarHandleDesugaringMethods
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapCurrentEqualityTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapCurrentEqualityTest.java
index adefe58..49e8308 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapCurrentEqualityTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapCurrentEqualityTest.java
@@ -27,6 +27,7 @@
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.Pair;
import com.android.tools.r8.utils.StringUtils;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import java.io.IOException;
import java.nio.file.Path;
@@ -53,8 +54,10 @@
}
}
- private static final Path MAIN_KEEP =
- Paths.get(ToolHelper.getProjectRoot(), "src", "main", "keep.txt");
+ private static final List<Path> KEEP_RULES_FILES =
+ ImmutableList.of(
+ Paths.get(ToolHelper.getProjectRoot(), "src", "main", "keep.txt"),
+ Paths.get(ToolHelper.getProjectRoot(), "src", "main", "discard.txt"));
private static final Class<?> HELLO_CLASS = HelloWorldProgram.class;
private static final String HELLO_NAME = typeName(HELLO_CLASS);
@@ -100,7 +103,7 @@
.setMode(mode)
.addProgramFiles(ToolHelper.getR8WithRelocatedDeps())
.addLibraryProvider(JdkClassFileProvider.fromSystemJdk())
- .addKeepRuleFiles(MAIN_KEEP)
+ .addKeepRuleFiles(KEEP_RULES_FILES)
.addOptionsModification(
options -> options.getTestingOptions().dontReportFailingCheckDiscarded = mode.isDebug())
.enableExperimentalKeepAnnotations()
@@ -173,7 +176,7 @@
.useProvidedR8(ToolHelper.R8LIB_JAR)
.addProgramFiles(ToolHelper.getR8WithRelocatedDeps())
.addLibraryFiles(parameters.asCfRuntime().getJavaHome())
- .addKeepRuleFiles(MAIN_KEEP)
+ .addKeepRuleFiles(KEEP_RULES_FILES)
.setMode(CompilationMode.RELEASE)
.compile()
.outputJar();
@@ -183,7 +186,7 @@
.addR8ExternalDepsToClasspath()
.addProgramFiles(ToolHelper.getR8WithRelocatedDeps())
.addLibraryFiles(parameters.asCfRuntime().getJavaHome())
- .addKeepRuleFiles(MAIN_KEEP)
+ .addKeepRuleFiles(KEEP_RULES_FILES)
.setMode(CompilationMode.RELEASE)
.compile()
.outputJar();
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapDeterminismTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapDeterminismTest.java
index a46b9f4..6afaa95 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapDeterminismTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapDeterminismTest.java
@@ -12,9 +12,11 @@
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.utils.DeterminismChecker;
+import com.google.common.collect.ImmutableList;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -25,8 +27,10 @@
public class BootstrapDeterminismTest extends TestBase {
private static final int ITERATIONS = 2;
- private static final Path MAIN_KEEP =
- Paths.get(ToolHelper.getProjectRoot(), "src", "main", "keep.txt");
+ private static final List<Path> KEEP_RULES_FILES =
+ ImmutableList.of(
+ Paths.get(ToolHelper.getProjectRoot(), "src", "main", "keep.txt"),
+ Paths.get(ToolHelper.getProjectRoot(), "src", "main", "discard.txt"));
@Parameter public TestParameters parameters;
@@ -53,7 +57,7 @@
testForR8(parameters.getBackend())
.addProgramFiles(ToolHelper.getR8WithRelocatedDeps())
.addLibraryProvider(JdkClassFileProvider.fromSystemJdk())
- .addKeepRuleFiles(MAIN_KEEP)
+ .addKeepRuleFiles(KEEP_RULES_FILES)
.addOptionsModification(
options ->
options
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/Java17R8BootstrapTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/Java17R8BootstrapTest.java
index d058a31..7d92336 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/Java17R8BootstrapTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/Java17R8BootstrapTest.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.bootstrap;
-import static com.android.tools.r8.bootstrap.JavaBootstrapUtils.MAIN_KEEP;
+import static com.android.tools.r8.bootstrap.JavaBootstrapUtils.KEEP_RULE_FILES;
import static junit.framework.TestCase.assertEquals;
import com.android.tools.r8.TestBase;
@@ -135,7 +135,7 @@
testForExternalR8(Backend.CF, parameters.getRuntime())
.useProvidedR8(jar)
.addProgramFiles(helloJar)
- .addKeepRuleFiles(MAIN_KEEP)
+ .addKeepRuleFiles(KEEP_RULE_FILES)
.compile()
.outputJar();
if (prevGeneratedJar != null) {
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/JavaBootstrapUtils.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/JavaBootstrapUtils.java
index 793cb01..3d42188 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/JavaBootstrapUtils.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/JavaBootstrapUtils.java
@@ -7,15 +7,21 @@
import static junit.framework.TestCase.assertTrue;
import com.android.tools.r8.TestBase;
+import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.utils.InternalOptions.DesugarState;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.google.common.collect.ImmutableList;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.List;
public class JavaBootstrapUtils extends TestBase {
- static final Path MAIN_KEEP = Paths.get("src/main/keep.txt");
+ static final List<Path> KEEP_RULE_FILES =
+ ImmutableList.of(
+ Paths.get(ToolHelper.getProjectRoot(), "src", "main", "keep.txt"),
+ Paths.get(ToolHelper.getProjectRoot(), "src", "main", "discard.txt"));
static boolean exists(Path r8WithRelocatedDeps) {
// This test runs only if the dependencies have been generated using:
@@ -32,7 +38,7 @@
return testForR8(getStaticTemp(), Backend.CF)
.addProgramFiles(r8WithRelocatedDeps)
.addLibraryFiles(libraryFiles)
- .addKeepRuleFiles(MAIN_KEEP)
+ .addKeepRuleFiles(KEEP_RULE_FILES)
.applyIf(
desugar,
builder ->
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/JavaR8CompilationTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/JavaR8CompilationTest.java
index 6127e68..d1ba47f 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/JavaR8CompilationTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/JavaR8CompilationTest.java
@@ -43,7 +43,10 @@
ImmutableList.of(ToolHelper.R8_WITH_RELOCATED_DEPS_17_JAR));
}
- private static final Path MAIN_KEEP = Paths.get(ToolHelper.getProjectRoot(), "src/main/keep.txt");
+ private static final List<Path> KEEP_RULE_FILES =
+ ImmutableList.of(
+ Paths.get(ToolHelper.getProjectRoot(), "src/main/keep.txt"),
+ Paths.get(ToolHelper.getProjectRoot(), "src/main/discard.txt"));
private static void assertNoNests(CodeInspector inspector) {
assertTrue(
@@ -56,7 +59,7 @@
testForR8(parameters.getBackend())
.setMinApi(parameters)
.addProgramFiles(r8WithRelocatedDeps)
- .addKeepRuleFiles(MAIN_KEEP)
+ .addKeepRuleFiles(KEEP_RULE_FILES)
.compile()
.inspect(this::assertNotEmpty)
.inspect(JavaR8CompilationTest::assertNoNests);
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/R8CompiledThroughDexTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/R8CompiledThroughDexTest.java
index 1908d79..8e34583 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/R8CompiledThroughDexTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/R8CompiledThroughDexTest.java
@@ -35,6 +35,7 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;
@@ -83,8 +84,10 @@
return path.toAbsolutePath().toString();
}
- private static final String R8_KEEP =
- Paths.get(ToolHelper.SOURCE_DIR + "main/keep.txt").toAbsolutePath().toString();
+ private static final Collection<Path> KEEP_RULE_FILES =
+ ImmutableList.of(
+ Paths.get(ToolHelper.SOURCE_DIR, "main/keep.txt"),
+ Paths.get(ToolHelper.SOURCE_DIR, "main/discard.txt"));
private Pair<List<String>, Consumer<Builder>> buildArguments() {
ImmutableList.Builder<String> arguments = ImmutableList.builder();
@@ -102,8 +105,10 @@
arguments.add("--lib").add(commandLinePathFor(ToolHelper.getAndroidJar(AndroidApiLevel.R)));
buildup.add(b -> b.addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.R)));
- arguments.add("--pg-conf").add(commandLinePathFor(R8_KEEP));
- buildup.add(b -> b.addProguardConfigurationFiles(Paths.get(R8_KEEP)));
+ for (Path keepRuleFile : KEEP_RULE_FILES) {
+ arguments.add("--pg-conf").add(commandLinePathFor(keepRuleFile));
+ buildup.add(b -> b.addProguardConfigurationFiles(keepRuleFile));
+ }
arguments
.add("--desugared-lib")
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/RetraceStackTraceFunctionalCompositionTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/RetraceStackTraceFunctionalCompositionTest.java
index 35f157d..a1a71e7 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/RetraceStackTraceFunctionalCompositionTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/RetraceStackTraceFunctionalCompositionTest.java
@@ -29,6 +29,7 @@
import com.android.tools.r8.utils.StackTraceUtils;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.ZipUtils;
+import com.google.common.collect.ImmutableList;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
@@ -242,14 +243,17 @@
}
private Pair<Path, Path> compileR8WithR8(Path r8Input) throws Exception {
- Path MAIN_KEEP = Paths.get("src/main/keep.txt");
+ List<Path> KEEP_RULE_FILES =
+ ImmutableList.of(
+ Paths.get(ToolHelper.getProjectRoot(), "src/main/keep.txt"),
+ Paths.get(ToolHelper.getProjectRoot(), "src/main/discard.txt"));
Path jar = temp.newFolder().toPath().resolve("out.jar");
Path map = temp.newFolder().toPath().resolve("out.map");
testForR8(Backend.CF)
.setMode(CompilationMode.RELEASE)
.addProgramFiles(r8Input)
.addLibraryProvider(JdkClassFileProvider.fromSystemJdk())
- .addKeepRuleFiles(MAIN_KEEP)
+ .addKeepRuleFiles(KEEP_RULE_FILES)
.allowUnusedProguardConfigurationRules()
.addDontObfuscate()
.compile()
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/WhyAreYouKeepingAllTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/WhyAreYouKeepingAllTest.java
index 514db55..78e6be3 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/WhyAreYouKeepingAllTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/WhyAreYouKeepingAllTest.java
@@ -13,8 +13,10 @@
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.utils.StringUtils;
+import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -27,7 +29,10 @@
@RunWith(Parameterized.class)
public class WhyAreYouKeepingAllTest extends TestBase {
- private static final Path MAIN_KEEP = Paths.get(ToolHelper.SOURCE_DIR + "/main/keep.txt");
+ private static final List<Path> KEEP_RULE_FILES =
+ ImmutableList.of(
+ Paths.get(ToolHelper.SOURCE_DIR, "/main/keep.txt"),
+ Paths.get(ToolHelper.SOURCE_DIR, "/main/discard.txt"));
private static final String WHY_ARE_YOU_KEEPING_ALL = StringUtils.lines(
"-whyareyoukeeping class ** { *; }",
@@ -48,7 +53,7 @@
testForR8(Backend.CF)
.addProgramFiles(ToolHelper.getR8WithRelocatedDeps())
.addLibraryProvider(JdkClassFileProvider.fromSystemJdk())
- .addKeepRuleFiles(MAIN_KEEP)
+ .addKeepRuleFiles(KEEP_RULE_FILES)
.addKeepRules(WHY_ARE_YOU_KEEPING_ALL)
// Do not forward standard out since running with gradle will cause an error writing the
// results.