BEP: move configuration-independent information to TargetConfigured event

Some information about a target is configuration independent and therefore can
already be provided at a target level (i.e., in the TargetConfigured event). Do
so, to have that information available earlier and, once the deprecation period
is over, avoid redundant information in the stream.

Change-Id: I8021ce3dd2a8168d409ea513190c4e3a349dbc2f
PiperOrigin-RevId: 164967059
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TargetConfiguredEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/TargetConfiguredEvent.java
index 56ddc4d..8395337 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TargetConfiguredEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TargetConfiguredEvent.java
@@ -22,17 +22,19 @@
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithConfiguration;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import com.google.devtools.build.lib.buildeventstream.NullConfiguration;
-import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.packages.TargetUtils;
+import com.google.devtools.build.lib.packages.TestSize;
 import java.util.Collection;
 
 /** Event reporting about the configurations associated with a given target */
 public class TargetConfiguredEvent implements BuildEventWithConfiguration {
-  private final Label label;
+  private final Target target;
   private final Collection<BuildConfiguration> configurations;
 
-  TargetConfiguredEvent(Label label, Collection<BuildConfiguration> configurations) {
-    this.label = label;
+  TargetConfiguredEvent(Target target, Collection<BuildConfiguration> configurations) {
     this.configurations = configurations;
+    this.target = target;
   }
 
   @Override
@@ -50,7 +52,7 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.targetConfigured(label);
+    return BuildEventId.targetConfigured(target.getLabel());
   }
 
   @Override
@@ -58,19 +60,37 @@
     ImmutableList.Builder childrenBuilder = ImmutableList.builder();
     for (BuildConfiguration config : configurations) {
       if (config != null) {
-        childrenBuilder.add(BuildEventId.targetCompleted(label, config.getEventId()));
+        childrenBuilder.add(BuildEventId.targetCompleted(target.getLabel(), config.getEventId()));
       } else {
         childrenBuilder.add(
-            BuildEventId.targetCompleted(label, BuildEventId.nullConfigurationId()));
+            BuildEventId.targetCompleted(target.getLabel(), BuildEventId.nullConfigurationId()));
       }
     }
     return childrenBuilder.build();
   }
 
+  static BuildEventStreamProtos.TestSize bepTestSize(TestSize size) {
+    switch (size) {
+      case SMALL:
+        return BuildEventStreamProtos.TestSize.SMALL;
+      case MEDIUM:
+        return BuildEventStreamProtos.TestSize.MEDIUM;
+      case LARGE:
+        return BuildEventStreamProtos.TestSize.LARGE;
+      case ENORMOUS:
+        return BuildEventStreamProtos.TestSize.ENORMOUS;
+      default:
+        return BuildEventStreamProtos.TestSize.UNKNOWN;
+    }
+  }
+
   @Override
   public BuildEventStreamProtos.BuildEvent asStreamProto(BuildEventConverters converters) {
-    return GenericBuildEvent.protoChaining(this)
-        .setConfigured(BuildEventStreamProtos.TargetConfigured.getDefaultInstance())
-        .build();
+    BuildEventStreamProtos.TargetConfigured.Builder builder =
+        BuildEventStreamProtos.TargetConfigured.newBuilder().setTargetKind(target.getTargetKind());
+    if (TargetUtils.isTestRule(target)) {
+      builder.setTestSize(bepTestSize(TestSize.getTestSize(target.getAssociatedRule())));
+    }
+    return GenericBuildEvent.protoChaining(this).setConfigured(builder.build()).build();
   }
 }