Narrow type of "configuration" field in ActionOwner. It is only ever a BuildConfiguration.
PiperOrigin-RevId: 185155423
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 4ce22b7..85b2574 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
@@ -17,7 +17,6 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.platform.PlatformInfo;
-import com.google.devtools.build.lib.buildeventstream.BuildEvent;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Location;
@@ -54,7 +53,7 @@
@Nullable String mnemonic,
@Nullable String targetKind,
String configurationChecksum,
- @Nullable BuildEvent configuration,
+ @Nullable BuildConfigurationInterface configuration,
@Nullable String additionalProgressInfo,
@Nullable PlatformInfo executionPlatform) {
return new AutoValue_ActionOwner(
@@ -96,7 +95,7 @@
* event protocol.
*/
@Nullable
- public abstract BuildEvent getConfiguration();
+ public abstract BuildConfigurationInterface getConfiguration();
/** Returns the target kind (rule class name) for this ActionOwner, if any; null otherwise. */
@Nullable
diff --git a/src/main/java/com/google/devtools/build/lib/actions/BuildConfigurationInterface.java b/src/main/java/com/google/devtools/build/lib/actions/BuildConfigurationInterface.java
new file mode 100644
index 0000000..4e9a079
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/actions/BuildConfigurationInterface.java
@@ -0,0 +1,29 @@
+// Copyright 2018 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.actions;
+
+import com.google.devtools.build.lib.buildeventstream.BuildEvent;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+
+/**
+ * An interface for {@code BuildConfiguration} that only exists so that {@link ActionOwner} can
+ * refer to {@code BuildConfiguration}, which is in a dependent package. {@code BuildConfiguration}
+ * must be the only implementation of this interface.
+ */
+@AutoCodec(strategy = AutoCodec.Strategy.POLYMORPHIC)
+public interface BuildConfigurationInterface extends BuildEvent {
+ ObjectCodec<BuildConfigurationInterface> CODEC = new BuildConfigurationInterface_AutoCodec();
+}
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 8652028..562a208 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,13 +34,13 @@
import com.google.common.collect.MutableClassToInstanceMap;
import com.google.devtools.build.lib.actions.ActionEnvironment;
import com.google.devtools.build.lib.actions.ArtifactRoot;
+import com.google.devtools.build.lib.actions.BuildConfigurationInterface;
import com.google.devtools.build.lib.analysis.BlazeDirectories;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.actions.FileWriteAction;
import com.google.devtools.build.lib.analysis.config.transitions.ComposingPatchTransition;
import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
-import com.google.devtools.build.lib.buildeventstream.BuildEvent;
import com.google.devtools.build.lib.buildeventstream.BuildEventConverters;
import com.google.devtools.build.lib.buildeventstream.BuildEventId;
import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
@@ -94,30 +94,32 @@
import javax.annotation.Nullable;
/**
- * Instances of BuildConfiguration represent a collection of context
- * information which may affect a build (for example: the target platform for
- * compilation, or whether or not debug tables are required). In fact, all
- * "environmental" information (e.g. from the tool's command-line, as opposed
- * to the BUILD file) that can affect the output of any build tool should be
- * explicitly represented in the BuildConfiguration instance.
+ * Instances of BuildConfiguration represent a collection of context information which may affect a
+ * build (for example: the target platform for compilation, or whether or not debug tables are
+ * required). In fact, all "environmental" information (e.g. from the tool's command-line, as
+ * opposed to the BUILD file) that can affect the output of any build tool should be explicitly
+ * represented in the BuildConfiguration instance.
*
- * <p>A single build may require building tools to run on a variety of
- * platforms: when compiling a server application for production, we must build
- * the build tools (like compilers) to run on the host platform, but cross-compile
- * the application for the production environment.
+ * <p>A single build may require building tools to run on a variety of platforms: when compiling a
+ * server application for production, we must build the build tools (like compilers) to run on the
+ * host platform, but cross-compile the application for the production environment.
*
- * <p>There is always at least one BuildConfiguration instance in any build:
- * the one representing the host platform. Additional instances may be created,
- * in a cross-compilation build, for example.
+ * <p>There is always at least one BuildConfiguration instance in any build: the one representing
+ * the host platform. Additional instances may be created, in a cross-compilation build, for
+ * example.
*
* <p>Instances of BuildConfiguration are canonical:
+ *
* <pre>c1.equals(c2) <=> c1==c2.</pre>
*/
-@SkylarkModule(name = "configuration",
- category = SkylarkModuleCategory.BUILTIN,
- doc = "Data required for the analysis of a target that comes from targets that "
- + "depend on it and not targets that it depends on.")
-public class BuildConfiguration implements BuildEvent {
+@SkylarkModule(
+ name = "configuration",
+ category = SkylarkModuleCategory.BUILTIN,
+ doc =
+ "Data required for the analysis of a target that comes from targets that "
+ + "depend on it and not targets that it depends on."
+)
+public class BuildConfiguration implements BuildConfigurationInterface {
public static final InjectingObjectCodec<BuildConfiguration, FileSystemProvider> CODEC =
new BuildConfigurationCodec();