Remove superfluous BuildEventId Java class. The protobuf is just as good, and it reduces complexity to not have these wrapper classes floating around.

Probably will have no noticeable effect on performance/memory, but can't hurt.

PiperOrigin-RevId: 304197948
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutedEvent.java b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutedEvent.java
index ecc6c28..04a686f 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutedEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutedEvent.java
@@ -21,8 +21,9 @@
 import com.google.devtools.build.lib.buildeventstream.BuildEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent.LocalFile.LocalFileType;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithConfiguration;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import com.google.devtools.build.lib.buildeventstream.NullConfiguration;
@@ -113,12 +114,10 @@
   @Override
   public BuildEventId getEventId() {
     if (action.getOwner() == null) {
-      return BuildEventId.actionCompleted(actionId);
+      return BuildEventIdUtil.actionCompleted(actionId);
     } else {
-      return BuildEventId.actionCompleted(
-          actionId,
-          action.getOwner().getLabel(),
-          action.getOwner().getConfigurationChecksum());
+      return BuildEventIdUtil.actionCompleted(
+          actionId, action.getOwner().getLabel(), action.getOwner().getConfigurationChecksum());
     }
   }
 
@@ -195,7 +194,7 @@
       if (configuration == null) {
         configuration = new NullConfiguration();
       }
-      actionBuilder.setConfiguration(configuration.getEventId().asStreamProto().getConfiguration());
+      actionBuilder.setConfiguration(configuration.getEventId().getConfiguration());
     }
     for (MetadataLog actionMetadataLog : actionMetadataLogs) {
       String uri = pathConverter.apply(actionMetadataLog.getFilePath());
diff --git a/src/main/java/com/google/devtools/build/lib/actions/BuildConfigurationEvent.java b/src/main/java/com/google/devtools/build/lib/actions/BuildConfigurationEvent.java
index d4141cf..d072222 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/BuildConfigurationEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/BuildConfigurationEvent.java
@@ -17,8 +17,8 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import java.util.Collection;
 import java.util.Objects;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisFailureEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisFailureEvent.java
index e34beea..ea0e769 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisFailureEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisFailureEvent.java
@@ -19,8 +19,9 @@
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import com.google.devtools.build.lib.buildeventstream.NullConfiguration;
 import com.google.devtools.build.lib.causes.Cause;
@@ -75,12 +76,13 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.targetCompleted(failedTarget.getLabel(), configuration);
+    return BuildEventIdUtil.targetCompleted(failedTarget.getLabel(), configuration);
   }
 
   @Override
   public Collection<BuildEventId> getChildrenEvents() {
-    return ImmutableList.copyOf(Iterables.transform(rootCauses.toList(), BuildEventId::fromCause));
+    return ImmutableList.copyOf(
+        Iterables.transform(rootCauses.toList(), cause -> cause.getIdProto()));
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisRootCauseEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisRootCauseEvent.java
index eddd056..8556f82 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisRootCauseEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisRootCauseEvent.java
@@ -19,8 +19,9 @@
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithConfiguration;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import com.google.devtools.build.lib.cmdline.Label;
@@ -52,9 +53,9 @@
   public BuildEventId getEventId() {
     // This needs to match AnalysisFailedCause.
     if (configuration == null) {
-      return BuildEventId.unconfiguredLabelId(label);
+      return BuildEventIdUtil.unconfiguredLabelId(label);
     }
-    return BuildEventId.configuredLabelId(label, configuration.getEventId());
+    return BuildEventIdUtil.configuredLabelId(label, configuration.getEventId());
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AspectCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/AspectCompleteEvent.java
index a87bb35..5f27ce1 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AspectCompleteEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AspectCompleteEvent.java
@@ -22,8 +22,9 @@
 import com.google.devtools.build.lib.analysis.TopLevelArtifactHelper.ArtifactsInOutputGroup;
 import com.google.devtools.build.lib.buildeventstream.ArtifactGroupNamer;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.OutputGroup;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithOrderConstraint;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
@@ -57,7 +58,7 @@
         (rootCauses == null) ? NestedSetBuilder.<Cause>emptySet(Order.STABLE_ORDER) : rootCauses;
     ImmutableList.Builder<BuildEventId> postedAfterBuilder = ImmutableList.builder();
     for (Cause cause : getRootCauses().toList()) {
-      postedAfterBuilder.add(BuildEventId.fromCause(cause));
+      postedAfterBuilder.add(cause.getIdProto());
     }
     this.postedAfter = postedAfterBuilder.build();
     this.completionContext = completionContext;
@@ -108,7 +109,7 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.aspectCompleted(
+    return BuildEventIdUtil.aspectCompleted(
         aspectValue.getLabel(),
         configurationEventId,
         aspectValue.getAspect().getDescriptor().getDescription());
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AspectConfiguredEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/AspectConfiguredEvent.java
index e54b211..f5796fa 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AspectConfiguredEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AspectConfiguredEvent.java
@@ -17,8 +17,9 @@
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithConfiguration;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import com.google.devtools.build.lib.buildeventstream.NullConfiguration;
@@ -53,7 +54,7 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.aspectConfigured(target, aspect);
+    return BuildEventIdUtil.aspectConfigured(target, aspect);
   }
 
   @Override
@@ -61,10 +62,10 @@
     ImmutableList.Builder<BuildEventId> childrenBuilder = ImmutableList.builder();
     for (BuildConfiguration config : configurations) {
       if (config != null) {
-        childrenBuilder.add(BuildEventId.targetCompleted(target, config.getEventId()));
+        childrenBuilder.add(BuildEventIdUtil.targetCompleted(target, config.getEventId()));
       } else {
         childrenBuilder.add(
-            BuildEventId.targetCompleted(target, BuildEventId.nullConfigurationId()));
+            BuildEventIdUtil.targetCompleted(target, BuildEventIdUtil.nullConfigurationId()));
       }
     }
     return childrenBuilder.build();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildInfoEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildInfoEvent.java
index 39d3b3f..3544319 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BuildInfoEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildInfoEvent.java
@@ -17,8 +17,9 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithOrderConstraint;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
@@ -46,17 +47,17 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.workspaceStatusId();
+    return BuildEventIdUtil.workspaceStatusId();
   }
 
   @Override
   public Collection<BuildEventId> getChildrenEvents() {
-    return ImmutableList.<BuildEventId>of();
+    return ImmutableList.of();
   }
 
   @Override
   public Collection<BuildEventId> postedAfter() {
-    return ImmutableList.<BuildEventId>of(BuildEventId.buildStartedId());
+    return ImmutableList.of(BuildEventIdUtil.buildStartedId());
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/NoBuildEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/NoBuildEvent.java
index e8ba823..e124cb4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/NoBuildEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/NoBuildEvent.java
@@ -17,8 +17,9 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import com.google.devtools.build.lib.buildeventstream.ProgressEvent;
 import com.google.devtools.build.lib.util.ProcessUtils;
@@ -56,7 +57,8 @@
   @Override
   public Collection<BuildEventId> getChildrenEvents() {
     if (separateFinishedEvent) {
-      return ImmutableList.of(ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventId.buildFinished());
+      return ImmutableList.of(
+          ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventIdUtil.buildFinished());
     } else {
       return ImmutableList.of(ProgressEvent.INITIAL_PROGRESS_UPDATE);
     }
@@ -64,7 +66,7 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.buildStartedId();
+    return BuildEventIdUtil.buildStartedId();
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java
index f14f3ab..bcf5ee8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java
@@ -34,8 +34,9 @@
 import com.google.devtools.build.lib.buildeventstream.BuildEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent.LocalFile.LocalFileType;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.File;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.OutputGroup;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.TargetComplete;
@@ -138,9 +139,9 @@
     this.configuredTargetKey =
         ConfiguredTargetKey.of(
             targetAndData.getConfiguredTarget(), targetAndData.getConfiguration());
-    postedAfterBuilder.add(BuildEventId.targetConfigured(aliasLabel));
+    postedAfterBuilder.add(BuildEventIdUtil.targetConfigured(aliasLabel));
     for (Cause cause : getRootCauses().toList()) {
-      postedAfterBuilder.add(BuildEventId.fromCause(cause));
+      postedAfterBuilder.add(cause.getIdProto());
     }
     this.postedAfter = postedAfterBuilder.build();
     this.completionContext = completionContext;
@@ -149,7 +150,7 @@
     this.testTimeoutSeconds = isTest ? getTestTimeoutSeconds(targetAndData) : null;
     BuildConfiguration configuration = targetAndData.getConfiguration();
     this.configEventId =
-        configuration != null ? configuration.getEventId() : BuildEventId.nullConfigurationId();
+        configuration != null ? configuration.getEventId() : BuildEventIdUtil.nullConfigurationId();
     this.configurationEvent = configuration != null ? configuration.toBuildEvent() : null;
     this.testParams =
         isTest
@@ -254,14 +255,14 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.targetCompleted(aliasLabel, configEventId);
+    return BuildEventIdUtil.targetCompleted(aliasLabel, configEventId);
   }
 
   @Override
   public Collection<BuildEventId> getChildrenEvents() {
     ImmutableList.Builder<BuildEventId> childrenBuilder = ImmutableList.builder();
     for (Cause cause : getRootCauses().toList()) {
-      childrenBuilder.add(BuildEventId.fromCause(cause));
+      childrenBuilder.add(cause.getIdProto());
     }
     if (isTest) {
       // For tests, announce all the test actions that will minimally happen (except for
@@ -270,10 +271,10 @@
       Label label = getLabel();
       for (int run = 0; run < Math.max(testParams.getRuns(), 1); run++) {
         for (int shard = 0; shard < Math.max(testParams.getShards(), 1); shard++) {
-          childrenBuilder.add(BuildEventId.testResult(label, run, shard, configEventId));
+          childrenBuilder.add(BuildEventIdUtil.testResult(label, run, shard, configEventId));
         }
       }
-      childrenBuilder.add(BuildEventId.testSummary(label, configEventId));
+      childrenBuilder.add(BuildEventIdUtil.testSummary(label, configEventId));
     }
     return childrenBuilder.build();
   }
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 d749cba..8fab9fd 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
@@ -17,8 +17,9 @@
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithConfiguration;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import com.google.devtools.build.lib.buildeventstream.NullConfiguration;
@@ -55,7 +56,7 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.targetConfigured(target.getLabel());
+    return BuildEventIdUtil.targetConfigured(target.getLabel());
   }
 
   @Override
