Add TraceReferencesConsumer forwarding consumer
Bug: 169127026
Bug: 169546956
Change-Id: Ifcbdabe51730782983bd57bc352ed6732e2e3e80
diff --git a/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesConsumer.java b/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesConsumer.java
index 679c330..5750fe1 100644
--- a/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesConsumer.java
+++ b/src/main/java/com/android/tools/r8/tracereferences/TraceReferencesConsumer.java
@@ -87,4 +87,56 @@
* Tracing has finished. There will be no more calls to any of the <code>acceptXXX</code> methods.
*/
default void finished() {}
+
+ static TraceReferencesConsumer emptyConsumer() {
+ return ForwardingConsumer.EMPTY_CONSUMER;
+ }
+
+ /** Forwarding consumer to delegate to an optional existing consumer. */
+ @Keep
+ class ForwardingConsumer implements TraceReferencesConsumer {
+
+ private static final TraceReferencesConsumer EMPTY_CONSUMER = new ForwardingConsumer(null);
+
+ private final TraceReferencesConsumer consumer;
+
+ public ForwardingConsumer(TraceReferencesConsumer consumer) {
+ this.consumer = consumer;
+ }
+
+ @Override
+ public void acceptType(TracedClass tracedClass) {
+ if (consumer != null) {
+ consumer.acceptType(tracedClass);
+ }
+ }
+
+ @Override
+ public void acceptField(TracedField tracedField) {
+ if (consumer != null) {
+ consumer.acceptField(tracedField);
+ }
+ }
+
+ @Override
+ public void acceptMethod(TracedMethod tracedMethod) {
+ if (consumer != null) {
+ consumer.acceptMethod(tracedMethod);
+ }
+ }
+
+ @Override
+ public void acceptPackage(PackageReference pkg) {
+ if (consumer != null) {
+ consumer.acceptPackage(pkg);
+ }
+ }
+
+ @Override
+ public void finished() {
+ if (consumer != null) {
+ consumer.finished();
+ }
+ }
+ }
}