diff options
author | Greg Estren <gregce@google.com> | 2015-11-12 21:10:19 +0000 |
---|---|---|
committer | Lukacs Berki <lberki@google.com> | 2015-11-13 10:22:35 +0000 |
commit | ca1b21ac6d8a58041db822725b42de151b163dee (patch) | |
tree | e309a78ce4fc5d53ae0ae408aeef253afa330768 /src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentValue.java | |
parent | 517bc6f698eca41356909499c98f91bc69141f2f (diff) |
Pre-trim build options for all remaining calls to ConfigurationFragment.key. Move
the trimming logic into key() itself to:
a) eliminate code redundancy
b) guarantee all future calls to key() also do this.
--
MOS_MIGRATED_REVID=107713353
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentValue.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentValue.java | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentValue.java index 10a5f18dce..3e14e7f53a 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentValue.java @@ -14,11 +14,13 @@ package com.google.devtools.build.lib.skyframe; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; 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.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; +import com.google.devtools.build.lib.packages.RuleClassProvider; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; @@ -46,9 +48,16 @@ public class ConfigurationFragmentValue implements SkyValue { } @ThreadSafe - public static SkyKey key(BuildOptions buildOptions, Class<? extends Fragment> fragmentType) { + public static SkyKey key(BuildOptions buildOptions, Class<? extends Fragment> fragmentType, + RuleClassProvider ruleClassProvider) { + // Trim the options down to just those used by this fragment. This ensures we don't end + // up with different Skyframe keys due to trimming of unrelated options. + BuildOptions optionsUsedByFragment = buildOptions.trim( + BuildConfiguration.getOptionsClasses( + ImmutableList.<Class<? extends BuildConfiguration.Fragment>>of(fragmentType), + ruleClassProvider)); return new SkyKey(SkyFunctions.CONFIGURATION_FRAGMENT, - new ConfigurationFragmentKey(buildOptions, fragmentType)); + new ConfigurationFragmentKey(optionsUsedByFragment, fragmentType)); } static final class ConfigurationFragmentKey implements Serializable { |