@@ -63,10 +64,12 @@
     ImmutableList.Builder<BuildEventId> childrenBuilder = ImmutableList.builder();
     for (BuildConfiguration config : configurations) {
       if (config != null) {
-        childrenBuilder.add(BuildEventId.targetCompleted(target.getLabel(), config.getEventId()));
+        childrenBuilder.add(
+            BuildEventIdUtil.targetCompleted(target.getLabel(), config.getEventId()));
       } else {
         childrenBuilder.add(
-            BuildEventId.targetCompleted(target.getLabel(), BuildEventId.nullConfigurationId()));
+            BuildEventIdUtil.targetCompleted(
+                target.getLabel(), BuildEventIdUtil.nullConfigurationId()));
       }
     }
     return childrenBuilder.build();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
index a3412fa..bb854cb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
@@ -34,8 +34,9 @@
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
 import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
 import com.google.devtools.build.lib.analysis.actions.FileWriteAction;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.concurrent.BlazeInterners;
@@ -906,7 +907,7 @@
   }
 
   public BuildEventId getEventId() {
-    return BuildEventId.configurationId(checksum());
+    return BuildEventIdUtil.configurationId(checksum());
   }
 
   public BuildConfigurationEvent toBuildEvent() {
@@ -918,7 +919,7 @@
     BuildEventStreamProtos.BuildEvent.Builder builder =
         BuildEventStreamProtos.BuildEvent.newBuilder();
     builder
-        .setId(eventId.asStreamProto())
+        .setId(eventId)
         .setConfiguration(
             BuildEventStreamProtos.Configuration.newBuilder()
                 .setMnemonic(getMnemonic())
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/AbortedEvent.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/AbortedEvent.java
index f3edfe7..9e7d2f5 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/AbortedEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/AbortedEvent.java
@@ -15,6 +15,7 @@
 package com.google.devtools.build.lib.buildeventstream;
 
 import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.cmdline.Label;
 import java.util.Collection;
 import javax.annotation.Nullable;
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildCompletingEvent.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildCompletingEvent.java
index 089db8a..dd887e0 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildCompletingEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildCompletingEvent.java
@@ -15,6 +15,7 @@
 package com.google.devtools.build.lib.buildeventstream;
 
 import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.util.ExitCode;
 import java.util.Collection;
 
@@ -54,7 +55,7 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.buildFinished();
+    return BuildEventIdUtil.buildFinished();
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java
deleted file mode 100644
index 8d72699..0000000
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java
+++ /dev/null
@@ -1,343 +0,0 @@
-// Copyright 2016 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.buildeventstream;
-
-import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId.ActionCompletedId;
-import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId.ConfigurationId;
-import com.google.devtools.build.lib.causes.Cause;
-import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.vfs.PathFragment;
-import com.google.protobuf.TextFormat;
-import java.io.Serializable;
-import java.util.List;
-import java.util.Objects;
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.Immutable;
-
-/**
- * Class of identifiers for publically posted events.
- *
- * <p>Since event identifiers need to be created before the actual event, the event IDs are highly
- * structured so that equal identifiers can easily be generated. The main way of pregenerating event
- * identifiers that do not accidentally coincide is by providing a target or a target pattern;
- * therefore, those (if provided) are made specially visible.
- */
-@AutoCodec
-@Immutable
-public final class BuildEventId implements Serializable {
-  private final BuildEventStreamProtos.BuildEventId protoid;
-
-  @AutoCodec.VisibleForSerialization
-  BuildEventId(BuildEventStreamProtos.BuildEventId protoid) {
-    this.protoid = protoid;
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(protoid);
-  }
-
-  @Override
-  public boolean equals(Object other) {
-    if (other == null || !other.getClass().equals(getClass())) {
-      return false;
-    }
-    BuildEventId that = (BuildEventId) other;
-    return Objects.equals(this.protoid, that.protoid);
-  }
-
-  @Override
-  public String toString() {
-    return "BuildEventId {" + TextFormat.printToString(protoid) + "}";
-  }
-
-  public BuildEventStreamProtos.BuildEventId asStreamProto() {
-    return protoid;
-  }
-
-  public static BuildEventId unknownBuildEventId(String details) {
-    BuildEventStreamProtos.BuildEventId.UnknownBuildEventId id =
-        BuildEventStreamProtos.BuildEventId.UnknownBuildEventId.newBuilder()
-            .setDetails(details)
-            .build();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setUnknown(id).build());
-  }
-
-  public static BuildEventId progressId(int count) {
-    BuildEventStreamProtos.BuildEventId.ProgressId id =
-        BuildEventStreamProtos.BuildEventId.ProgressId.newBuilder().setOpaqueCount(count).build();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setProgress(id).build());
-  }
-
-  public static BuildEventId buildStartedId() {
-    BuildEventStreamProtos.BuildEventId.BuildStartedId startedId =
-        BuildEventStreamProtos.BuildEventId.BuildStartedId.getDefaultInstance();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setStarted(startedId).build());
-  }
-
-  public static BuildEventId unstructuredCommandlineId() {
-    BuildEventStreamProtos.BuildEventId.UnstructuredCommandLineId commandLineId =
-        BuildEventStreamProtos.BuildEventId.UnstructuredCommandLineId.getDefaultInstance();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder()
-            .setUnstructuredCommandLine(commandLineId)
-            .build());
-  }
-
-  public static BuildEventId structuredCommandlineId(String commandLineLabel) {
-    BuildEventStreamProtos.BuildEventId.StructuredCommandLineId commandLineId =
-        BuildEventStreamProtos.BuildEventId.StructuredCommandLineId.newBuilder()
-            .setCommandLineLabel(commandLineLabel)
-            .build();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder()
-            .setStructuredCommandLine(commandLineId)
-            .build());
-  }
-
-  public static BuildEventId optionsParsedId() {
-    BuildEventStreamProtos.BuildEventId.OptionsParsedId optionsParsedId =
-        BuildEventStreamProtos.BuildEventId.OptionsParsedId.getDefaultInstance();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setOptionsParsed(optionsParsedId).build());
-  }
-
-  public static BuildEventId workspaceStatusId() {
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder()
-            .setWorkspaceStatus(
-                BuildEventStreamProtos.BuildEventId.WorkspaceStatusId.getDefaultInstance())
-            .build());
-  }
-
-  public static BuildEventId buildMetadataId() {
-    BuildEventStreamProtos.BuildEventId.BuildMetadataId buildMetadataId =
-        BuildEventStreamProtos.BuildEventId.BuildMetadataId.getDefaultInstance();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setBuildMetadata(buildMetadataId).build());
-  }
-
-  public static BuildEventId workspaceConfigId() {
-    BuildEventStreamProtos.BuildEventId.WorkspaceConfigId workspaceConfigId =
-        BuildEventStreamProtos.BuildEventId.WorkspaceConfigId.getDefaultInstance();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setWorkspace(workspaceConfigId).build());
-  }
-
-  public static BuildEventId fetchId(String url) {
-    BuildEventStreamProtos.BuildEventId.FetchId fetchId =
-        BuildEventStreamProtos.BuildEventId.FetchId.newBuilder().setUrl(url).build();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setFetch(fetchId).build());
-  }
-
-  public static BuildEventId configurationId(String id) {
-    BuildEventStreamProtos.BuildEventId.ConfigurationId configurationId =
-        BuildEventStreamProtos.BuildEventId.ConfigurationId.newBuilder().setId(id).build();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setConfiguration(configurationId).build());
-  }
-
-  public static BuildEventId nullConfigurationId() {
-    return configurationId("none");
-  }
-
-  private static BuildEventId targetPatternExpanded(List<String> targetPattern, boolean skipped) {
-    BuildEventStreamProtos.BuildEventId.PatternExpandedId patternId =
-        BuildEventStreamProtos.BuildEventId.PatternExpandedId.newBuilder()
-            .addAllPattern(targetPattern)
-            .build();
-    BuildEventStreamProtos.BuildEventId.Builder builder =
-        BuildEventStreamProtos.BuildEventId.newBuilder();
-    if (skipped) {
-      builder.setPatternSkipped(patternId);
-    } else {
-      builder.setPattern(patternId);
-    }
-    return new BuildEventId(builder.build());
-  }
-
-  public static BuildEventId targetPatternExpanded(List<String> targetPattern) {
-    return targetPatternExpanded(targetPattern, false);
-  }
-
-  public static BuildEventId targetPatternSkipped(List<String> targetPattern) {
-    return targetPatternExpanded(targetPattern, true);
-  }
-
-  public static BuildEventId targetConfigured(Label label) {
-    BuildEventStreamProtos.BuildEventId.TargetConfiguredId configuredId =
-        BuildEventStreamProtos.BuildEventId.TargetConfiguredId.newBuilder()
-            .setLabel(label.toString())
-            .build();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setTargetConfigured(configuredId).build());
-  }
-
-  public static BuildEventId aspectConfigured(Label label, String aspect) {
-    BuildEventStreamProtos.BuildEventId.TargetConfiguredId configuredId =
-        BuildEventStreamProtos.BuildEventId.TargetConfiguredId.newBuilder()
-            .setLabel(label.toString())
-            .setAspect(aspect)
-            .build();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setTargetConfigured(configuredId).build());
-  }
-
-  public static BuildEventId targetCompleted(Label target, BuildEventId configuration) {
-    BuildEventStreamProtos.BuildEventId.ConfigurationId configId =
-        configuration.protoid.getConfiguration();
-    BuildEventStreamProtos.BuildEventId.TargetCompletedId targetId =
-        BuildEventStreamProtos.BuildEventId.TargetCompletedId.newBuilder()
-            .setLabel(target.toString())
-            .setConfiguration(configId)
-            .build();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setTargetCompleted(targetId).build());
-  }
-
-  public static BuildEventId configuredLabelId(Label label, BuildEventId configuration) {
-    BuildEventStreamProtos.BuildEventId.ConfigurationId configId =
-        configuration.protoid.getConfiguration();
-    BuildEventStreamProtos.BuildEventId.ConfiguredLabelId labelId =
-        BuildEventStreamProtos.BuildEventId.ConfiguredLabelId.newBuilder()
-            .setLabel(label.toString())
-            .setConfiguration(configId)
-            .build();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setConfiguredLabel(labelId).build());
-  }
-
-  public static BuildEventId unconfiguredLabelId(Label label) {
-    BuildEventStreamProtos.BuildEventId.UnconfiguredLabelId labelId =
-        BuildEventStreamProtos.BuildEventId.UnconfiguredLabelId.newBuilder()
-            .setLabel(label.toString())
-            .build();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setUnconfiguredLabel(labelId).build());
-  }
-
-  public static BuildEventId aspectCompleted(
-      Label target, BuildEventId configuration, String aspect) {
-    BuildEventStreamProtos.BuildEventId.ConfigurationId configId =
-        configuration.protoid.getConfiguration();
-    BuildEventStreamProtos.BuildEventId.TargetCompletedId targetId =
-        BuildEventStreamProtos.BuildEventId.TargetCompletedId.newBuilder()
-            .setLabel(target.toString())
-            .setConfiguration(configId)
-            .setAspect(aspect)
-            .build();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setTargetCompleted(targetId).build());
-  }
-
-  public static BuildEventId fromCause(Cause cause) {
-    return new BuildEventId(cause.getIdProto());
-  }
-
-  public static BuildEventId actionCompleted(PathFragment path) {
-    return actionCompleted(path, null, null);
-  }
-
-  public static BuildEventId actionCompleted(
-      PathFragment path, @Nullable Label label, @Nullable String configurationChecksum) {
-    ActionCompletedId.Builder actionId =
-        ActionCompletedId.newBuilder().setPrimaryOutput(path.toString());
-    if (label != null) {
-      actionId.setLabel(label.toString());
-    }
-    if (configurationChecksum != null) {
-      actionId.setConfiguration(ConfigurationId.newBuilder().setId(configurationChecksum));
-    }
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setActionCompleted(actionId).build());
-  }
-
-  public static BuildEventId fromArtifactGroupName(String name) {
-    BuildEventStreamProtos.BuildEventId.NamedSetOfFilesId namedSetId =
-        BuildEventStreamProtos.BuildEventId.NamedSetOfFilesId.newBuilder().setId(name).build();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setNamedSet(namedSetId).build());
-  }
-
-  public static BuildEventId testResult(
-      Label target, Integer run, Integer shard, Integer attempt, BuildEventId configuration) {
-    BuildEventStreamProtos.BuildEventId.ConfigurationId configId =
-        configuration.protoid.getConfiguration();
-    BuildEventStreamProtos.BuildEventId.TestResultId resultId =
-        BuildEventStreamProtos.BuildEventId.TestResultId.newBuilder()
-            .setLabel(target.toString())
-            .setConfiguration(configId)
-            .setRun(run + 1)
-            .setShard(shard + 1)
-            .setAttempt(attempt)
-            .build();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setTestResult(resultId).build());
-  }
-
-  public static BuildEventId testResult(
-      Label target, Integer run, Integer shard, BuildEventId configuration) {
-    return testResult(target, run, shard, 1, configuration);
-  }
-
-  public static BuildEventId testSummary(Label target, BuildEventId configuration) {
-    BuildEventStreamProtos.BuildEventId.ConfigurationId configId =
-        configuration.protoid.getConfiguration();
-    BuildEventStreamProtos.BuildEventId.TestSummaryId summaryId =
-        BuildEventStreamProtos.BuildEventId.TestSummaryId.newBuilder()
-            .setLabel(target.toString())
-            .setConfiguration(configId)
-            .build();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setTestSummary(summaryId).build());
-  }
-
-  public static BuildEventId buildFinished() {
-    BuildEventStreamProtos.BuildEventId.BuildFinishedId finishedId =
-        BuildEventStreamProtos.BuildEventId.BuildFinishedId.getDefaultInstance();
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder().setBuildFinished(finishedId).build());
-  }
-
-  public static BuildEventId buildToolLogs() {
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder()
-            .setBuildToolLogs(
-                BuildEventStreamProtos.BuildEventId.BuildToolLogsId.getDefaultInstance())
-            .build());
-  }
-
-  public static BuildEventId buildMetrics() {
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder()
-            .setBuildMetrics(
-                BuildEventStreamProtos.BuildEventId.BuildMetricsId.getDefaultInstance())
-            .build());
-  }
-
-  public static BuildEventId convenienceSymlinksIdentifiedId() {
-    return new BuildEventId(
-        BuildEventStreamProtos.BuildEventId.newBuilder()
-            .setConvenienceSymlinksIdentified(
-                BuildEventStreamProtos.BuildEventId.ConvenienceSymlinksIdentifiedId
-                    .getDefaultInstance())
-            .build());
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventIdUtil.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventIdUtil.java
new file mode 100644
index 0000000..4bd5cd5
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventIdUtil.java
@@ -0,0 +1,255 @@
+// Copyright 2016 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.buildeventstream;
+
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId.ActionCompletedId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId.ConfigurationId;
+import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.vfs.PathFragment;
+import java.util.List;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.Immutable;
+
+/**
+ * Utilities for working with {@link BuildEventId}.
+ *
+ * <p>Since event identifiers need to be created before the actual event, the event IDs are highly
+ * structured so that equal identifiers can easily be generated. The main way of pregenerating event
+ * identifiers that do not accidentally coincide is by providing a target or a target pattern;
+ * therefore, those (if provided) are made specially visible.
+ */
+@Immutable
+public final class BuildEventIdUtil {
+  private BuildEventIdUtil() {}
+
+  public static BuildEventId unknownBuildEventId(String details) {
+    BuildEventId.UnknownBuildEventId id =
+        BuildEventId.UnknownBuildEventId.newBuilder().setDetails(details).build();
+    return BuildEventId.newBuilder().setUnknown(id).build();
+  }
+
+  public static BuildEventId progressId(int count) {
+    BuildEventId.ProgressId id = BuildEventId.ProgressId.newBuilder().setOpaqueCount(count).build();
+    return BuildEventId.newBuilder().setProgress(id).build();
+  }
+
+  public static BuildEventId buildStartedId() {
+    BuildEventId.BuildStartedId startedId = BuildEventId.BuildStartedId.getDefaultInstance();
+    return BuildEventId.newBuilder().setStarted(startedId).build();
+  }
+
+  public static BuildEventId unstructuredCommandlineId() {
+    BuildEventId.UnstructuredCommandLineId commandLineId =
+        BuildEventId.UnstructuredCommandLineId.getDefaultInstance();
+    return BuildEventId.newBuilder().setUnstructuredCommandLine(commandLineId).build();
+  }
+
+  public static BuildEventId structuredCommandlineId(String commandLineLabel) {
+    BuildEventId.StructuredCommandLineId commandLineId =
+        BuildEventId.StructuredCommandLineId.newBuilder()
+            .setCommandLineLabel(commandLineLabel)
+            .build();
+    return BuildEventId.newBuilder().setStructuredCommandLine(commandLineId).build();
+  }
+
+  public static BuildEventId optionsParsedId() {
+    BuildEventId.OptionsParsedId optionsParsedId =
+        BuildEventId.OptionsParsedId.getDefaultInstance();
+    return BuildEventId.newBuilder().setOptionsParsed(optionsParsedId).build();
+  }
+
+  public static BuildEventId workspaceStatusId() {
+    return BuildEventId.newBuilder()
+        .setWorkspaceStatus(BuildEventId.WorkspaceStatusId.getDefaultInstance())
+        .build();
+  }
+
+  public static BuildEventId buildMetadataId() {
+    BuildEventId.BuildMetadataId buildMetadataId =
+        BuildEventId.BuildMetadataId.getDefaultInstance();
+    return BuildEventId.newBuilder().setBuildMetadata(buildMetadataId).build();
+  }
+
+  public static BuildEventId workspaceConfigId() {
+    BuildEventId.WorkspaceConfigId workspaceConfigId =
+        BuildEventId.WorkspaceConfigId.getDefaultInstance();
+    return BuildEventId.newBuilder().setWorkspace(workspaceConfigId).build();
+  }
+
+  static BuildEventId fetchId(String url) {
+    BuildEventId.FetchId fetchId = BuildEventId.FetchId.newBuilder().setUrl(url).build();
+    return BuildEventId.newBuilder().setFetch(fetchId).build();
+  }
+
+  public static BuildEventId configurationId(String id) {
+    BuildEventId.ConfigurationId configurationId =
+        BuildEventId.ConfigurationId.newBuilder().setId(id).build();
+    return BuildEventId.newBuilder().setConfiguration(configurationId).build();
+  }
+
+  public static BuildEventId nullConfigurationId() {
+    return configurationId("none");
+  }
+
+  private static BuildEventId targetPatternExpanded(List<String> targetPattern, boolean skipped) {
+    BuildEventId.PatternExpandedId patternId =
+        BuildEventId.PatternExpandedId.newBuilder().addAllPattern(targetPattern).build();
+    BuildEventId.Builder builder = BuildEventId.newBuilder();
+    if (skipped) {
+      builder.setPatternSkipped(patternId);
+    } else {
+      builder.setPattern(patternId);
+    }
+    return builder.build();
+  }
+
+  public static BuildEventId targetPatternExpanded(List<String> targetPattern) {
+    return targetPatternExpanded(targetPattern, false);
+  }
+
+  public static BuildEventId targetPatternSkipped(List<String> targetPattern) {
+    return targetPatternExpanded(targetPattern, true);
+  }
+
+  public static BuildEventId targetConfigured(Label label) {
+    BuildEventId.TargetConfiguredId configuredId =
+        BuildEventId.TargetConfiguredId.newBuilder().setLabel(label.toString()).build();
+    return BuildEventId.newBuilder().setTargetConfigured(configuredId).build();
+  }
+
+  public static BuildEventId aspectConfigured(Label label, String aspect) {
+    BuildEventId.TargetConfiguredId configuredId =
+        BuildEventId.TargetConfiguredId.newBuilder()
+            .setLabel(label.toString())
+            .setAspect(aspect)
+            .build();
+    return BuildEventId.newBuilder().setTargetConfigured(configuredId).build();
+  }
+
+  public static BuildEventId targetCompleted(Label target, BuildEventId configuration) {
+    BuildEventId.ConfigurationId configId = configuration.getConfiguration();
+    BuildEventId.TargetCompletedId targetId =
+        BuildEventId.TargetCompletedId.newBuilder()
+            .setLabel(target.toString())
+            .setConfiguration(configId)
+            .build();
+    return BuildEventId.newBuilder().setTargetCompleted(targetId).build();
+  }
+
+  public static BuildEventId configuredLabelId(Label label, BuildEventId configuration) {
+    BuildEventId.ConfigurationId configId = configuration.getConfiguration();
+    BuildEventId.ConfiguredLabelId labelId =
+        BuildEventId.ConfiguredLabelId.newBuilder()
+            .setLabel(label.toString())
+            .setConfiguration(configId)
+            .build();
+    return BuildEventId.newBuilder().setConfiguredLabel(labelId).build();
+  }
+
+  public static BuildEventId unconfiguredLabelId(Label label) {
+    BuildEventId.UnconfiguredLabelId labelId =
+        BuildEventId.UnconfiguredLabelId.newBuilder().setLabel(label.toString()).build();
+    return BuildEventId.newBuilder().setUnconfiguredLabel(labelId).build();
+  }
+
+  public static BuildEventId aspectCompleted(
+      Label target, BuildEventId configuration, String aspect) {
+    BuildEventId.ConfigurationId configId = configuration.getConfiguration();
+    BuildEventId.TargetCompletedId targetId =
+        BuildEventId.TargetCompletedId.newBuilder()
+            .setLabel(target.toString())
+            .setConfiguration(configId)
+            .setAspect(aspect)
+            .build();
+    return BuildEventId.newBuilder().setTargetCompleted(targetId).build();
+  }
+
+  public static BuildEventId actionCompleted(PathFragment path) {
+    return actionCompleted(path, null, null);
+  }
+
+  public static BuildEventId actionCompleted(
+      PathFragment path, @Nullable Label label, @Nullable String configurationChecksum) {
+    ActionCompletedId.Builder actionId =
+        ActionCompletedId.newBuilder().setPrimaryOutput(path.toString());
+    if (label != null) {
+      actionId.setLabel(label.toString());
+    }
+    if (configurationChecksum != null) {
+      actionId.setConfiguration(ConfigurationId.newBuilder().setId(configurationChecksum));
+    }
+    return BuildEventId.newBuilder().setActionCompleted(actionId).build();
+  }
+
+  public static BuildEventId fromArtifactGroupName(String name) {
+    BuildEventId.NamedSetOfFilesId namedSetId =
+        BuildEventId.NamedSetOfFilesId.newBuilder().setId(name).build();
+    return BuildEventId.newBuilder().setNamedSet(namedSetId).build();
+  }
+
+  public static BuildEventId testResult(
+      Label target, Integer run, Integer shard, Integer attempt, BuildEventId configuration) {
+    BuildEventId.ConfigurationId configId = configuration.getConfiguration();
+    BuildEventId.TestResultId resultId =
+        BuildEventId.TestResultId.newBuilder()
+            .setLabel(target.toString())
+            .setConfiguration(configId)
+            .setRun(run + 1)
+            .setShard(shard + 1)
+            .setAttempt(attempt)
+            .build();
+    return BuildEventId.newBuilder().setTestResult(resultId).build();
+  }
+
+  public static BuildEventId testResult(
+      Label target, Integer run, Integer shard, BuildEventId configuration) {
+    return testResult(target, run, shard, 1, configuration);
+  }
+
+  public static BuildEventId testSummary(Label target, BuildEventId configuration) {
+    BuildEventId.ConfigurationId configId = configuration.getConfiguration();
+    BuildEventId.TestSummaryId summaryId =
+        BuildEventId.TestSummaryId.newBuilder()
+            .setLabel(target.toString())
+            .setConfiguration(configId)
+            .build();
+    return BuildEventId.newBuilder().setTestSummary(summaryId).build();
+  }
+
+  public static BuildEventId buildFinished() {
+    BuildEventId.BuildFinishedId finishedId = BuildEventId.BuildFinishedId.getDefaultInstance();
+    return BuildEventId.newBuilder().setBuildFinished(finishedId).build();
+  }
+
+  public static BuildEventId buildToolLogs() {
+    return BuildEventId.newBuilder()
+        .setBuildToolLogs(BuildEventId.BuildToolLogsId.getDefaultInstance())
+        .build();
+  }
+
+  public static BuildEventId buildMetrics() {
+    return BuildEventId.newBuilder()
+        .setBuildMetrics(BuildEventId.BuildMetricsId.getDefaultInstance())
+        .build();
+  }
+
+  public static BuildEventId convenienceSymlinksIdentifiedId() {
+    return BuildEventId.newBuilder()
+        .setConvenienceSymlinksIdentified(
+            BuildEventId.ConvenienceSymlinksIdentifiedId.getDefaultInstance())
+        .build();
+  }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventWithOrderConstraint.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventWithOrderConstraint.java
index 08cd280..2f7e122 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventWithOrderConstraint.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventWithOrderConstraint.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.buildeventstream;
 
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import java.util.Collection;
 
 /** Interface for {@link BuildEvent}s with order constraints. */
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildToolLogs.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildToolLogs.java
index b99a1b9..0c19d41 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildToolLogs.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildToolLogs.java
@@ -19,6 +19,7 @@
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent.LocalFile.LocalFileCompression;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent.LocalFile.LocalFileType;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.protobuf.ByteString;
@@ -52,7 +53,7 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.buildToolLogs();
+    return BuildEventIdUtil.buildToolLogs();
   }
 
   @Override
@@ -120,7 +121,7 @@
 
   @Override
   public Collection<BuildEventId> postedAfter() {
-    return ImmutableList.of(BuildEventId.buildFinished());
+    return ImmutableList.of(BuildEventIdUtil.buildFinished());
   }
 
   /** A local log file. */
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/ChainableEvent.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/ChainableEvent.java
index 8929624..8ef9917 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/ChainableEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/ChainableEvent.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.buildeventstream;
 
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import java.util.Collection;
 
 /**
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/FetchEvent.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/FetchEvent.java
index a2f836d..7d52aef 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/FetchEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/FetchEvent.java
@@ -15,6 +15,7 @@
 package com.google.devtools.build.lib.buildeventstream;
 
 import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
 import java.util.Collection;
 
@@ -36,12 +37,12 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.fetchId(url);
+    return BuildEventIdUtil.fetchId(url);
   }
 
   @Override
   public Collection<BuildEventId> getChildrenEvents() {
-    return ImmutableList.<BuildEventId>of();
+    return ImmutableList.of();
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/GenericBuildEvent.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/GenericBuildEvent.java
index b9e70ac..ebe620d 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/GenericBuildEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/GenericBuildEvent.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.buildeventstream;
 
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import java.util.Collection;
 
 /**
@@ -44,9 +45,9 @@
   public static BuildEventStreamProtos.BuildEvent.Builder protoChaining(ChainableEvent event) {
     BuildEventStreamProtos.BuildEvent.Builder builder =
         BuildEventStreamProtos.BuildEvent.newBuilder();
-    builder.setId(event.getEventId().asStreamProto());
+    builder.setId(event.getEventId());
     for (BuildEventId childId : event.getChildrenEvents()) {
-      builder.addChildren(childId.asStreamProto());
+      builder.addChildren(childId);
     }
     return builder;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/LastBuildEvent.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/LastBuildEvent.java
index 2beae6a..7751824 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/LastBuildEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/LastBuildEvent.java
@@ -15,6 +15,7 @@
 package com.google.devtools.build.lib.buildeventstream;
 
 import com.google.common.util.concurrent.ListenableFuture;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import java.util.Collection;
 
 /** Wrapper class for a build event marking it as the final event in the protocol. */
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/NullConfiguration.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/NullConfiguration.java
index 669c0eb..f09e02e 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/NullConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/NullConfiguration.java
@@ -15,6 +15,7 @@
 package com.google.devtools.build.lib.buildeventstream;
 
 import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import java.util.Collection;
 
 /**
@@ -26,7 +27,7 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.nullConfigurationId();
+    return BuildEventIdUtil.nullConfigurationId();
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/ProgressEvent.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/ProgressEvent.java
index 06cd27d..a6c8bbf 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventstream/ProgressEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/ProgressEvent.java
@@ -15,6 +15,7 @@
 package com.google.devtools.build.lib.buildeventstream;
 
 import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import java.util.Collection;
 import javax.annotation.Nullable;
 
@@ -31,7 +32,7 @@
   @Nullable private final String err;
 
   /** The {@link BuildEventId} of the first progress event to be reported. */
-  public static final BuildEventId INITIAL_PROGRESS_UPDATE = BuildEventId.progressId(0);
+  public static final BuildEventId INITIAL_PROGRESS_UPDATE = BuildEventIdUtil.progressId(0);
 
   private ProgressEvent(
       BuildEventId id, Collection<BuildEventId> children, String out, String err) {
@@ -54,8 +55,8 @@
 
   /** Create a regular progress update with the given running number. */
   public static BuildEvent progressUpdate(int number, String out, String err) {
-    BuildEventId id = BuildEventId.progressId(number);
-    BuildEventId next = BuildEventId.progressId(number + 1);
+    BuildEventId id = BuildEventIdUtil.progressId(number);
+    BuildEventId next = BuildEventIdUtil.progressId(number + 1);
     return new ProgressEvent(id, ImmutableList.of(next), out, err);
   }
 
@@ -66,8 +67,8 @@
   /** Create a progress update event also chaining in a given id. */
   public static BuildEvent progressChainIn(
       int number, BuildEventId chainIn, String out, String err) {
-    BuildEventId id = BuildEventId.progressId(number);
-    BuildEventId next = BuildEventId.progressId(number + 1);
+    BuildEventId id = BuildEventIdUtil.progressId(number);
+    BuildEventId next = BuildEventIdUtil.progressId(number + 1);
     return new ProgressEvent(id, ImmutableList.of(next, chainIn), out, err);
   }
 
@@ -81,8 +82,8 @@
    */
   public static BuildEvent finalProgressUpdate(
       int number, @Nullable String out, @Nullable String err) {
-    BuildEventId id = BuildEventId.progressId(number);
-    return new ProgressEvent(id, ImmutableList.<BuildEventId>of(), out, err);
+    BuildEventId id = BuildEventIdUtil.progressId(number);
+    return new ProgressEvent(id, ImmutableList.of(), out, err);
   }
 
   public static BuildEvent finalProgressUpdate(int number) {
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/AnalysisPhaseRunner.java b/src/main/java/com/google/devtools/build/lib/buildtool/AnalysisPhaseRunner.java
index 248193e..39a2358 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/AnalysisPhaseRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/AnalysisPhaseRunner.java
@@ -28,7 +28,7 @@
 import com.google.devtools.build.lib.analysis.config.CoreOptions;
 import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
 import com.google.devtools.build.lib.buildeventstream.AbortedEvent;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.Aborted.AbortReason;
 import com.google.devtools.build.lib.buildtool.buildevent.NoAnalyzeEvent;
 import com.google.devtools.build.lib.buildtool.buildevent.TestFilteringCompleteEvent;
@@ -143,7 +143,7 @@
         env.getEventBus()
             .post(
                 new AbortedEvent(
-                    BuildEventId.targetCompleted(label, config.getEventId()),
+                    BuildEventIdUtil.targetCompleted(label, config.getEventId()),
                     AbortReason.SKIPPED,
                     String.format("Target %s build was skipped.", label),
                     label));
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java
index 79913df..6ba91d8 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java
@@ -29,7 +29,7 @@
 import com.google.devtools.build.lib.analysis.WorkspaceStatusAction.DummyEnvironment;
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
 import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildtool.PostAnalysisQueryBuildTool.PostAnalysisQueryCommandLineException;
 import com.google.devtools.build.lib.buildtool.buildevent.BuildCompleteEvent;
 import com.google.devtools.build.lib.buildtool.buildevent.BuildInterruptedEvent;
@@ -411,7 +411,8 @@
         .post(
             new BuildCompleteEvent(
                 result,
-                ImmutableList.of(BuildEventId.buildToolLogs(), BuildEventId.buildMetrics())));
+                ImmutableList.of(
+                    BuildEventIdUtil.buildToolLogs(), BuildEventIdUtil.buildMetrics())));
     // Post the build tool logs event; the corresponding local files may be contributed from
     // modules, and this has to happen after posting the BuildCompleteEvent because that's when
     // modules add their data to the collection.
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/BuildCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/BuildCompleteEvent.java
index c4b6744..04dc81b 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/BuildCompleteEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/BuildCompleteEvent.java
@@ -18,7 +18,7 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.buildeventstream.BuildCompletingEvent;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildtool.BuildResult;
 import java.util.Collection;
 
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/BuildStartingEvent.java b/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/BuildStartingEvent.java
index 12a1c4a..b62ebc3 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/BuildStartingEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/BuildStartingEvent.java
@@ -18,8 +18,9 @@
 import com.google.devtools.build.lib.analysis.BlazeVersionInfo;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import com.google.devtools.build.lib.buildeventstream.ProgressEvent;
 import com.google.devtools.build.lib.buildtool.BuildRequest;
@@ -77,22 +78,22 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.buildStartedId();
+    return BuildEventIdUtil.buildStartedId();
   }
 
   @Override
   public Collection<BuildEventId> getChildrenEvents() {
     return ImmutableList.of(
         ProgressEvent.INITIAL_PROGRESS_UPDATE,
-        BuildEventId.unstructuredCommandlineId(),
-        BuildEventId.structuredCommandlineId(CommandLineEvent.OriginalCommandLineEvent.LABEL),
-        BuildEventId.structuredCommandlineId(CommandLineEvent.CanonicalCommandLineEvent.LABEL),
-        BuildEventId.structuredCommandlineId(CommandLineEvent.ToolCommandLineEvent.LABEL),
-        BuildEventId.buildMetadataId(),
-        BuildEventId.optionsParsedId(),
-        BuildEventId.workspaceStatusId(),
-        BuildEventId.targetPatternExpanded(request.getTargets()),
-        BuildEventId.buildFinished());
+        BuildEventIdUtil.unstructuredCommandlineId(),
+        BuildEventIdUtil.structuredCommandlineId(CommandLineEvent.OriginalCommandLineEvent.LABEL),
+        BuildEventIdUtil.structuredCommandlineId(CommandLineEvent.CanonicalCommandLineEvent.LABEL),
+        BuildEventIdUtil.structuredCommandlineId(CommandLineEvent.ToolCommandLineEvent.LABEL),
+        BuildEventIdUtil.buildMetadataId(),
+        BuildEventIdUtil.optionsParsedId(),
+        BuildEventIdUtil.workspaceStatusId(),
+        BuildEventIdUtil.targetPatternExpanded(request.getTargets()),
+        BuildEventIdUtil.buildFinished());
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/ConvenienceSymlinksIdentifiedEvent.java b/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/ConvenienceSymlinksIdentifiedEvent.java
index 66ef8a2..f743b99 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/ConvenienceSymlinksIdentifiedEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/ConvenienceSymlinksIdentifiedEvent.java
@@ -16,8 +16,9 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.ConvenienceSymlink;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import java.util.Collection;
@@ -39,7 +40,7 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.convenienceSymlinksIdentifiedId();
+    return BuildEventIdUtil.convenienceSymlinksIdentifiedId();
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/TestingCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/TestingCompleteEvent.java
index d98ee79..dbb28a6 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/TestingCompleteEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/buildevent/TestingCompleteEvent.java
@@ -16,7 +16,8 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.buildeventstream.BuildCompletingEvent;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
 import com.google.devtools.build.lib.util.ExitCode;
 
 /**
@@ -34,6 +35,10 @@
    * @param wasSuspended was the build suspended at any point.
    */
   public TestingCompleteEvent(ExitCode exitCode, long finishTimeMillis, boolean wasSuspended) {
-    super(exitCode, finishTimeMillis, ImmutableList.of(BuildEventId.buildToolLogs()), wasSuspended);
+    super(
+        exitCode,
+        finishTimeMillis,
+        ImmutableList.of(BuildEventIdUtil.buildToolLogs()),
+        wasSuspended);
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/exec/TestAttempt.java b/src/main/java/com/google/devtools/build/lib/exec/TestAttempt.java
index 3edce54..3b5e295 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/TestAttempt.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/TestAttempt.java
@@ -21,8 +21,9 @@
 import com.google.devtools.build.lib.analysis.test.TestRunnerAction;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent.LocalFile.LocalFileType;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.TestStatus;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithOrderConstraint;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
@@ -163,7 +164,7 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.testResult(
+    return BuildEventIdUtil.testResult(
         testAction.getOwner().getLabel(),
         testAction.getRunNumber(),
         testAction.getShardNum(),
@@ -174,7 +175,7 @@
   @Override
   public Collection<BuildEventId> postedAfter() {
     return ImmutableList.of(
-        BuildEventId.targetCompleted(
+        BuildEventIdUtil.targetCompleted(
             testAction.getOwner().getLabel(), testAction.getConfiguration().getEventId()));
   }
 
@@ -184,7 +185,7 @@
       return ImmutableList.of();
     } else {
       return ImmutableList.of(
-          BuildEventId.testResult(
+          BuildEventIdUtil.testResult(
               testAction.getOwner().getLabel(),
               testAction.getRunNumber(),
               testAction.getShardNum(),
diff --git a/src/main/java/com/google/devtools/build/lib/metrics/BuildMetricsEvent.java b/src/main/java/com/google/devtools/build/lib/metrics/BuildMetricsEvent.java
index ec22aca..c3a6c6f 100644
--- a/src/main/java/com/google/devtools/build/lib/metrics/BuildMetricsEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/metrics/BuildMetricsEvent.java
@@ -15,8 +15,9 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildMetrics;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithOrderConstraint;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
@@ -36,7 +37,7 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.buildMetrics();
+    return BuildEventIdUtil.buildMetrics();
   }
 
   @Override
@@ -55,6 +56,6 @@
 
   @Override
   public Collection<BuildEventId> postedAfter() {
-    return ImmutableList.of(BuildEventId.buildFinished());
+    return ImmutableList.of(BuildEventIdUtil.buildFinished());
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java
index 77ea664..bc1bc9f 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java
@@ -20,8 +20,9 @@
 import com.google.common.collect.ImmutableSetMultimap;
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithOrderConstraint;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import com.google.devtools.build.lib.cmdline.Label;
@@ -164,12 +165,12 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.targetPatternExpanded(originalTargetPattern);
+    return BuildEventIdUtil.targetPatternExpanded(originalTargetPattern);
   }
 
   @Override
   public Collection<BuildEventId> postedAfter() {
-    return ImmutableList.<BuildEventId>of(BuildEventId.buildStartedId());
+    return ImmutableList.of(BuildEventIdUtil.buildStartedId());
   }
 
   @Override
@@ -177,13 +178,13 @@
     ImmutableList.Builder<BuildEventId> childrenBuilder = ImmutableList.builder();
     for (String failedTargetPattern : failedTargetPatterns) {
       childrenBuilder.add(
-          BuildEventId.targetPatternExpanded(ImmutableList.of(failedTargetPattern)));
+          BuildEventIdUtil.targetPatternExpanded(ImmutableList.of(failedTargetPattern)));
     }
     for (ThinTarget target : expandedTargets) {
       // Test suits won't produce target configuration and  target-complete events, so do not
       // announce here completion as children.
       if (!target.isTestSuiteRule()) {
-        childrenBuilder.add(BuildEventId.targetConfigured(target.getLabel()));
+        childrenBuilder.add(BuildEventIdUtil.targetConfigured(target.getLabel()));
       }
     }
     return childrenBuilder.build();
diff --git a/src/main/java/com/google/devtools/build/lib/repository/RepositoryFailedEvent.java b/src/main/java/com/google/devtools/build/lib/repository/RepositoryFailedEvent.java
index 41112dd..a6e84f6 100644
--- a/src/main/java/com/google/devtools/build/lib/repository/RepositoryFailedEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/repository/RepositoryFailedEvent.java
@@ -18,8 +18,9 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
@@ -51,11 +52,12 @@
     }
     try {
       Label label = Label.create(EXTERNAL_PACKAGE_IDENTIFIER, strippedRepoName);
-      return BuildEventId.unconfiguredLabelId(label);
+      return BuildEventIdUtil.unconfiguredLabelId(label);
     } catch (LabelSyntaxException e) {
       // As the repository name was accepted earlier, the label construction really shouldn't fail.
       // In any case, return something still referring to the repository.
-      return BuildEventId.unknownBuildEventId(EXTERNAL_PACKAGE_IDENTIFIER + ":" + strippedRepoName);
+      return BuildEventIdUtil.unknownBuildEventId(
+          EXTERNAL_PACKAGE_IDENTIFIER + ":" + strippedRepoName);
     }
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java b/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java
index 1ef064d..092e132 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java
@@ -39,9 +39,10 @@
 import com.google.devtools.build.lib.buildeventstream.AbortedEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildCompletingEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.Aborted.AbortReason;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventTransport;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithConfiguration;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithOrderConstraint;
@@ -287,19 +288,17 @@
    * {@link BuildCompletingEvent} that caused the early end of the stream.
    */
   private synchronized void clearMissingStartEvent(BuildEventId id) {
-    if (pendingEvents.containsKey(BuildEventId.buildStartedId())) {
-      ImmutableSet.Builder<BuildEventId> children = ImmutableSet.<BuildEventId>builder();
+    if (pendingEvents.containsKey(BuildEventIdUtil.buildStartedId())) {
+      ImmutableSet.Builder<BuildEventId> children = ImmutableSet.builder();
       children.add(ProgressEvent.INITIAL_PROGRESS_UPDATE);
       children.add(id);
       children.addAll(
-          pendingEvents
-              .get(BuildEventId.buildStartedId())
-              .stream()
+          pendingEvents.get(BuildEventIdUtil.buildStartedId()).stream()
               .map(BuildEvent::getEventId)
-              .collect(ImmutableSet.<BuildEventId>toImmutableSet()));
+              .collect(ImmutableSet.toImmutableSet()));
       buildEvent(
           new AbortedEvent(
-              BuildEventId.buildStartedId(),
+              BuildEventIdUtil.buildStartedId(),
               children.build(),
               getLastAbortReason(),
               getAbortReasonDetails()));
@@ -466,7 +465,7 @@
     }
 
     if (event instanceof BuildCompletingEvent
-        && !event.getEventId().equals(BuildEventId.buildStartedId())) {
+        && !event.getEventId().equals(BuildEventIdUtil.buildStartedId())) {
       clearMissingStartEvent(event.getEventId());
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BuildMetadataEvent.java b/src/main/java/com/google/devtools/build/lib/runtime/BuildMetadataEvent.java
index 542e76c..099571f 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BuildMetadataEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BuildMetadataEvent.java
@@ -16,8 +16,9 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithOrderConstraint;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import java.util.Collection;
@@ -42,7 +43,7 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.buildMetadataId();
+    return BuildEventIdUtil.buildMetadataId();
   }
 
   @Override
@@ -62,6 +63,6 @@
 
   @Override
   public Collection<BuildEventId> postedAfter() {
-    return ImmutableList.of(BuildEventId.buildStartedId());
+    return ImmutableList.of(BuildEventIdUtil.buildStartedId());
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CommandLineEvent.java b/src/main/java/com/google/devtools/build/lib/runtime/CommandLineEvent.java
index 8a05b4b..cc439f3 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/CommandLineEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/CommandLineEvent.java
@@ -17,9 +17,10 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.io.BaseEncoding;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEvent;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithOrderConstraint;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import com.google.devtools.build.lib.runtime.proto.CommandLineOuterClass.ChunkList;
@@ -55,7 +56,7 @@
 
   @Override
   public Collection<BuildEventId> postedAfter() {
-    return ImmutableList.of(BuildEventId.buildStartedId());
+    return ImmutableList.of(BuildEventIdUtil.buildStartedId());
   }
 
   /** A CommandLineEvent that stores functions and values common to both Bazel command lines. */
@@ -221,7 +222,7 @@
 
     @Override
     public BuildEventId getEventId() {
-      return BuildEventId.structuredCommandlineId(LABEL);
+      return BuildEventIdUtil.structuredCommandlineId(LABEL);
     }
 
     /**
@@ -315,7 +316,7 @@
 
     @Override
     public BuildEventId getEventId() {
-      return BuildEventId.structuredCommandlineId(LABEL);
+      return BuildEventIdUtil.structuredCommandlineId(LABEL);
     }
 
     /**
@@ -425,7 +426,7 @@
      */
     @Override
     public BuildEventId getEventId() {
-      return BuildEventId.structuredCommandlineId(LABEL);
+      return BuildEventIdUtil.structuredCommandlineId(LABEL);
     }
 
     /**
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/ExecRootEvent.java b/src/main/java/com/google/devtools/build/lib/runtime/ExecRootEvent.java
index d6588bb..371c804 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/ExecRootEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/ExecRootEvent.java
@@ -17,8 +17,9 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.vfs.Path;
 import java.util.Collection;
 
@@ -38,14 +39,14 @@
             .setLocalExecRoot(execRoot.getPathString())
             .build();
     return BuildEventStreamProtos.BuildEvent.newBuilder()
-        .setId(getEventId().asStreamProto())
+        .setId(getEventId())
         .setWorkspaceInfo(workspaceConfigEvent)
         .build();
   }
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.workspaceConfigId();
+    return BuildEventIdUtil.workspaceConfigId();
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/GotOptionsEvent.java b/src/main/java/com/google/devtools/build/lib/runtime/GotOptionsEvent.java
index 7acbc16..ed87be5 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/GotOptionsEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/GotOptionsEvent.java
@@ -16,8 +16,9 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithOrderConstraint;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy;
@@ -65,7 +66,7 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.optionsParsedId();
+    return BuildEventIdUtil.optionsParsedId();
   }
 
   @Override
@@ -104,6 +105,6 @@
   @Override
   public Collection<BuildEventId> postedAfter() {
     return ImmutableList.of(
-        BuildEventId.buildStartedId(), BuildEventId.unstructuredCommandlineId());
+        BuildEventIdUtil.buildStartedId(), BuildEventIdUtil.unstructuredCommandlineId());
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/NamedArtifactGroup.java b/src/main/java/com/google/devtools/build/lib/runtime/NamedArtifactGroup.java
index 9db64ab..931142e 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/NamedArtifactGroup.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/NamedArtifactGroup.java
@@ -26,8 +26,9 @@
 import com.google.devtools.build.lib.buildeventstream.BuildEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent.LocalFile.LocalFileType;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import com.google.devtools.build.lib.buildeventstream.PathConverter;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetView;
@@ -59,7 +60,7 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.fromArtifactGroupName(name);
+    return BuildEventIdUtil.fromArtifactGroupName(name);
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/OriginalUnstructuredCommandLineEvent.java b/src/main/java/com/google/devtools/build/lib/runtime/OriginalUnstructuredCommandLineEvent.java
index 4dd4ad0..ea9784c 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/OriginalUnstructuredCommandLineEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/OriginalUnstructuredCommandLineEvent.java
@@ -16,8 +16,9 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithOrderConstraint;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import java.util.Collection;
@@ -34,7 +35,7 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.unstructuredCommandlineId();
+    return BuildEventIdUtil.unstructuredCommandlineId();
   }
 
   @Override
@@ -44,7 +45,7 @@
 
   @Override
   public Collection<BuildEventId> postedAfter() {
-    return ImmutableList.of(BuildEventId.buildStartedId());
+    return ImmutableList.of(BuildEventIdUtil.buildStartedId());
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/TestSummary.java b/src/main/java/com/google/devtools/build/lib/runtime/TestSummary.java
index 4e40f2c..b4acc09 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/TestSummary.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/TestSummary.java
@@ -25,8 +25,9 @@
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent.LocalFile.LocalFileType;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithOrderConstraint;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import com.google.devtools.build.lib.buildeventstream.PathConverter;
@@ -530,9 +531,9 @@
 
   @Override
   public BuildEventId getEventId() {
-    return BuildEventId.testSummary(
+    return BuildEventIdUtil.testSummary(
         AliasProvider.getDependencyLabel(target),
-        BuildEventId.configurationId(target.getConfigurationChecksum()));
+        BuildEventIdUtil.configurationId(target.getConfigurationChecksum()));
   }
 
   @Override
@@ -543,9 +544,9 @@
   @Override
   public Collection<BuildEventId> postedAfter() {
     return ImmutableList.of(
-        BuildEventId.targetCompleted(
+        BuildEventIdUtil.targetCompleted(
             AliasProvider.getDependencyLabel(target),
-            BuildEventId.configurationId(target.getConfigurationChecksum())));
+            BuildEventIdUtil.configurationId(target.getConfigurationChecksum())));
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
index aa6078d..32d1d44 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
@@ -709,7 +709,7 @@
    */
   public static final class AspectCreationException extends Exception {
     private static ConfigurationId toId(BuildConfiguration config) {
-      return config == null ? null : config.getEventId().asStreamProto().getConfiguration();
+      return config == null ? null : config.getEventId().getConfiguration();
     }
 
     private final NestedSet<Cause> causes;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/CompletionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/CompletionFunction.java
index ff58a54..a92fee0 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/CompletionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/CompletionFunction.java
@@ -31,7 +31,8 @@
 import com.google.devtools.build.lib.analysis.TopLevelArtifactHelper;
 import com.google.devtools.build.lib.analysis.TopLevelArtifactHelper.ArtifactsInOutputGroup;
 import com.google.devtools.build.lib.analysis.TopLevelArtifactHelper.ArtifactsToBuild;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.causes.Cause;
 import com.google.devtools.build.lib.causes.LabelCause;
 import com.google.devtools.build.lib.cmdline.Label;
@@ -245,7 +246,7 @@
     private BuildEventId getConfigurationEventIdFromAspectValue(AspectValue value, Environment env)
         throws InterruptedException {
       if (value.getKey().getBaseConfiguredTargetKey().getConfigurationKey() == null) {
-        return BuildEventId.nullConfigurationId();
+        return BuildEventIdUtil.nullConfigurationId();
       } else {
         BuildConfigurationValue buildConfigurationValue =
             (BuildConfigurationValue)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index 4ddb6d5..194cc92 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -46,7 +46,7 @@
 import com.google.devtools.build.lib.analysis.configuredtargets.MergedConfiguredTarget.DuplicateException;
 import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget;
 import com.google.devtools.build.lib.analysis.skylark.StarlarkTransition.TransitionException;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId.ConfigurationId;
 import com.google.devtools.build.lib.causes.AnalysisFailedCause;
 import com.google.devtools.build.lib.causes.Cause;
@@ -974,7 +974,7 @@
   @AutoCodec
   public static final class ConfiguredValueCreationException extends Exception {
     private static ConfigurationId toId(BuildConfiguration config) {
-      return config == null ? null : config.getEventId().asStreamProto().getConfiguration();
+      return config == null ? null : config.getEventId().getConfiguration();
     }
 
     @Nullable private final BuildEventId configuration;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PatternExpandingError.java b/src/main/java/com/google/devtools/build/lib/skyframe/PatternExpandingError.java
index b6145a5..2b04458 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PatternExpandingError.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PatternExpandingError.java
@@ -16,8 +16,9 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
 import java.util.Collection;
 import java.util.List;
@@ -60,15 +61,15 @@
   @Override
   public BuildEventId getEventId() {
     if (skipped) {
-      return BuildEventId.targetPatternSkipped(pattern);
+      return BuildEventIdUtil.targetPatternSkipped(pattern);
     } else {
-      return BuildEventId.targetPatternExpanded(pattern);
+      return BuildEventIdUtil.targetPatternExpanded(pattern);
     }
   }
 
   @Override
   public Collection<BuildEventId> getChildrenEvents() {
-    return ImmutableList.<BuildEventId>of();
+    return ImmutableList.of();
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/KnownConfigurations.java b/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/KnownConfigurations.java
index 7978336..da8d798 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/KnownConfigurations.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/KnownConfigurations.java
@@ -30,7 +30,7 @@
     BuildEventStreamProtos.Configuration configProto =
         config.asStreamProto(/*context=*/ null).getConfiguration();
     return AnalysisProtos.Configuration.newBuilder()
-        .setChecksum(config.getEventId().asStreamProto().getConfiguration().getId())
+        .setChecksum(config.getEventId().getConfiguration().getId())
         .setMnemonic(configProto.getMnemonic())
         .setPlatformName(configProto.getPlatformName())
         .setId(id)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/KnownConfigurations.java b/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/KnownConfigurations.java
index 0b2bc48..a2013c9 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/KnownConfigurations.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/KnownConfigurations.java
@@ -30,7 +30,7 @@
     BuildEventStreamProtos.Configuration configProto =
         config.asStreamProto(/*context=*/ null).getConfiguration();
     return Configuration.newBuilder()
-        .setChecksum(config.getEventId().asStreamProto().getConfiguration().getId())
+        .setChecksum(config.getEventId().getConfiguration().getId())
         .setMnemonic(configProto.getMnemonic())
         .setPlatformName(configProto.getPlatformName())
         .setId(id)
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisFailureReportingTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisFailureReportingTest.java
index 3c33512..9df3820 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisFailureReportingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisFailureReportingTest.java
@@ -57,7 +57,7 @@
   }
 
   private static ConfigurationId toId(BuildConfiguration config) {
-    return config == null ? null : config.getEventId().asStreamProto().getConfiguration();
+    return config == null ? null : config.getEventId().getConfiguration();
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/buildeventstream/LastBuildEventTest.java b/src/test/java/com/google/devtools/build/lib/buildeventstream/LastBuildEventTest.java
index a737ab9..2062c57 100644
--- a/src/test/java/com/google/devtools/build/lib/buildeventstream/LastBuildEventTest.java
+++ b/src/test/java/com/google/devtools/build/lib/buildeventstream/LastBuildEventTest.java
@@ -18,6 +18,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent.LocalFile;
 import com.google.devtools.build.lib.buildeventstream.BuildEvent.LocalFile.LocalFileType;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.unix.UnixFileSystem;
 import com.google.devtools.build.lib.vfs.DigestHashFunction;
 import com.google.devtools.build.lib.vfs.FileSystem;
diff --git a/src/test/java/com/google/devtools/build/lib/buildeventstream/transports/BinaryFormatFileTransportTest.java b/src/test/java/com/google/devtools/build/lib/buildeventstream/transports/BinaryFormatFileTransportTest.java
index 289c23c..f5ca2f9 100644
--- a/src/test/java/com/google/devtools/build/lib/buildeventstream/transports/BinaryFormatFileTransportTest.java
+++ b/src/test/java/com/google/devtools/build/lib/buildeventstream/transports/BinaryFormatFileTransportTest.java
@@ -31,9 +31,10 @@
 import com.google.devtools.build.lib.buildeventstream.BuildEvent.LocalFile.LocalFileType;
 import com.google.devtools.build.lib.buildeventstream.BuildEventArtifactUploader;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventProtocolOptions;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildStarted;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.Progress;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.TargetComplete;
@@ -395,7 +396,7 @@
     @Override
     public BuildEventStreamProtos.BuildEvent asStreamProto(BuildEventContext context) {
       return BuildEventStreamProtos.BuildEvent.newBuilder()
-          .setId(BuildEventId.progressId(id).asStreamProto())
+          .setId(BuildEventIdUtil.progressId(id))
           .setProgress(
               BuildEventStreamProtos.Progress.newBuilder()
                   .setStdout(
@@ -409,12 +410,12 @@
 
     @Override
     public BuildEventId getEventId() {
-      return BuildEventId.progressId(id);
+      return BuildEventIdUtil.progressId(id);
     }
 
     @Override
     public Collection<BuildEventId> getChildrenEvents() {
-      return ImmutableList.of(BuildEventId.progressId(id + 1));
+      return ImmutableList.of(BuildEventIdUtil.progressId(id + 1));
     }
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
index d78c92a..94b80d4 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
@@ -46,10 +46,11 @@
 import com.google.devtools.build.lib.buildeventstream.BuildEvent;
 import com.google.devtools.build.lib.buildeventstream.BuildEventArtifactUploader;
 import com.google.devtools.build.lib.buildeventstream.BuildEventContext;
-import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventProtocolOptions;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.Aborted.AbortReason;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId.NamedSetOfFilesId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.File;
 import com.google.devtools.build.lib.buildeventstream.BuildEventTransport;
@@ -321,7 +322,7 @@
   }
 
   private static BuildEventId testId(String opaque) {
-    return BuildEventId.unknownBuildEventId(opaque);
+    return BuildEventIdUtil.unknownBuildEventId(opaque);
   }
 
   private static class EventBusHandler {
@@ -359,8 +360,9 @@
 
     BuildEvent startEvent =
         new GenericBuildEvent(
-            testId("Initial"), ImmutableSet.of(ProgressEvent.INITIAL_PROGRESS_UPDATE,
-            BuildEventId.buildFinished()));
+            testId("Initial"),
+            ImmutableSet.of(
+                ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventIdUtil.buildFinished()));
 
     streamer.buildEvent(startEvent);
 
@@ -379,7 +381,8 @@
     assertThat(finalStream).hasSize(3);
     assertThat(ImmutableSet.of(finalStream.get(1).getEventId(), finalStream.get(2).getEventId()))
         .isEqualTo(
-            ImmutableSet.of(BuildEventId.buildFinished(), ProgressEvent.INITIAL_PROGRESS_UPDATE));
+            ImmutableSet.of(
+                BuildEventIdUtil.buildFinished(), ProgressEvent.INITIAL_PROGRESS_UPDATE));
 
     // verify the "last_message" flag.
     assertThat(transport.getEventProtos().get(0).getLastMessage()).isFalse();
@@ -463,8 +466,8 @@
     BuildEvent startEvent =
         new GenericBuildEvent(
             testId("Initial"),
-            ImmutableSet.<BuildEventId>of(ProgressEvent.INITIAL_PROGRESS_UPDATE,
-                BuildEventId.buildFinished()));
+            ImmutableSet.<BuildEventId>of(
+                ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventIdUtil.buildFinished()));
     BuildEvent earlyEvent =
         new GenericBuildEvent(testId("unexpected"), ImmutableSet.<BuildEventId>of());
     BuildEvent lateReference =
@@ -532,7 +535,8 @@
     BuildEvent startEvent =
         new GenericBuildEvent(
             testId("Initial"),
-            ImmutableSet.of(ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventId.buildFinished()));
+            ImmutableSet.of(
+                ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventIdUtil.buildFinished()));
     streamer.buildEvent(startEvent);
 
     int numThreads = 12;
@@ -589,7 +593,8 @@
       BuildEvent startEvent =
           new GenericBuildEvent(
               testId("Initial"),
-              ImmutableSet.of(ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventId.buildFinished()));
+              ImmutableSet.of(
+                  ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventIdUtil.buildFinished()));
       streamer.buildEvent(startEvent);
 
       int numThreads = 12;
@@ -640,8 +645,10 @@
     BuildEvent startEvent =
         new GenericBuildEvent(
             testId("Initial"),
-            ImmutableSet.<BuildEventId>of(ProgressEvent.INITIAL_PROGRESS_UPDATE, expectedId,
-                BuildEventId.buildFinished()));
+            ImmutableSet.<BuildEventId>of(
+                ProgressEvent.INITIAL_PROGRESS_UPDATE,
+                expectedId,
+                BuildEventIdUtil.buildFinished()));
     BuildEventId rootCauseId = testId("failure event");
     BuildEvent failedTarget =
         new GenericOrderEvent(expectedId, ImmutableSet.<BuildEventId>of(rootCauseId));
@@ -654,7 +661,7 @@
     List<BuildEvent> allEventsSeen = transport.getEvents();
     assertThat(allEventsSeen).hasSize(6);
     assertThat(allEventsSeen.get(0).getEventId()).isEqualTo(startEvent.getEventId());
-    assertThat(allEventsSeen.get(1).getEventId()).isEqualTo(BuildEventId.buildFinished());
+    assertThat(allEventsSeen.get(1).getEventId()).isEqualTo(BuildEventIdUtil.buildFinished());
     BuildEvent linkEvent = allEventsSeen.get(2);
     assertThat(linkEvent.getEventId()).isEqualTo(ProgressEvent.INITIAL_PROGRESS_UPDATE);
     assertThat(allEventsSeen.get(3).getEventId()).isEqualTo(rootCauseId);
@@ -888,9 +895,9 @@
     assertThat(allEventsSeen.get(0).getEventId()).isEqualTo(startEvent.getEventId());
     assertThat(allEventsSeen.get(1).getEventId()).isEqualTo(ProgressEvent.INITIAL_PROGRESS_UPDATE);
     assertThat(allEventsSeen.get(2)).isEqualTo(configuration.toBuildEvent());
-    assertThat(allEventsSeen.get(3).getEventId()).isEqualTo(BuildEventId.progressId(1));
+    assertThat(allEventsSeen.get(3).getEventId()).isEqualTo(BuildEventIdUtil.progressId(1));
     assertThat(allEventsSeen.get(4)).isEqualTo(firstWithConfiguration);
-    assertThat(allEventsSeen.get(5).getEventId()).isEqualTo(BuildEventId.progressId(2));
+    assertThat(allEventsSeen.get(5).getEventId()).isEqualTo(BuildEventIdUtil.progressId(2));
     assertThat(allEventsSeen.get(6)).isEqualTo(secondWithConfiguration);
   }
 
@@ -1071,7 +1078,7 @@
         new GenericOrderEvent(
             testId("event depending on start"),
             ImmutableList.of(),
-            ImmutableList.of(BuildEventId.buildStartedId()));
+            ImmutableList.of(BuildEventIdUtil.buildStartedId()));
 
     streamer.buildEvent(orderEvent);
     streamer.buildEvent(new BuildCompleteEvent(new BuildResult(0)));
@@ -1079,11 +1086,12 @@
     assertThat(streamer.isClosed()).isTrue();
     List<BuildEvent> eventsSeen = transport.getEvents();
     assertThat(eventsSeen).hasSize(4);
-    assertThat(eventsSeen.get(0).getEventId()).isEqualTo(BuildEventId.buildStartedId());
+    assertThat(eventsSeen.get(0).getEventId()).isEqualTo(BuildEventIdUtil.buildStartedId());
     assertThat(eventsSeen.get(1).getEventId()).isEqualTo(orderEvent.getEventId());
     assertThat(ImmutableSet.of(eventsSeen.get(2).getEventId(), eventsSeen.get(3).getEventId()))
         .isEqualTo(
-            ImmutableSet.of(BuildEventId.buildFinished(), ProgressEvent.INITIAL_PROGRESS_UPDATE));
+            ImmutableSet.of(
+                BuildEventIdUtil.buildFinished(), ProgressEvent.INITIAL_PROGRESS_UPDATE));
     assertThat(transport.getEventProtos().get(3).getLastMessage()).isTrue();
   }
 
@@ -1094,7 +1102,8 @@
     BuildEvent startEvent =
         new GenericBuildEvent(
             testId("Initial"),
-            ImmutableSet.of(ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventId.buildFinished()));
+            ImmutableSet.of(
+                ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventIdUtil.buildFinished()));
     BuildEventId lateId = testId("late event");
     BuildEvent finishedEvent = new BuildCompleteEvent(new BuildResult(0), ImmutableList.of(lateId));
 
@@ -1107,7 +1116,7 @@
     List<BuildEvent> eventsSeen = transport.getEvents();
     assertThat(eventsSeen).hasSize(4);
     assertThat(eventsSeen.get(0).getEventId()).isEqualTo(startEvent.getEventId());
-    assertThat(eventsSeen.get(1).getEventId()).isEqualTo(BuildEventId.buildFinished());
+    assertThat(eventsSeen.get(1).getEventId()).isEqualTo(BuildEventIdUtil.buildFinished());
     assertThat(ImmutableSet.of(eventsSeen.get(2).getEventId(), eventsSeen.get(3).getEventId()))
         .isEqualTo(ImmutableSet.of(lateId, ProgressEvent.INITIAL_PROGRESS_UPDATE));
   }
@@ -1120,21 +1129,22 @@
     BuildEvent startEvent =
         new GenericBuildEvent(
             testId("Initial"),
-            ImmutableSet.of(ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventId.buildFinished()));
+            ImmutableSet.of(
+                ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventIdUtil.buildFinished()));
     BuildEventId lateId = testId("late event");
     BuildEvent finishedEvent = new BuildCompleteEvent(new BuildResult(0), ImmutableList.of(lateId));
 
     streamer.buildEvent(startEvent);
     streamer.buildEvent(
         new GenericOrderEvent(
-            lateId, ImmutableSet.of(), ImmutableList.of(BuildEventId.buildFinished())));
+            lateId, ImmutableSet.of(), ImmutableList.of(BuildEventIdUtil.buildFinished())));
     streamer.buildEvent(finishedEvent);
     assertThat(streamer.isClosed()).isTrue();
 
     List<BuildEvent> eventsSeen = transport.getEvents();
     assertThat(eventsSeen).hasSize(4);
     assertThat(eventsSeen.get(0).getEventId()).isEqualTo(startEvent.getEventId());
