Document that ActionAnalysisMetadata#getOwner() is never null, add some Preconditions checks to make that more clear, and ensure that ActionOwner's fields are never null except for the SYSTEM_ACTION_OWNER wart.

Also do some drive-by serialization annotation clean-ups and other housekeeping.

PiperOrigin-RevId: 312336006
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionAnalysisMetadata.java b/src/main/java/com/google/devtools/build/lib/actions/ActionAnalysisMetadata.java
index 1cc14bf..4141183 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionAnalysisMetadata.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionAnalysisMetadata.java
@@ -38,11 +38,7 @@
 
   /**
    * Returns the owner of this executable if this executable can supply verbose information. This is
-   * typically the rule that constructed it; see ActionOwner class comment for details. Returns
-   * {@code null} if no owner can be determined.
-   *
-   * <p>If this executable does not supply verbose information, this function may throw an
-   * IllegalStateException.
+   * typically the rule that constructed it; see ActionOwner class comment for details.
    */
   ActionOwner getOwner();
 
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java b/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java
index 17c8f9b..bf4d4bd 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionOwner.java
@@ -13,16 +13,17 @@
 // limitations under the License.
 package com.google.devtools.build.lib.actions;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import com.google.auto.value.AutoValue;
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.analysis.platform.PlatformInfo;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.packages.AspectDescriptor;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.syntax.Location;
 import javax.annotation.Nullable;
 
@@ -34,30 +35,53 @@
  * analysis and actions packages, the RuleConfiguredTarget provides an instance of this class.
  */
 @AutoValue
