diff options
15 files changed, 39 insertions, 34 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index fdab0c01cc..9898d6fa69 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD @@ -329,6 +329,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib/cmdline", ], deps = [ + "//src/main/java/com/google/devtools/build/lib:config-matching-provider", "//src/main/java/com/google/devtools/build/lib:events", "//src/main/java/com/google/devtools/build/lib:skylarkinterface", "//src/main/java/com/google/devtools/build/lib:syntax", @@ -383,6 +384,17 @@ java_library( ) java_library( + name = "config-matching-provider", + srcs = ["analysis/config/ConfigMatchingProvider.java"], + deps = [ + ":transitive-info-provider", + "//src/main/java/com/google/devtools/build/lib/cmdline", + "//src/main/java/com/google/devtools/build/lib/concurrent", + "//third_party:guava", + ], +) + +java_library( name = "skylark-provider-collection", srcs = ["analysis/SkylarkProviderCollection.java"], deps = [ diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java index 41323b6892..33c7531f4c 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java @@ -37,6 +37,7 @@ import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Attribute.LateBoundDefault; import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.BuildType; +import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper; import com.google.devtools.build.lib.packages.EnvironmentGroup; import com.google.devtools.build.lib.packages.InputFile; import com.google.devtools.build.lib.packages.NoSuchThingException; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java index e17f74a21a..55e1f20879 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java @@ -63,6 +63,7 @@ import com.google.devtools.build.lib.packages.Attribute.SplitTransition; import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy; +import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper; import com.google.devtools.build.lib.packages.FileTarget; import com.google.devtools.build.lib.packages.FilesetEntry; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java index 5b6b267b15..64c27a28d2 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java @@ -245,7 +245,7 @@ public final class TargetCompleteEvent if (!(target instanceof RuleConfiguredTarget)) { return ImmutableList.<String>of(); } - AttributeMap attributes = ConfiguredAttributeMapper.of((RuleConfiguredTarget) target); + AttributeMap attributes = ((RuleConfiguredTarget) target).getAttributeMapper(); // Every rule (implicitly) has a "tags" attribute. return attributes.get("tags", Type.STRING_LIST); } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java index 5079d96ae0..4810512d9a 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java @@ -27,6 +27,7 @@ import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.analysis.config.RunUnder; import com.google.devtools.build.lib.analysis.skylark.SkylarkApiProvider; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper; import com.google.devtools.build.lib.packages.Info; import com.google.devtools.build.lib.packages.OutputFile; import com.google.devtools.build.lib.packages.Provider; @@ -151,4 +152,11 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget { public void repr(SkylarkPrinter printer) { printer.append("<target " + getLabel() + ">"); } + + /** + * Returns a {@link ConfiguredAttributeMapper} containing values of this target's attributes. + */ + public ConfiguredAttributeMapper getAttributeMapper() { + return ConfiguredAttributeMapper.of(getTarget(), getConfigConditions()); + } } diff --git a/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java index 256cf93e6b..a2350703a9 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java +++ b/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java @@ -278,7 +278,7 @@ public class AggregatingAttributeMapper extends AbstractAttributeMapper { * This is because the selects have the same conditions, so whatever matches the first also * matches the second. Note that this doesn't work for selects with overlapping but * <i>different</i> key sets. That's because of key specialization (see - * {@link com.google.devtools.build.lib.analysis.ConfiguredAttributeMapper} - if the + * {@link ConfiguredAttributeMapper} - if the * second select also included a condition <code>':c'</code> that includes both the flags * in <code>':a'</code> and <code>':b'</code>, <code>':c'</code> would be chosen over * them both. diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/ConfiguredAttributeMapper.java index a1da224a6d..d57170fe3d 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapper.java +++ b/src/main/java/com/google/devtools/build/lib/packages/ConfiguredAttributeMapper.java @@ -11,7 +11,7 @@ // 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.analysis; +package com.google.devtools.build.lib.packages; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Joiner; @@ -20,15 +20,9 @@ import com.google.common.base.Verify; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; -import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.packages.AbstractAttributeMapper; -import com.google.devtools.build.lib.packages.Attribute; -import com.google.devtools.build.lib.packages.AttributeMap; -import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.BuildType.Selector; import com.google.devtools.build.lib.packages.BuildType.SelectorList; -import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.util.Preconditions; @@ -71,13 +65,6 @@ public class ConfiguredAttributeMapper extends AbstractAttributeMapper { } /** - * "Do-it-all" constructor that just needs a {@link RuleConfiguredTarget}. - */ - public static ConfiguredAttributeMapper of(RuleConfiguredTarget ct) { - return new ConfiguredAttributeMapper(ct.getTarget(), ct.getConfigConditions()); - } - - /** * "Manual" constructor that requires the caller to pass the set of configurability conditions * that trigger this rule's configurable attributes. * diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/PrintActionCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/PrintActionCommand.java index 2446152193..f9bbde4062 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/PrintActionCommand.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/PrintActionCommand.java @@ -24,7 +24,6 @@ import com.google.devtools.build.lib.actions.CommandLineExpansionException; import com.google.devtools.build.lib.actions.extra.DetailedExtraActionInfo; import com.google.devtools.build.lib.actions.extra.ExtraActionSummary; import com.google.devtools.build.lib.analysis.BuildView; -import com.google.devtools.build.lib.analysis.ConfiguredAttributeMapper; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.FileProvider; import com.google.devtools.build.lib.analysis.OutputGroupProvider; @@ -349,7 +348,7 @@ public final class PrintActionCommand implements BlazeCommand { if (!ruleConfiguredTarget.getTarget().isAttrDefined("hdrs", BuildType.LABEL_LIST)) { return false; } - List<Label> hdrs = ConfiguredAttributeMapper.of(ruleConfiguredTarget) + List<Label> hdrs = ruleConfiguredTarget.getAttributeMapper() .get("hdrs", BuildType.LABEL_LIST); if (hdrs != null) { for (Label hdrLabel : hdrs) { diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapperTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapperTest.java index 5cdec49b87..a5e2c46a3f 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapperTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapperTest.java @@ -50,7 +50,7 @@ public class AspectAwareAttributeMapperTest extends BuildViewTestCase { .allowedFileTypes(FileTypeSet.ANY_FILE) .build(); aspectAttributes = ImmutableMap.<String, Attribute>of(aspectAttr.getName(), aspectAttr); - mapper = new AspectAwareAttributeMapper(ConfiguredAttributeMapper.of(ct), aspectAttributes); + mapper = new AspectAwareAttributeMapper(ct.getAttributeMapper(), aspectAttributes); } @Test diff --git a/src/test/java/com/google/devtools/build/lib/analysis/ConfigurableAttributesTest.java b/src/test/java/com/google/devtools/build/lib/analysis/ConfigurableAttributesTest.java index 3334bd64c4..4c67a880f5 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/ConfigurableAttributesTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/ConfigurableAttributesTest.java @@ -435,13 +435,13 @@ public class ConfigurableAttributesTest extends BuildViewTestCase { // Configuration a: useConfiguration("--test_arg=a"); ConfiguredTarget binary = getConfiguredTarget("//test:the_rule"); - AttributeMap attributes = ConfiguredAttributeMapper.of((RuleConfiguredTarget) binary); + AttributeMap attributes = ((RuleConfiguredTarget) binary).getAttributeMapper(); assertThat(attributes.get("$computed_attr", Type.STRING)).isEqualTo("a2"); // configuration b: useConfiguration("--test_arg=b"); binary = getConfiguredTarget("//test:the_rule"); - attributes = ConfiguredAttributeMapper.of((RuleConfiguredTarget) binary); + attributes = ((RuleConfiguredTarget) binary).getAttributeMapper(); assertThat(attributes.get("$computed_attr", Type.STRING)).isEqualTo("b2"); } @@ -1080,7 +1080,7 @@ public class ConfigurableAttributesTest extends BuildViewTestCase { useConfiguration("--test_arg=a"); ConfiguredTarget binary = getConfiguredTarget("//srctest:gen"); - AttributeMap attributes = ConfiguredAttributeMapper.of((RuleConfiguredTarget) binary); + AttributeMap attributes = ((RuleConfiguredTarget) binary).getAttributeMapper(); assertThat(attributes.get("srcs", BuildType.LABEL_LIST)).isEmpty(); } @@ -1099,7 +1099,7 @@ public class ConfigurableAttributesTest extends BuildViewTestCase { useConfiguration("--test_arg=a"); ConfiguredTarget binary = getConfiguredTarget("//foo:rule"); - AttributeMap attributes = ConfiguredAttributeMapper.of((RuleConfiguredTarget) binary); + AttributeMap attributes = ((RuleConfiguredTarget) binary).getAttributeMapper(); assertThat(attributes.get("dep", BuildType.LABEL)).isEqualTo( Label.parseAbsolute("//foo:default")); } diff --git a/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java b/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java index 1144479115..6ec9372031 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.BuildType; +import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper; import com.google.devtools.build.lib.syntax.Type; import java.util.ArrayList; import java.util.List; @@ -45,8 +46,7 @@ public class ConfiguredAttributeMapperTest extends BuildViewTestCase { * Returns a ConfiguredAttributeMapper bound to the given rule with the target configuration. */ private ConfiguredAttributeMapper getMapper(String label) throws Exception { - return ConfiguredAttributeMapper.of( - (RuleConfiguredTarget) getConfiguredTarget(label)); + return ((RuleConfiguredTarget) getConfiguredTarget(label)).getAttributeMapper(); } private void writeConfigRules() throws Exception { diff --git a/src/test/java/com/google/devtools/build/lib/analysis/select/ConfiguredAttributeMapperCommonTest.java b/src/test/java/com/google/devtools/build/lib/analysis/select/ConfiguredAttributeMapperCommonTest.java index 361e7b9916..9606207a4a 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/select/ConfiguredAttributeMapperCommonTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/select/ConfiguredAttributeMapperCommonTest.java @@ -14,11 +14,10 @@ package com.google.devtools.build.lib.analysis.select; import com.google.common.collect.ImmutableMap; -import com.google.devtools.build.lib.analysis.ConfiguredAttributeMapper; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.AbstractAttributeMapper; - +import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper; import org.junit.Before; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; 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 5cc4fd146b..5ea5d2f953 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 @@ -50,7 +50,6 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.BuildView; import com.google.devtools.build.lib.analysis.BuildView.AnalysisResult; import com.google.devtools.build.lib.analysis.CachingAnalysisEnvironment; -import com.google.devtools.build.lib.analysis.ConfiguredAttributeMapper; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.ExtraActionArtifactsProvider; @@ -1496,7 +1495,7 @@ public abstract class BuildViewTestCase extends FoundationTestCase { * Returns an attribute value retriever for the given rule for the target configuration. */ protected AttributeMap attributes(RuleConfiguredTarget ct) { - return ConfiguredAttributeMapper.of(ct); + return ct.getAttributeMapper(); } protected AttributeMap attributes(ConfiguredTarget rule) { diff --git a/src/test/java/com/google/devtools/build/lib/packages/ExternalPackageTest.java b/src/test/java/com/google/devtools/build/lib/packages/ExternalPackageTest.java index 5a485de9da..37798bd3e1 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/ExternalPackageTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/ExternalPackageTest.java @@ -15,7 +15,6 @@ package com.google.devtools.build.lib.packages; import static com.google.common.truth.Truth.assertThat; -import com.google.devtools.build.lib.analysis.ConfiguredAttributeMapper; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget; import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; import com.google.devtools.build.lib.cmdline.Label; @@ -103,7 +102,7 @@ public class ExternalPackageTest extends BuildViewTestCase { invalidatePackages(); useConfiguration("--define", "foo=bar"); ConfiguredAttributeMapper configuredAttributeMapper = - ConfiguredAttributeMapper.of((RuleConfiguredTarget) getConfiguredTarget("//:a")); + ((RuleConfiguredTarget) getConfiguredTarget("//:a")).getAttributeMapper(); assertThat(configuredAttributeMapper.get("runtime_deps", BuildType.LABEL_LIST)) .containsExactly(Label.parseAbsolute("//:b")); } diff --git a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java index ccdeb2d17b..9629bbd54e 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java @@ -19,11 +19,11 @@ import static com.google.common.truth.Truth.assertThat; import com.google.common.base.Predicates; import com.google.common.collect.Iterables; import com.google.common.testing.EqualsTester; -import com.google.devtools.build.lib.analysis.ConfiguredAttributeMapper; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget; import com.google.devtools.build.lib.analysis.skylark.SkylarkRuleContext; +import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper; import com.google.devtools.build.lib.skylark.util.SkylarkTestCase; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; @@ -114,8 +114,8 @@ public final class ConfigFeatureFlagTest extends SkylarkTestCase { " '//conditions:default': 'error'", " }))"); - ConfiguredAttributeMapper attributeMapper = ConfiguredAttributeMapper.of( - (RuleConfiguredTarget) getConfiguredTarget("//test:gen")); + ConfiguredAttributeMapper attributeMapper = + ((RuleConfiguredTarget) getConfiguredTarget("//test:gen")).getAttributeMapper(); assertThat(attributeMapper.get("cmd", Type.STRING)).isEqualTo("hello"); } |