-    assertThat(eventsSeen.get(1).getEventId()).isEqualTo(BuildEventId.buildFinished());
+    assertThat(eventsSeen.get(1).getEventId()).isEqualTo(BuildEventIdUtil.buildFinished());
     assertThat(ImmutableSet.of(eventsSeen.get(2).getEventId(), eventsSeen.get(3).getEventId()))
         .isEqualTo(ImmutableSet.of(lateId, ProgressEvent.INITIAL_PROGRESS_UPDATE));
   }
@@ -1206,9 +1216,11 @@
     BuildEventId buildEventId = testId("abort_expected");
     BuildEvent startEvent =
         new GenericBuildEvent(
-            BuildEventId.buildStartedId(),
+            BuildEventIdUtil.buildStartedId(),
             ImmutableSet.of(
-                buildEventId, ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventId.buildFinished()));
+                buildEventId,
+                ProgressEvent.INITIAL_PROGRESS_UPDATE,
+                BuildEventIdUtil.buildFinished()));
     BuildCompleteEvent buildCompleteEvent =
         buildCompleteEvent(ExitCode.BUILD_FAILURE, true, null, false);
 
@@ -1228,9 +1240,11 @@
     BuildEventId buildEventId = testId("abort_expected");
     BuildEvent startEvent =
         new GenericBuildEvent(
-            BuildEventId.buildStartedId(),
+            BuildEventIdUtil.buildStartedId(),
             ImmutableSet.of(
-                buildEventId, ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventId.buildFinished()));
+                buildEventId,
+                ProgressEvent.INITIAL_PROGRESS_UPDATE,
+                BuildEventIdUtil.buildFinished()));
     BuildCompleteEvent buildCompleteEvent =
         buildCompleteEvent(ExitCode.BUILD_FAILURE, true, new RuntimeException(), false);
 