-@AutoCodec
 @Immutable
 public abstract class ActionOwner {
   /** An action owner for special cases. Usage is strongly discouraged. */
+  @SerializationConstant
   public static final ActionOwner SYSTEM_ACTION_OWNER =
-      ActionOwner.create(
+      ActionOwner.createInternal(
           null,
-          ImmutableList.<AspectDescriptor>of(),
-          null,
+          ImmutableList.of(),
+          Location.BUILTIN,
           "system",
           "empty target kind",
           "system",
           null,
           null,
-          ImmutableMap.<String, String>of(),
+          ImmutableMap.of(),
           null);
 
-  @AutoCodec.Instantiator
   public static ActionOwner create(
+      Label label,
+      ImmutableList<AspectDescriptor> aspectDescriptors,
+      Location location,
+      String mnemonic,
+      String targetKind,
+      String configurationChecksum,
+      BuildConfigurationEvent configuration,
+      @Nullable String additionalProgressInfo,
+      ImmutableMap<String, String> execProperties,
+      @Nullable PlatformInfo executionPlatform) {
+    return createInternal(
+        checkNotNull(label),
+        aspectDescriptors,
+        checkNotNull(location),
+        checkNotNull(mnemonic),
+        checkNotNull(targetKind),
+        checkNotNull(configurationChecksum),
+        checkNotNull(configuration),
+        additionalProgressInfo,
+        execProperties,
+        executionPlatform);
+  }
+
+  private static ActionOwner createInternal(
       @Nullable Label label,
       ImmutableList<AspectDescriptor> aspectDescriptors,
-      @Nullable Location location,
-      @Nullable String mnemonic,
-      @Nullable String targetKind,
+      Location location,
+      String mnemonic,
+      String targetKind,
       String configurationChecksum,
       @Nullable BuildConfigurationEvent configuration,
       @Nullable String additionalProgressInfo,
@@ -68,7 +92,7 @@
         label,
         aspectDescriptors,
         mnemonic,
-        Preconditions.checkNotNull(configurationChecksum),
+        checkNotNull(configurationChecksum),
         configuration,
         targetKind,
         additionalProgressInfo,
@@ -76,18 +100,16 @@
         executionPlatform);
   }
 
-  /** Returns the location of this ActionOwner, if any; null otherwise. */
-  @Nullable
+  /** Returns the location of this ActionOwner. */
   public abstract Location getLocation();
 
-  /** Returns the label for this ActionOwner, if any; null otherwise. */
+  /** Returns the label for this ActionOwner, or null if the {@link #SYSTEM_ACTION_OWNER}. */
   @Nullable
   public abstract Label getLabel();
 
   public abstract ImmutableList<AspectDescriptor> getAspectDescriptors();
 
   /** Returns the configuration's mnemonic. */
-  @Nullable
   public abstract String getMnemonic();
 
   /**
@@ -105,8 +127,7 @@
   @Nullable
   public abstract BuildConfigurationEvent getConfiguration();
 
-  /** Returns the target kind (rule class name) for this ActionOwner, if any; null otherwise. */
-  @Nullable
+  /** Returns the target kind (rule class name) for this ActionOwner. */
   public abstract String getTargetKind();
 
   /**
@@ -127,6 +148,4 @@
   @VisibleForTesting
   @Nullable
   public abstract PlatformInfo getExecutionPlatform();
-
-  ActionOwner() {}
 }
diff --git a/src/main/java/com/google/devtools/build/lib/actions/BUILD b/src/main/java/com/google/devtools/build/lib/actions/BUILD
index abb27df..d6aff69 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/actions/BUILD
@@ -52,6 +52,7 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:sane_analysis_exception",
         "//src/main/java/com/google/devtools/build/lib/skyframe:sky_functions",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
+        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi",
         "//src/main/java/com/google/devtools/build/lib/unix",
         "//src/main/java/com/google/devtools/build/lib/unsafe:string",
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java
index 2b6a3e4..9d76fa5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java
@@ -13,6 +13,8 @@
 // limitations under the License.
 package com.google.devtools.build.lib.analysis.actions;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
@@ -396,16 +398,16 @@
      * @param actionOwner the action owner of the SpawnActionTemplate to be built.
      */
     public SpawnActionTemplate build(ActionOwner actionOwner) {
-      Preconditions.checkNotNull(executable);
+      checkNotNull(executable);
 
       return new SpawnActionTemplate(
-          actionOwner,
-          Preconditions.checkNotNull(inputTreeArtifact),
-          Preconditions.checkNotNull(outputTreeArtifact),
+          checkNotNull(actionOwner),
+          checkNotNull(inputTreeArtifact),
+          checkNotNull(outputTreeArtifact),
           inputsBuilder.build(),
           toolsBuilder.build(),
-          Preconditions.checkNotNull(outputPathMapper),
-          Preconditions.checkNotNull(commandLineTemplate),
+          checkNotNull(outputPathMapper),
+          checkNotNull(commandLineTemplate),
           actionTemplateMnemonic,
           spawnActionBuilder);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java
index 1c9dc9d..c4af6bc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionTemplate.java
@@ -13,6 +13,8 @@
 // limitations under the License.
 package com.google.devtools.build.lib.rules.cpp;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
@@ -79,7 +81,7 @@
     this.dotdTreeArtifact = dotdTreeArtifact;
     this.toolchain = toolchain;
     this.categories = categories;
-    this.actionOwner = actionOwner;
+    this.actionOwner = checkNotNull(actionOwner, outputTreeArtifact);
     this.mandatoryInputs = cppCompileActionBuilder.buildMandatoryInputs();
     this.allInputs =
         NestedSetBuilder.fromNestedSet(mandatoryInputs)
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BUILD b/src/main/java/com/google/devtools/build/lib/syntax/BUILD
index 717cd6d..03ac590 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/syntax/BUILD
@@ -70,7 +70,9 @@
         "UnaryOperatorExpression.java",
     ],
     deps = [
+        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
+        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
         "//src/main/java/net/starlark/java/spelling",
         "//third_party:auto_value",
         "//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Location.java b/src/main/java/com/google/devtools/build/lib/syntax/Location.java
index 87da128..8624ea3 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Location.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Location.java
@@ -15,7 +15,7 @@
 package com.google.devtools.build.lib.syntax;
 
 import com.google.common.base.Preconditions;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import java.io.Serializable;
 import javax.annotation.concurrent.Immutable;
 
@@ -28,7 +28,6 @@
  * If the line number is also zero, it too is not displayed; in this case, the location denotes the
  * file as a whole.
  */
-@AutoCodec
 @Immutable
 public final class Location implements Serializable, Comparable<Location> {
 
@@ -114,5 +113,5 @@
   }
 
   /** A location for built-in functions. */
-  @AutoCodec public static final Location BUILTIN = fromFile("<builtin>");
+  @SerializationConstant public static final Location BUILTIN = fromFile("<builtin>");
 }
diff --git a/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java b/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java
index 7b75fee..ae92ac8 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java
@@ -50,6 +50,7 @@
 import com.google.devtools.build.lib.actions.ArtifactOwner;
 import com.google.devtools.build.lib.actions.ArtifactResolver;
 import com.google.devtools.build.lib.actions.ArtifactRoot;
+import com.google.devtools.build.lib.actions.BuildConfigurationEvent;
 import com.google.devtools.build.lib.actions.Executor;
 import com.google.devtools.build.lib.actions.FileArtifactValue;
 import com.google.devtools.build.lib.actions.FileArtifactValue.RemoteFileArtifactValue;
@@ -63,6 +64,7 @@
 import com.google.devtools.build.lib.analysis.actions.SpawnActionTemplate;
 import com.google.devtools.build.lib.analysis.actions.SpawnActionTemplate.OutputPathMapper;
 import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
@@ -73,10 +75,10 @@
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
 import com.google.devtools.build.lib.events.Reporter;
 import com.google.devtools.build.lib.exec.SingleBuildFileCache;
-import com.google.devtools.build.lib.packages.AspectDescriptor;
 import com.google.devtools.build.lib.skyframe.ActionTemplateExpansionValue;
 import com.google.devtools.build.lib.skyframe.ActionTemplateExpansionValue.ActionTemplateExpansionKey;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
+import com.google.devtools.build.lib.syntax.Location;
 import com.google.devtools.build.lib.util.FileType;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.util.ResourceUsage;
@@ -112,10 +114,7 @@
 import java.util.stream.Collectors;
 import javax.annotation.Nullable;
 
-/**
- * A bunch of utilities that are useful for test concerning actions, artifacts,
- * etc.
- */
+/** A bunch of utilities that are useful for tests concerning actions, artifacts, etc. */
 public final class ActionsTestUtil {
 
   private final ActionGraph actionGraph;
@@ -336,16 +335,7 @@
     }
   }
 
