Record Error Prone initialization time

PiperOrigin-RevId: 498571979
Change-Id: I62ff6eb716e06bd363cba8b5aca3df896eb1f40e
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/errorprone/ErrorPronePlugin.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/errorprone/ErrorPronePlugin.java
index 156398c..ef5bb9c 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/errorprone/ErrorPronePlugin.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/errorprone/ErrorPronePlugin.java
@@ -14,7 +14,6 @@
 
 package com.google.devtools.build.buildjar.javac.plugins.errorprone;
 
-
 import com.google.common.base.Stopwatch;
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.buildjar.InvalidCommandLineException;
@@ -39,6 +38,7 @@
 import java.time.Duration;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 /**
  * A plugin that performs Error Prone analysis. Error Prone is a static analysis framework that we
@@ -135,9 +135,22 @@
   @Override
   public void finish() {
     statisticsBuilder.totalErrorProneTime(elapsed.elapsed());
+    initializationTime(timings).ifPresent(statisticsBuilder::errorProneInitializationTime);
     timings.timings().entrySet().stream()
         .sorted(Map.Entry.<String, Duration>comparingByValue().reversed())
         .limit(10) // best-effort to stay under the action metric size limit
         .forEachOrdered(e -> statisticsBuilder.addBugpatternTiming(e.getKey(), e.getValue()));
   }
+
+  // TODO(cushon): remove once ErrorProneTimings#initializationTime makes it into an EP release
+  private static Optional<Duration> initializationTime(ErrorProneTimings timings) {
+    try {
+      return Optional.of(
+          (Duration) ErrorProneTimings.class.getMethod("initializationTime").invoke(timings));
+    } catch (NoSuchMethodException e) {
+      return Optional.empty();
+    } catch (ReflectiveOperationException e) {
+      throw new LinkageError(e.getMessage(), e);
+    }
+  }
 }
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/statistics/BlazeJavacStatistics.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/statistics/BlazeJavacStatistics.java
index 1949005..6c42616 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/statistics/BlazeJavacStatistics.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/statistics/BlazeJavacStatistics.java
@@ -63,6 +63,8 @@
 
   public abstract Optional<Duration> totalErrorProneTime();
 
+  public abstract Optional<Duration> errorProneInitializationTime();
+
   public abstract ImmutableMap<String, Duration> bugpatternTiming();
 
   public abstract Optional<Duration> totalProcessorTime();
@@ -104,6 +106,8 @@
 
     public abstract Builder totalErrorProneTime(Duration totalErrorProneTime);
 
+    public abstract Builder errorProneInitializationTime(Duration errorProneInitializationTime);
+
     public abstract Builder totalProcessorTime(Duration totalProcessorTime);
 
     abstract ImmutableMap.Builder<String, Duration> bugpatternTimingBuilder();