@@ -1250,9 +1264,11 @@
     BuildEventId buildEventId = testId("abort_expected");
     BuildEvent startEvent =
         new GenericBuildEvent(
-            BuildEventId.buildStartedId(),
+            BuildEventIdUtil.buildStartedId(),
             ImmutableSet.of(
-                buildEventId, ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventId.buildFinished()));
+                buildEventId,
+                ProgressEvent.INITIAL_PROGRESS_UPDATE,
+                BuildEventIdUtil.buildFinished()));
     BuildCompleteEvent buildCompleteEvent =
         buildCompleteEvent(ExitCode.BUILD_FAILURE, true, null, true);
 
@@ -1272,9 +1288,11 @@
     BuildEventId buildEventId = testId("abort_expected");
     BuildEvent startEvent =
         new GenericBuildEvent(
-            BuildEventId.buildStartedId(),
+            BuildEventIdUtil.buildStartedId(),
             ImmutableSet.of(
-                buildEventId, ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventId.buildFinished()));
+                buildEventId,
+                ProgressEvent.INITIAL_PROGRESS_UPDATE,
+                BuildEventIdUtil.buildFinished()));
 
     streamer.buildEvent(startEvent);
     streamer.close(AbortReason.TIME_OUT);
@@ -1285,7 +1303,7 @@
     assertThat(aborted0.getAborted().getReason()).isEqualTo(AbortReason.TIME_OUT);
     assertThat(aborted0.getAborted().getDescription()).isEmpty();
 
