diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java index fb13cfb218..1edf561a50 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java @@ -27,6 +27,7 @@ import com.google.devtools.build.lib.actions.FailAction; import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment; +import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition; @@ -90,9 +91,12 @@ public final class ConfiguredTargetFactory { // in order to be accessible from the .view.skyframe package. private final ConfiguredRuleClassProvider ruleClassProvider; + private final BuildOptions defaultBuildOptions; - public ConfiguredTargetFactory(ConfiguredRuleClassProvider ruleClassProvider) { + public ConfiguredTargetFactory( + ConfiguredRuleClassProvider ruleClassProvider, BuildOptions defaultBuildOptions) { this.ruleClassProvider = ruleClassProvider; + this.defaultBuildOptions = defaultBuildOptions; } /** @@ -174,7 +178,8 @@ public final class ConfiguredTargetFactory { ArtifactOwner owner = ConfiguredTargetKey.of( rule.getLabel(), - getArtifactOwnerConfiguration(analysisEnvironment.getSkyframeEnv(), configuration)); + getArtifactOwnerConfiguration( + analysisEnvironment.getSkyframeEnv(), configuration, defaultBuildOptions)); if (analysisEnvironment.getSkyframeEnv().valuesMissing()) { return null; } @@ -190,11 +195,12 @@ public final class ConfiguredTargetFactory { } /** - * Returns the configuration's artifact owner (which may be null). Also returns null if the - * owning configuration isn't yet available from Skyframe. + * Returns the configuration's artifact owner (which may be null). Also returns null if the owning + * configuration isn't yet available from Skyframe. */ - public static BuildConfiguration getArtifactOwnerConfiguration(SkyFunction.Environment env, - BuildConfiguration fromConfig) throws InterruptedException { + public static BuildConfiguration getArtifactOwnerConfiguration( + SkyFunction.Environment env, BuildConfiguration fromConfig, BuildOptions defaultBuildOptions) + throws InterruptedException { if (fromConfig == null) { return null; } @@ -203,10 +209,14 @@ public final class ConfiguredTargetFactory { return fromConfig; } try { - BuildConfigurationValue ownerConfig = (BuildConfigurationValue) env.getValueOrThrow( - BuildConfigurationValue.key( - fromConfig.fragmentClasses(), ownerTransition.apply(fromConfig.getOptions())), - InvalidConfigurationException.class); + BuildConfigurationValue ownerConfig = + (BuildConfigurationValue) + env.getValueOrThrow( + BuildConfigurationValue.key( + fromConfig.fragmentClasses(), + BuildOptions.diffForReconstruction( + defaultBuildOptions, ownerTransition.apply(fromConfig.getOptions()))), + InvalidConfigurationException.class); return ownerConfig == null ? null : ownerConfig.getConfiguration(); } catch (InvalidConfigurationException e) { // We don't expect to have to handle an invalid configuration because in practice the owning |