Report info level diagnostic for art profile rules that don't parse
This ensures that invalid 3p rules does not break the build of clients.
Fixes: b/265768286
Change-Id: If97c0b7d20130b3895c042e01e70f9778aebac3d
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfile.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfile.java
index c55157d..f894976 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfile.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfile.java
@@ -295,7 +295,10 @@
TextInputStream textInputStream,
Consumer<HumanReadableArtProfileParserBuilder> parserBuilderConsumer) {
HumanReadableArtProfileParser.Builder parserBuilder =
- HumanReadableArtProfileParser.builder().setReporter(reporter).setProfileBuilder(this);
+ HumanReadableArtProfileParser.builder()
+ .setDiagnosticConsumer(reporter::info)
+ .setReporter(reporter)
+ .setProfileBuilder(this);
parserBuilderConsumer.accept(parserBuilder);
HumanReadableArtProfileParser parser = parserBuilder.build();
parser.parse(textInputStream, artProfileProvider.getOrigin());
diff --git a/src/main/java/com/android/tools/r8/profile/art/HumanReadableArtProfileParser.java b/src/main/java/com/android/tools/r8/profile/art/HumanReadableArtProfileParser.java
index cc39eb9..85cca78 100644
--- a/src/main/java/com/android/tools/r8/profile/art/HumanReadableArtProfileParser.java
+++ b/src/main/java/com/android/tools/r8/profile/art/HumanReadableArtProfileParser.java
@@ -18,15 +18,21 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UncheckedIOException;
+import java.util.function.Consumer;
public class HumanReadableArtProfileParser {
+ private final Consumer<HumanReadableArtProfileParserErrorDiagnostic> diagnosticConsumer;
private final ArtProfileBuilder profileBuilder;
private final ArtProfileRulePredicate rulePredicate;
private final Reporter reporter;
HumanReadableArtProfileParser(
- ArtProfileBuilder profileBuilder, ArtProfileRulePredicate rulePredicate, Reporter reporter) {
+ Consumer<HumanReadableArtProfileParserErrorDiagnostic> diagnosticConsumer,
+ ArtProfileBuilder profileBuilder,
+ ArtProfileRulePredicate rulePredicate,
+ Reporter reporter) {
+ this.diagnosticConsumer = diagnosticConsumer;
this.profileBuilder = profileBuilder;
this.rulePredicate = rulePredicate;
this.reporter = reporter;
@@ -60,8 +66,9 @@
}
private void parseError(String rule, int lineNumber, Origin origin) {
- if (reporter != null) {
- reporter.error(new HumanReadableArtProfileParserErrorDiagnostic(rule, lineNumber, origin));
+ if (diagnosticConsumer != null) {
+ diagnosticConsumer.accept(
+ new HumanReadableArtProfileParserErrorDiagnostic(rule, lineNumber, origin));
}
}
@@ -143,10 +150,17 @@
public static class Builder implements HumanReadableArtProfileParserBuilder {
+ private Consumer<HumanReadableArtProfileParserErrorDiagnostic> diagnosticConsumer;
private ArtProfileBuilder profileBuilder;
private ArtProfileRulePredicate rulePredicate = new AlwaysTrueArtProfileRulePredicate();
private Reporter reporter;
+ public Builder setDiagnosticConsumer(
+ Consumer<HumanReadableArtProfileParserErrorDiagnostic> diagnosticConsumer) {
+ this.diagnosticConsumer = diagnosticConsumer;
+ return this;
+ }
+
public Builder setReporter(Reporter reporter) {
this.reporter = reporter;
return this;
@@ -164,7 +178,11 @@
}
public HumanReadableArtProfileParser build() {
- return new HumanReadableArtProfileParser(profileBuilder, rulePredicate, reporter);
+ if (diagnosticConsumer == null && reporter != null) {
+ diagnosticConsumer = reporter::error;
+ }
+ return new HumanReadableArtProfileParser(
+ diagnosticConsumer, profileBuilder, rulePredicate, reporter);
}
}
}
diff --git a/src/test/java/com/android/tools/r8/TestDiagnosticMessages.java b/src/test/java/com/android/tools/r8/TestDiagnosticMessages.java
index a15b915..1205acc 100644
--- a/src/test/java/com/android/tools/r8/TestDiagnosticMessages.java
+++ b/src/test/java/com/android/tools/r8/TestDiagnosticMessages.java
@@ -112,6 +112,11 @@
return assertInfosMatch(Collections.singletonList(matcher));
}
+ @SafeVarargs
+ public final TestDiagnosticMessages assertInfosMatch(Matcher<Diagnostic>... matchers) {
+ return assertInfosMatch(Arrays.asList(matchers));
+ }
+
public abstract TestDiagnosticMessages assertInfosMatch(Collection<Matcher<Diagnostic>> matchers);
public final TestDiagnosticMessages assertWarningsMatch(Matcher<Diagnostic> matcher) {
diff --git a/src/test/java/com/android/tools/r8/profile/art/diagnostic/HumanReadableArtProfileParserErrorDiagnosticFromArtProfileTest.java b/src/test/java/com/android/tools/r8/profile/art/diagnostic/HumanReadableArtProfileParserErrorDiagnosticFromArtProfileTest.java
index c22ad2a..ba1ca12 100644
--- a/src/test/java/com/android/tools/r8/profile/art/diagnostic/HumanReadableArtProfileParserErrorDiagnosticFromArtProfileTest.java
+++ b/src/test/java/com/android/tools/r8/profile/art/diagnostic/HumanReadableArtProfileParserErrorDiagnosticFromArtProfileTest.java
@@ -9,7 +9,6 @@
import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.CoreMatchers.equalTo;
-import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestDiagnosticMessages;
import com.android.tools.r8.TestParameters;
@@ -38,7 +37,7 @@
return getTestParameters().withNoneRuntime().build();
}
- @Test(expected = CompilationFailedException.class)
+ @Test
public void testD8() throws Exception {
testForD8()
.addProgramClasses(Main.class)
@@ -48,12 +47,13 @@
.compileWithExpectedDiagnostics(this::inspectDiagnostics);
}
- @Test(expected = CompilationFailedException.class)
+ @Test
public void testR8() throws Exception {
testForR8(Backend.DEX)
.addProgramClasses(Main.class)
.addKeepMainRule(Main.class)
.addArtProfileForRewriting(createArtProfileProvider())
+ .allowDiagnosticInfoMessages()
.release()
.setMinApi(AndroidApiLevel.LATEST)
.compileWithExpectedDiagnostics(this::inspectDiagnostics);
@@ -77,7 +77,7 @@
}
private void inspectDiagnostics(TestDiagnosticMessages diagnostics) {
- diagnostics.assertErrorsMatch(
+ diagnostics.assertInfosMatch(
allOf(
diagnosticType(HumanReadableArtProfileParserErrorDiagnostic.class),
diagnosticMessage(