-    BuildEventStreamProtos.BuildEvent aborted1 = getBepEvent(BuildEventId.buildFinished());
+    BuildEventStreamProtos.BuildEvent aborted1 = getBepEvent(BuildEventIdUtil.buildFinished());
     assertThat(aborted1).isNotNull();
     assertThat(aborted1.hasAborted()).isNotNull();
     assertThat(aborted1.getAborted().getReason()).isEqualTo(AbortReason.TIME_OUT);
@@ -1297,9 +1315,11 @@
     BuildEventId buildEventId = testId("abort_expected");
     BuildEvent startEvent =
         new GenericBuildEvent(
-            BuildEventId.buildStartedId(),
+            BuildEventIdUtil.buildStartedId(),
             ImmutableSet.of(
-                buildEventId, ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventId.buildFinished()));
+                buildEventId,
+                ProgressEvent.INITIAL_PROGRESS_UPDATE,
+                BuildEventIdUtil.buildFinished()));
     BuildCompleteEvent buildCompleteEvent =
         buildCompleteEvent(ExitCode.BUILD_FAILURE, false, new RuntimeException(), false);
 
@@ -1319,7 +1339,7 @@
   @Nullable
   private BuildEventStreamProtos.BuildEvent getBepEvent(BuildEventId buildEventId) {
     return transport.getEventProtos().stream()
-        .filter(e -> e.getId().equals(buildEventId.asStreamProto()))
+        .filter(e -> e.getId().equals(buildEventId))
         .findFirst()
         .orElse(null);
   }
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/CommandLineEventTest.java b/src/test/java/com/google/devtools/build/lib/runtime/CommandLineEventTest.java
index b103321..944aa36 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/CommandLineEventTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/CommandLineEventTest.java
@@ -461,7 +461,7 @@
         "--experimental_tool_command_line=" + BaseEncoding.base64().encode(original.toByteArray()));
 
     ToolCommandLineEvent event = parser.getOptions(CommonCommandOptions.class).toolCommandLine;