-  static class NullArtifactOwner implements ArtifactOwner {
-    private NullArtifactOwner() {}
-
-    @Override
-    public Label getLabel() {
-      return NULL_LABEL;
-    }
-  }
-
-  @AutoCodec
+  @SerializationConstant
   public static final ActionLookupKey NULL_ARTIFACT_OWNER =
       new ActionLookupValue.ActionLookupKey() {
         @Override
@@ -371,17 +361,19 @@
   public static final ActionOwner NULL_ACTION_OWNER =
       ActionOwner.create(
           NULL_LABEL,
-          ImmutableList.<AspectDescriptor>of(),
-          null,
+          ImmutableList.of(),
+          new Location("dummy-file", 0, 0),
           "dummy-configuration-mnemonic",
-          null,
+          "dummy-kind",
           "dummy-configuration",
+          new BuildConfigurationEvent(
+              BuildEventStreamProtos.BuildEventId.getDefaultInstance(),
+              BuildEventStreamProtos.BuildEvent.getDefaultInstance()),
           null,
-          null,
-          ImmutableMap.<String, String>of(),
+          ImmutableMap.of(),
           null);
 
-  @AutoCodec
+  @SerializationConstant
   public static final ActionLookupData NULL_ACTION_LOOKUP_DATA =
       ActionLookupData.create(NULL_ARTIFACT_OWNER, 0);
 
diff --git a/src/test/java/com/google/devtools/build/lib/actions/util/BUILD b/src/test/java/com/google/devtools/build/lib/actions/util/BUILD
index c3dd8e6..2b0b2b4 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/util/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/actions/util/BUILD
@@ -20,14 +20,16 @@
         "//src/main/java/com/google/devtools/build/lib/analysis:actions/custom_command_line",
         "//src/main/java/com/google/devtools/build/lib/analysis:actions/spawn_action_template",
         "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
+        "//src/main/java/com/google/devtools/build/lib/buildeventstream/proto:build_event_stream_java_proto",
         "//src/main/java/com/google/devtools/build/lib/clock",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
         "//src/main/java/com/google/devtools/build/lib/events",
         "//src/main/java/com/google/devtools/build/lib/exec:single_build_file_cache",
-        "//src/main/java/com/google/devtools/build/lib/packages",
         "//src/main/java/com/google/devtools/build/lib/skyframe:action_template_expansion_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
+        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
+        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
         "//src/main/java/com/google/devtools/build/lib/util:resource_usage",
diff --git a/src/test/java/com/google/devtools/build/lib/actions/util/LabelArtifactOwner.java b/src/test/java/com/google/devtools/build/lib/actions/util/LabelArtifactOwner.java
index 5fc60fd..8111e80 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/util/LabelArtifactOwner.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/util/LabelArtifactOwner.java
@@ -16,12 +16,10 @@
 import com.google.common.annotations.VisibleForTesting;
 import com.google.devtools.build.lib.actions.ArtifactOwner;
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import java.util.Objects;
 
 /** ArtifactOwner wrapper for Labels, for use in tests. */
 @VisibleForTesting
-@AutoCodec
 public class LabelArtifactOwner implements ArtifactOwner {
   private final Label label;
 
diff --git a/src/test/java/com/google/devtools/build/lib/actions/util/TestAction.java b/src/test/java/com/google/devtools/build/lib/actions/util/TestAction.java
index 35e98e3..32841d4 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/util/TestAction.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/util/TestAction.java
@@ -29,6 +29,7 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.collect.nestedset.Order;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import java.io.IOException;
@@ -42,12 +43,7 @@
  */
 public class TestAction extends AbstractAction {
 
-  @AutoCodec
-  public static final Runnable NO_EFFECT =
-      new Runnable() {
-        @Override
-        public void run() {}
-      };
+  @SerializationConstant public static final Runnable NO_EFFECT = () -> {};
 
   private static boolean isOptional(Artifact artifact) {
     return artifact.getExecPath().getBaseName().endsWith(".optional");
diff --git a/src/test/java/com/google/devtools/build/lib/exec/SpawnStrategyRegistryTest.java b/src/test/java/com/google/devtools/build/lib/exec/SpawnStrategyRegistryTest.java
index 377251e..052eb9a 100644
--- a/src/test/java/com/google/devtools/build/lib/exec/SpawnStrategyRegistryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/exec/SpawnStrategyRegistryTest.java
@@ -505,7 +505,7 @@
 
   private Spawn createSpawnWithMnemonicAndDescription(String mnemonic, String description) {
     return new SimpleSpawn(
-        new FakeOwner(mnemonic, description),
+        new FakeOwner(mnemonic, description, "//dummy:label"),
         ImmutableList.of(),
         ImmutableMap.of(),
         ImmutableMap.of(),
diff --git a/src/test/java/com/google/devtools/build/lib/exec/util/BUILD b/src/test/java/com/google/devtools/build/lib/exec/util/BUILD
index f1c4731..e186c04 100644
--- a/src/test/java/com/google/devtools/build/lib/exec/util/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/exec/util/BUILD
@@ -26,6 +26,7 @@
         "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
         "//src/main/java/com/google/devtools/build/lib/analysis:blaze_directories",
         "//src/main/java/com/google/devtools/build/lib/analysis/platform",
+        "//src/main/java/com/google/devtools/build/lib/buildeventstream/proto:build_event_stream_java_proto",
         "//src/main/java/com/google/devtools/build/lib/clock",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
         "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
@@ -35,11 +36,10 @@
         "//src/main/java/com/google/devtools/build/lib/exec:execution_options",
         "//src/main/java/com/google/devtools/build/lib/exec:file_write_strategy",
         "//src/main/java/com/google/devtools/build/lib/exec:module_action_context_registry",
-        "//src/main/java/com/google/devtools/build/lib/exec:spawn_action_context_maps",
         "//src/main/java/com/google/devtools/build/lib/exec:spawn_strategy_registry",
         "//src/main/java/com/google/devtools/build/lib/exec:spawn_strategy_resolver",
         "//src/main/java/com/google/devtools/build/lib/exec:symlink_tree_strategy",
-        "//src/main/java/com/google/devtools/build/lib/packages",
+        "//src/main/java/com/google/devtools/build/lib/syntax:frontend",
         "//src/main/java/com/google/devtools/build/lib/util:abrupt_exit_exception",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/common/options",
diff --git a/src/test/java/com/google/devtools/build/lib/exec/util/FakeOwner.java b/src/test/java/com/google/devtools/build/lib/exec/util/FakeOwner.java
index 3765408..abc0438 100644
--- a/src/test/java/com/google/devtools/build/lib/exec/util/FakeOwner.java
+++ b/src/test/java/com/google/devtools/build/lib/exec/util/FakeOwner.java
@@ -13,74 +13,70 @@
 // limitations under the License.
 package com.google.devtools.build.lib.exec.util;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
-import com.google.devtools.build.lib.actions.ActionAnalysisMetadata.MiddlemanType;
 import com.google.devtools.build.lib.actions.ActionExecutionContext;
 import com.google.devtools.build.lib.actions.ActionExecutionMetadata;
 import com.google.devtools.build.lib.actions.ActionKeyContext;
 import com.google.devtools.build.lib.actions.ActionOwner;
 import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.BuildConfigurationEvent;
 import com.google.devtools.build.lib.actions.RunfilesSupplier;
 import com.google.devtools.build.lib.analysis.platform.PlatformInfo;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.collect.nestedset.Order;
-import com.google.devtools.build.lib.packages.AspectDescriptor;
+import com.google.devtools.build.lib.syntax.Location;
 import javax.annotation.Nullable;
 
-/**
- * Fake implementation of {@link ActionExecutionMetadata} for testing.
- */
-public final class FakeOwner implements ActionExecutionMetadata {
+/** Fake implementation of {@link ActionExecutionMetadata} for testing. */
+public class FakeOwner implements ActionExecutionMetadata {
   private final String mnemonic;
   private final String progressMessage;
   @Nullable private final String ownerLabel;
   @Nullable private final PlatformInfo platform;
-  ImmutableMap<String, String> execProperties;
+  private final ImmutableMap<String, String> execProperties;
 
-  public FakeOwner(
+  FakeOwner(
       String mnemonic,
       String progressMessage,
-      @Nullable String ownerLabel,
+      String ownerLabel,
       @Nullable PlatformInfo platform,
       ImmutableMap<String, String> execProperties) {
     this.mnemonic = mnemonic;
     this.progressMessage = progressMessage;
-    this.ownerLabel = ownerLabel;
+    this.ownerLabel = checkNotNull(ownerLabel);
     this.platform = platform;
     this.execProperties = execProperties;
   }
 
-  public FakeOwner(
-      String mnemonic,
-      String progressMessage,
-      @Nullable String ownerLabel,
-      @Nullable PlatformInfo platform) {
+  private FakeOwner(
+      String mnemonic, String progressMessage, String ownerLabel, @Nullable PlatformInfo platform) {
     this(mnemonic, progressMessage, ownerLabel, platform, ImmutableMap.of());
   }
 
-  public FakeOwner(String mnemonic, String progressMessage, @Nullable String ownerLabel) {
-    this(mnemonic, progressMessage, ownerLabel, null);
-  }
-
-  public FakeOwner(String mnemonic, String progressMessage) {
-    this(mnemonic, progressMessage, null);
+  public FakeOwner(String mnemonic, String progressMessage, String ownerLabel) {
+    this(mnemonic, progressMessage, checkNotNull(ownerLabel), null);
   }
 
   @Override
   public ActionOwner getOwner() {
     return ActionOwner.create(
-        ownerLabel == null ? null : Label.parseAbsoluteUnchecked(ownerLabel),
-        /*aspectDescriptors=*/ ImmutableList.<AspectDescriptor>of(),
-        /*location=*/ null,
+        Label.parseAbsoluteUnchecked(ownerLabel),
+        /*aspectDescriptors=*/ ImmutableList.of(),
+        new Location("dummy-file", 0, 0),
         mnemonic,
-        /*targetKind=*/ null,
+        "dummy-target-kind",
         "configurationChecksum",
-        /* configuration=*/ null,
+        new BuildConfigurationEvent(
+            BuildEventStreamProtos.BuildEventId.getDefaultInstance(),
+            BuildEventStreamProtos.BuildEvent.getDefaultInstance()),
         "additionalProgressInfo",
         /* execProperties=*/ ImmutableMap.of(),
         null);
diff --git a/src/test/java/com/google/devtools/build/lib/exec/util/SpawnBuilder.java b/src/test/java/com/google/devtools/build/lib/exec/util/SpawnBuilder.java
index cce2e41..47584b4 100644
--- a/src/test/java/com/google/devtools/build/lib/exec/util/SpawnBuilder.java
+++ b/src/test/java/com/google/devtools/build/lib/exec/util/SpawnBuilder.java
@@ -13,6 +13,8 @@
 // limitations under the License.
 package com.google.devtools.build.lib.exec.util;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -42,7 +44,7 @@
 public final class SpawnBuilder {
   private String mnemonic = "Mnemonic";
   private String progressMessage = "progress message";
-  @Nullable private String ownerLabel;
+  private String ownerLabel = "//dummy:label";
   @Nullable private PlatformInfo platform;
   private final List<String> args;
   private final Map<String, String> environment = new HashMap<>();
@@ -81,7 +83,7 @@
   }
 
   public SpawnBuilder withMnemonic(String mnemonic) {
-    this.mnemonic = Preconditions.checkNotNull(mnemonic);
+    this.mnemonic = checkNotNull(mnemonic);
     return this;
   }
 
@@ -91,7 +93,7 @@
   }
 
   public SpawnBuilder withOwnerLabel(String ownerLabel) {
-    this.ownerLabel = ownerLabel;
+    this.ownerLabel = checkNotNull(ownerLabel);
     return this;
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/remote/GrpcRemoteExecutionClientTest.java b/src/test/java/com/google/devtools/build/lib/remote/GrpcRemoteExecutionClientTest.java
index eec57b5..ef2e9c4 100644
--- a/src/test/java/com/google/devtools/build/lib/remote/GrpcRemoteExecutionClientTest.java
+++ b/src/test/java/com/google/devtools/build/lib/remote/GrpcRemoteExecutionClientTest.java
@@ -184,7 +184,7 @@
     fakeFileCache = new FakeActionInputFileCache(execRoot);
     simpleSpawn =
         new SimpleSpawn(
-            new FakeOwner("Mnemonic", "Progress Message"),
+            new FakeOwner("Mnemonic", "Progress Message", "//dummy:label"),
             ImmutableList.of("/bin/echo", "Hi!"),
             ImmutableMap.of("VARIABLE", "value"),
             /*executionInfo=*/ ImmutableMap.<String, String>of(),
diff --git a/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnCacheTest.java b/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnCacheTest.java
index 9ff5ef9..2ab08c1 100644
--- a/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnCacheTest.java
+++ b/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnCacheTest.java
@@ -219,7 +219,7 @@
   private static SimpleSpawn simpleSpawnWithExecutionInfo(
       ImmutableMap<String, String> executionInfo) {
     return new SimpleSpawn(
-        new FakeOwner("Mnemonic", "Progress Message"),
+        new FakeOwner("Mnemonic", "Progress Message", "//dummy:label"),
         ImmutableList.of("/bin/echo", "Hi!"),
         ImmutableMap.of("VARIABLE", "value"),
         executionInfo,
diff --git a/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java b/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java
index a5b204b..030efa3 100644
--- a/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java
@@ -844,7 +844,7 @@
             PathFragment.create("out/param_file"), args, ParameterFileType.UNQUOTED, ISO_8859_1);
     Spawn spawn =
         new SimpleSpawn(
-            new FakeOwner("foo", "bar"),
+            new FakeOwner("foo", "bar", "//dummy:label"),
             /*arguments=*/ ImmutableList.of(),
             /*environment=*/ ImmutableMap.of(),
             /*executionInfo=*/ ImmutableMap.of(),
@@ -1028,7 +1028,7 @@
   private static SimpleSpawn simpleSpawnWithExecutionInfo(
       ImmutableMap<String, String> executionInfo, Artifact... outputs) {
     return new SimpleSpawn(
-        new FakeOwner("foo", "bar"),
+        new FakeOwner("foo", "bar", "//dummy:label"),
         /*arguments=*/ ImmutableList.of(),
         /*environment=*/ ImmutableMap.of(),
         /*executionInfo=*/ executionInfo,
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/UiStateTrackerTest.java b/src/test/java/com/google/devtools/build/lib/runtime/UiStateTrackerTest.java
index f93e6f0..1f37b99 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/UiStateTrackerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/UiStateTrackerTest.java
@@ -31,6 +31,7 @@
 import com.google.devtools.build.lib.actions.ActionStartedEvent;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.ArtifactRoot;
+import com.google.devtools.build.lib.actions.BuildConfigurationEvent;
 import com.google.devtools.build.lib.actions.RunningActionEvent;
 import com.google.devtools.build.lib.actions.ScanningActionEvent;
 import com.google.devtools.build.lib.actions.SchedulingActionEvent;
@@ -38,6 +39,7 @@
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.bazel.repository.downloader.DownloadProgressEvent;
 import com.google.devtools.build.lib.buildeventstream.AnnounceBuildEventTransportsEvent;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
 import com.google.devtools.build.lib.buildeventstream.BuildEventTransport;
 import com.google.devtools.build.lib.buildeventstream.BuildEventTransportClosedEvent;
 import com.google.devtools.build.lib.buildtool.BuildResult;
@@ -45,11 +47,11 @@
 import com.google.devtools.build.lib.buildtool.buildevent.TestFilteringCompleteEvent;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.events.ExtendedEventHandler.FetchProgress;
-import com.google.devtools.build.lib.packages.AspectDescriptor;
 import com.google.devtools.build.lib.runtime.UiStateTracker.ProgressMode;
 import com.google.devtools.build.lib.runtime.UiStateTracker.StrategyIds;
 import com.google.devtools.build.lib.skyframe.LoadingPhaseStartedEvent;
 import com.google.devtools.build.lib.skyframe.PackageProgressReceiver;
+import com.google.devtools.build.lib.syntax.Location;
 import com.google.devtools.build.lib.testutil.FoundationTestCase;
 import com.google.devtools.build.lib.testutil.ManualClock;
 import com.google.devtools.build.lib.util.DetailedExitCode;
@@ -523,12 +525,14 @@
     ActionOwner owner =
         ActionOwner.create(
             label,
-            ImmutableList.<AspectDescriptor>of(),
-            null,
-            null,
-            null,
+            ImmutableList.of(),
+            new Location("dummy-file", 0, 0),
+            "dummy-mnemonic",
+            "dummy-target-kind",
             "fedcba",
-            null,
+            new BuildConfigurationEvent(
+                BuildEventStreamProtos.BuildEventId.getDefaultInstance(),
+                BuildEventStreamProtos.BuildEvent.getDefaultInstance()),
             null,
             ImmutableMap.of(),
             null);
@@ -950,12 +954,14 @@
     ActionOwner fooOwner =
         ActionOwner.create(
             labelFooTest,
-            ImmutableList.<AspectDescriptor>of(),
-            null,
-            null,
-            null,
+            ImmutableList.of(),
+            new Location("dummy-file", 0, 0),
+            "dummy-mnemonic",
+            "dummy-target-kind",
             "abcdef",
-            null,
+            new BuildConfigurationEvent(
+                BuildEventStreamProtos.BuildEventId.getDefaultInstance(),
+                BuildEventStreamProtos.BuildEvent.getDefaultInstance()),
             null,
             ImmutableMap.of(),
             null);
@@ -969,12 +975,14 @@
     ActionOwner barOwner =
         ActionOwner.create(
             labelBarTest,
-            ImmutableList.<AspectDescriptor>of(),
-            null,
-            null,
-            null,
+            ImmutableList.of(),
+            new Location("dummy-file", 0, 0),
+            "dummy-mnemonic",
+            "dummy-target-kind",
             "fedcba",
-            null,
+            new BuildConfigurationEvent(
+                BuildEventStreamProtos.BuildEventId.getDefaultInstance(),
+                BuildEventStreamProtos.BuildEvent.getDefaultInstance()),
             null,
             ImmutableMap.of(),
             null);