Add a method to get `BuildConfigurationKey` from `ActionLookupKey`. PiperOrigin-RevId: 406831509
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionLookupKey.java b/src/main/java/com/google/devtools/build/lib/actions/ActionLookupKey.java index 52239da..c7b0095 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/ActionLookupKey.java +++ b/src/main/java/com/google/devtools/build/lib/actions/ActionLookupKey.java
@@ -13,8 +13,10 @@ // limitations under the License. package com.google.devtools.build.lib.actions; +import com.google.devtools.build.lib.skyframe.BuildConfigurationKey; import com.google.devtools.build.skyframe.CPUHeavySkyKey; import com.google.devtools.build.skyframe.SkyKey; +import javax.annotation.Nullable; /** * {@link SkyKey} for an "analysis object": either an {@link ActionLookupValue} or a {@link @@ -28,4 +30,12 @@ * are subclasses of {@link ActionLookupKey}. This allows callers to easily find the value key, * while remaining agnostic to what action lookup values actually exist. */ -public interface ActionLookupKey extends ArtifactOwner, CPUHeavySkyKey {} +public interface ActionLookupKey extends ArtifactOwner, CPUHeavySkyKey { + + /** + * Returns the {@link BuildConfigurationKey} for the configuration associated with this key, or + * {@code null} if this key has no associated configuration. + */ + @Nullable + BuildConfigurationKey getConfigurationKey(); +}
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 8ae7bb4..b849a97 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/BUILD +++ b/src/main/java/com/google/devtools/build/lib/actions/BUILD
@@ -168,8 +168,10 @@ srcs = ["ActionLookupKey.java"], deps = [ ":artifact_owner", + "//src/main/java/com/google/devtools/build/lib/skyframe:build_configuration", "//src/main/java/com/google/devtools/build/skyframe:cpu_heavy_skykey", "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects", + "//third_party:jsr305", ], )
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionValue.java index 48dba2a..514236a 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionValue.java
@@ -65,6 +65,11 @@ return actionLookupKey.getLabel(); } + @Override + public BuildConfigurationKey getConfigurationKey() { + return actionLookupKey.getConfigurationKey(); + } + public ActionLookupKey getActionLookupKey() { return actionLookupKey; }
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 a8f56d5..eaf519d 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
@@ -221,11 +221,11 @@ new BuildFileContainsErrorsException(key.getLabel().getPackageIdentifier())); } - boolean aspectHasConfiguration = key.getAspectConfigurationKey() != null; + boolean aspectHasConfiguration = key.getConfigurationKey() != null; ImmutableSet<SkyKey> keys = aspectHasConfiguration - ? ImmutableSet.of(key.getBaseConfiguredTargetKey(), key.getAspectConfigurationKey()) + ? ImmutableSet.of(key.getBaseConfiguredTargetKey(), key.getConfigurationKey()) : ImmutableSet.of(key.getBaseConfiguredTargetKey()); Map<SkyKey, ValueOrException<ConfiguredValueCreationException>> baseAndAspectValues = @@ -248,11 +248,12 @@ if (aspectHasConfiguration) { try { aspectConfiguration = - (BuildConfigurationValue) - baseAndAspectValues.get(key.getAspectConfigurationKey()).get(); + (BuildConfigurationValue) baseAndAspectValues.get(key.getConfigurationKey()).get(); } catch (ConfiguredValueCreationException e) { - throw new IllegalStateException("Unexpected exception from BuildConfigurationFunction when " - + "computing " + key.getAspectConfigurationKey(), e); + throw new IllegalStateException( + "Unexpected exception from BuildConfigurationFunction when computing " + + key.getConfigurationKey(), + e); } }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java index 0d4c5ac..de7fdbc 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java
@@ -192,22 +192,10 @@ /** * Returns the key of the configured target of the aspect; that is, the configuration in which * the aspect will be evaluated. - * - * <p>In trimmed configuration mode, the aspect may require more fragments than the target on - * which it is being evaluated; in addition to configuration fragments required by the target - * and its dependencies, an aspect has configuration fragment requirements of its own, as well - * as dependencies of its own with their own configuration fragment requirements. - * - * <p>The aspect configuration contains all of these fragments, and is used to create the - * aspect's RuleContext and to retrieve the dependencies. Note that dependencies will have their - * configurations trimmed from this one as normal. - * - * <p>Because of these properties, this configuration is always a superset of the base target's - * configuration. In untrimmed configuration mode, this configuration will be equivalent to the - * base target's configuration. */ + @Override @Nullable - public BuildConfigurationKey getAspectConfigurationKey() { + public BuildConfigurationKey getConfigurationKey() { return aspectConfigurationKey; } @@ -303,6 +291,11 @@ return SkyFunctions.TOP_LEVEL_ASPECTS; } + @Override + public BuildConfigurationKey getConfigurationKey() { + return getBaseConfiguredTargetKey().getConfigurationKey(); + } + ImmutableList<AspectClass> getTopLevelAspectsClasses() { return topLevelAspectsClasses; } @@ -313,7 +306,7 @@ } String getDescription() { - return topLevelAspectsClasses + " on " + getLabel(); + return topLevelAspectsClasses + " on " + targetLabel; } @Override
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD index 4f2693f..9b21b32 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -553,6 +553,7 @@ name = "action_template_expansion_value", srcs = ["ActionTemplateExpansionValue.java"], deps = [ + ":build_configuration", ":sky_functions", "//src/main/java/com/google/devtools/build/lib/actions", "//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key", @@ -1226,6 +1227,7 @@ name = "coverage_report_value", srcs = ["CoverageReportValue.java"], deps = [ + ":build_configuration", ":sky_functions", "//src/main/java/com/google/devtools/build/lib/actions", "//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key", @@ -2768,6 +2770,7 @@ name = "workspace_status_value", srcs = ["WorkspaceStatusValue.java"], deps = [ + ":build_configuration", ":sky_functions", "//src/main/java/com/google/devtools/build/lib/actions", "//src/main/java/com/google/devtools/build/lib/actions:action_lookup_key",
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java index bf97a1f..c2bc3bc 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java
@@ -57,7 +57,7 @@ ImmutableSet.of( WorkspaceStatusValue.BUILD_INFO_KEY, WorkspaceNameValue.key(), - keyAndConfig.getConfigKey()); + keyAndConfig.getConfigurationKey()); Map<SkyKey, SkyValue> result = env.getValues(keysToRequest); if (env.valuesMissing()) { return null; @@ -66,7 +66,7 @@ (WorkspaceStatusValue) result.get(WorkspaceStatusValue.BUILD_INFO_KEY); BuildConfigurationValue config = - (BuildConfigurationValue) result.get(keyAndConfig.getConfigKey()); + (BuildConfigurationValue) result.get(keyAndConfig.getConfigurationKey()); Map<BuildInfoKey, BuildInfoFactory> buildInfoFactories = BUILD_INFO_FACTORIES.get(env); BuildInfoFactory buildInfoFactory = buildInfoFactories.get(keyAndConfig.getInfoKey()); Preconditions.checkState(buildInfoFactory.isEnabled(config));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionValue.java index 76dc915..b3a7409 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionValue.java
@@ -79,12 +79,13 @@ return SkyFunctions.BUILD_INFO_COLLECTION; } - BuildInfoKey getInfoKey() { - return infoKey; + @Override + public BuildConfigurationKey getConfigurationKey() { + return configKey; } - BuildConfigurationKey getConfigKey() { - return configKey; + BuildInfoKey getInfoKey() { + return infoKey; } @Override
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportValue.java index 715e899..e7001df 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportValue.java
@@ -42,6 +42,12 @@ @Nullable @Override + public BuildConfigurationKey getConfigurationKey() { + return null; + } + + @Nullable + @Override public Label getLabel() { return null; }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java index 6c5f9fe..c6d01ad 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
@@ -561,15 +561,12 @@ for (ActionLookupKey ctKey : Iterables.concat(ctKeys, aspectKeys)) { if (!topLevelActionConflictReport.isErrorFree(ctKey)) { Optional<ConflictException> e = topLevelActionConflictReport.getConflictException(ctKey); - if (!e.isPresent()) { + if (e.isEmpty()) { continue; } AnalysisFailedCause failedCause = makeArtifactConflictAnalysisFailedCause(configurationLookupSupplier, e.get()); - BuildConfigurationKey configKey = - ctKey instanceof ConfiguredTargetKey - ? ((ConfiguredTargetKey) ctKey).getConfigurationKey() - : ((AspectKey) ctKey).getAspectConfigurationKey(); + BuildConfigurationKey configKey = ctKey.getConfigurationKey(); eventBus.post( new AnalysisFailureEvent( ctKey,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java index 41e0f31..4b5e69e 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceStatusValue.java
@@ -67,5 +67,11 @@ public Label getLabel() { return null; } + + @Nullable + @Override + public BuildConfigurationKey getConfigurationKey() { + return null; + } } }
diff --git a/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java b/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java index 59a67ac..4bba867 100644 --- a/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java +++ b/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java
@@ -36,6 +36,7 @@ import com.google.devtools.build.lib.cmdline.LabelConstants; import com.google.devtools.build.lib.rules.cpp.CppFileTypes; import com.google.devtools.build.lib.rules.java.JavaSemantics; +import com.google.devtools.build.lib.skyframe.BuildConfigurationKey; import com.google.devtools.build.lib.skyframe.serialization.AutoRegistry; import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecs; import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationDepsUtils; @@ -415,6 +416,11 @@ } @Override + public BuildConfigurationKey getConfigurationKey() { + return null; + } + + @Override public SkyFunctionName functionName() { return null; } @@ -427,6 +433,11 @@ } @Override + public BuildConfigurationKey getConfigurationKey() { + return null; + } + + @Override public SkyFunctionName functionName() { return null; }
diff --git a/src/test/java/com/google/devtools/build/lib/actions/BUILD b/src/test/java/com/google/devtools/build/lib/actions/BUILD index 29414e9..b2de3ed 100644 --- a/src/test/java/com/google/devtools/build/lib/actions/BUILD +++ b/src/test/java/com/google/devtools/build/lib/actions/BUILD
@@ -52,6 +52,7 @@ "//src/main/java/com/google/devtools/build/lib/exec:single_build_file_cache", "//src/main/java/com/google/devtools/build/lib/rules/cpp", "//src/main/java/com/google/devtools/build/lib/rules/java:java-compilation", + "//src/main/java/com/google/devtools/build/lib/skyframe:build_configuration", "//src/main/java/com/google/devtools/build/lib/skyframe:tree_artifact_value", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils",
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 e555944..bf9250d 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
@@ -79,6 +79,7 @@ import com.google.devtools.build.lib.exec.SingleBuildFileCache; import com.google.devtools.build.lib.skyframe.ActionTemplateExpansionValue; import com.google.devtools.build.lib.skyframe.ActionTemplateExpansionValue.ActionTemplateExpansionKey; +import com.google.devtools.build.lib.skyframe.BuildConfigurationKey; import com.google.devtools.build.lib.skyframe.TreeArtifactValue; import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant; import com.google.devtools.build.lib.util.FileType; @@ -387,6 +388,7 @@ @SerializationConstant public static final ActionLookupKey NULL_ARTIFACT_OWNER = new ActionLookupKey() { + @Override public SkyFunctionName functionName() { return null; @@ -397,6 +399,12 @@ return NULL_LABEL; } + @Nullable + @Override + public BuildConfigurationKey getConfigurationKey() { + return null; + } + @Override public String toString() { return "NULL_ARTIFACT_OWNER";
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 8ce6878..25be7cc 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
@@ -36,6 +36,7 @@ "//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/skyframe:action_template_expansion_value", + "//src/main/java/com/google/devtools/build/lib/skyframe:build_configuration", "//src/main/java/com/google/devtools/build/lib/skyframe:tree_artifact_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",
diff --git a/src/test/java/com/google/devtools/build/lib/actions/util/InjectedActionLookupKey.java b/src/test/java/com/google/devtools/build/lib/actions/util/InjectedActionLookupKey.java index 4e61ac9..fa73181 100644 --- a/src/test/java/com/google/devtools/build/lib/actions/util/InjectedActionLookupKey.java +++ b/src/test/java/com/google/devtools/build/lib/actions/util/InjectedActionLookupKey.java
@@ -16,6 +16,7 @@ import com.google.devtools.build.lib.actions.ActionLookupKey; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.skyframe.BuildConfigurationKey; import com.google.devtools.build.skyframe.SkyFunctionName; import javax.annotation.Nullable; @@ -44,6 +45,12 @@ return null; } + @Nullable + @Override + public BuildConfigurationKey getConfigurationKey() { + return null; + } + @Override public int hashCode() { return name.hashCode();
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java b/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java index a9f7cad..9bbb4bf 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java
@@ -31,6 +31,7 @@ import com.google.devtools.build.lib.cmdline.LabelConstants; import com.google.devtools.build.lib.events.EventKind; import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions; +import com.google.devtools.build.lib.skyframe.BuildConfigurationKey; import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.lib.vfs.Root; @@ -71,7 +72,7 @@ } @Test - public void testFilterListForObscuringSymlinksCatchesBadObscurer() throws Exception { + public void testFilterListForObscuringSymlinksCatchesBadObscurer() { Map<PathFragment, Artifact> obscuringMap = new HashMap<>(); PathFragment pathA = PathFragment.create("a"); ArtifactRoot root = ArtifactRoot.asSourceRoot(Root.fromPath(scratch.resolve("/workspace"))); @@ -84,7 +85,7 @@ } @Test - public void testFilterListForObscuringSymlinksCatchesBadGrandParentObscurer() throws Exception { + public void testFilterListForObscuringSymlinksCatchesBadGrandParentObscurer() { Map<PathFragment, Artifact> obscuringMap = new HashMap<>(); PathFragment pathA = PathFragment.create("a"); ArtifactRoot root = ArtifactRoot.asSourceRoot(Root.fromPath(scratch.resolve("/workspace"))); @@ -97,7 +98,7 @@ } @Test - public void testFilterListForObscuringSymlinksCatchesBadObscurerNoListener() throws Exception { + public void testFilterListForObscuringSymlinksCatchesBadObscurerNoListener() { Map<PathFragment, Artifact> obscuringMap = new HashMap<>(); PathFragment pathA = PathFragment.create("a"); ArtifactRoot root = ArtifactRoot.asSourceRoot(Root.fromPath(scratch.resolve("/workspace"))); @@ -109,7 +110,7 @@ } @Test - public void testFilterListForObscuringSymlinksIgnoresOkObscurer() throws Exception { + public void testFilterListForObscuringSymlinksIgnoresOkObscurer() { Map<PathFragment, Artifact> obscuringMap = new HashMap<>(); PathFragment pathA = PathFragment.create("a"); ArtifactRoot root = ArtifactRoot.asSourceRoot(Root.fromPath(scratch.resolve("/workspace"))); @@ -123,7 +124,7 @@ } @Test - public void testFilterListForObscuringSymlinksNoObscurers() throws Exception { + public void testFilterListForObscuringSymlinksNoObscurers() { Map<PathFragment, Artifact> obscuringMap = new HashMap<>(); PathFragment pathA = PathFragment.create("a"); ArtifactRoot root = ArtifactRoot.asSourceRoot(Root.fromPath(scratch.resolve("/workspace"))); @@ -171,6 +172,12 @@ public Label getLabel() { return null; } + + @Nullable + @Override + public BuildConfigurationKey getConfigurationKey() { + return null; + } } @Test
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java index 4c2e6c9..0e1e0a7 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestUtil.java
@@ -52,6 +52,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.ExtendedEventHandler; import com.google.devtools.build.lib.shell.Command; +import com.google.devtools.build.lib.skyframe.BuildConfigurationKey; import com.google.devtools.build.lib.testutil.TestConstants; import com.google.devtools.build.lib.util.CrashFailureDetails; import com.google.devtools.build.lib.util.Fingerprint; @@ -344,6 +345,12 @@ return null; } + @Nullable + @Override + public BuildConfigurationKey getConfigurationKey() { + return null; + } + @Override public SkyFunctionName functionName() { return null;
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java index 3eeecc4..79418fe 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -659,6 +659,12 @@ return null; } + @Nullable + @Override + public BuildConfigurationKey getConfigurationKey() { + return null; + } + @Override public SkyFunctionName functionName() { return null;
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTestBase.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTestBase.java index 0784517..a5ff948 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTestBase.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTestBase.java
@@ -60,6 +60,12 @@ public Label getLabel() { return null; } + + @Nullable + @Override + public BuildConfigurationKey getConfigurationKey() { + return null; + } }; final MockFileSystem fs = new MockFileSystem();