-    StructuredCommandLineId id = event.getEventId().asStreamProto().getStructuredCommandLine();
+    StructuredCommandLineId id = event.getEventId().getStructuredCommandLine();
     CommandLine line = event.asStreamProto(null).getStructuredCommandLine();
 
     assertThat(id.getCommandLineLabel()).isEqualTo("tool");
@@ -492,7 +492,7 @@
         "--experimental_tool_command_line=" + BaseEncoding.base64().encode(original.toByteArray()));
 
     ToolCommandLineEvent event = parser.getOptions(CommonCommandOptions.class).toolCommandLine;
-    StructuredCommandLineId id = event.getEventId().asStreamProto().getStructuredCommandLine();
+    StructuredCommandLineId id = event.getEventId().getStructuredCommandLine();
     CommandLine line = event.asStreamProto(null).getStructuredCommandLine();
 
     assertThat(id.getCommandLineLabel()).isEqualTo("tool");
@@ -516,7 +516,7 @@
     parser.parse("--experimental_tool_command_line=The quick brown fox jumps over the lazy dog");
 
     ToolCommandLineEvent event = parser.getOptions(CommonCommandOptions.class).toolCommandLine;
-    StructuredCommandLineId id = event.getEventId().asStreamProto().getStructuredCommandLine();
+    StructuredCommandLineId id = event.getEventId().getStructuredCommandLine();
     CommandLine line = event.asStreamProto(null).getStructuredCommandLine();
 
     assertThat(id.getCommandLineLabel()).isEqualTo("tool");