aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar John Cater <jcater@google.com>2017-06-02 02:54:37 +0200
committerGravatar László Csomor <laszlocsomor@google.com>2017-06-02 15:27:18 +0200
commit96180fa5de610990f7ab6df5906b6deb5636df9c (patch)
tree13a5f64ec68db73453d650ed33c03347a23a0b17
parentd028d7854d3e95d97143945a1ec32944e5e4594b (diff)
Move helper methods for accessing platform providers to a utility class.
Change-Id: I45d0cf8e5096ad4ab516af5ddaa98eea8d516c04 PiperOrigin-RevId: 157788771
-rw-r--r--src/main/java/com/google/devtools/build/lib/BUILD10
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviderCollection.java52
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java59
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD22
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformProviderUtils.java93
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/platform/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintSetting.java27
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintValue.java30
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/platform/Platform.java34
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/platform/SkylarkToolchainConstructor.java23
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/platform/BUILD2
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfoTest.java5
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfoTest.java7
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/platform/PlatformInfoTest.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/platform/BUILD2
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintTest.java17
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/platform/PlatformTest.java7
17 files changed, 224 insertions, 170 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index 08f2703347..ef5e0ebf3b 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -544,6 +544,15 @@ java_library(
)
java_library(
+ name = "skylark-provider-collection",
+ srcs = ["analysis/SkylarkProviderCollection.java"],
+ deps = [
+ ":packages-internal",
+ "//third_party:jsr305",
+ ],
+)
+
+java_library(
name = "build-configuration-option-details",
srcs = ["analysis/config/BuildConfigurationOptionDetails.java"],
visibility = [
@@ -597,6 +606,7 @@ java_library(
":os_util",
":packages-internal",
":shell",
+ ":skylark-provider-collection",
":skylarkinterface",
":syntax",
":transitive-info-provider",
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviderCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviderCollection.java
new file mode 100644
index 0000000000..c5c2130dd0
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviderCollection.java
@@ -0,0 +1,52 @@
+// Copyright 2017 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.analysis;
+
+import com.google.devtools.build.lib.packages.ClassObjectConstructor;
+import com.google.devtools.build.lib.packages.SkylarkClassObject;
+import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
+import javax.annotation.Nullable;
+
+/**
+ * Interface to mark classes that could contain transitive information added using the Skylark
+ * framework.
+ */
+public interface SkylarkProviderCollection {
+
+ /**
+ * Returns the transitive information requested or null, if the information is not found. The
+ * transitive information has to have been added using the Skylark framework.
+ */
+ @Nullable
+ Object get(String providerKey);
+
+ /**
+ * Returns the declared provider requested, or null, if the information is not found. The
+ * transitive information has to have been added using the Skylark framework.
+ */
+ @Nullable
+ SkylarkClassObject get(ClassObjectConstructor.Key providerKey);
+
+ /**
+ * Returns the provider defined in Skylark, or null, if the information is not found. The
+ * transitive information has to have been added using the Skylark framework.
+ *
+ * <p>This method dispatches to either {@link #get(ClassObjectConstructor.Key)} or {@link
+ * #get(String)} depending on whether {@link SkylarkProviderIdentifier} is for legacy or for
+ * declared provider.
+ */
+ @Nullable
+ Object get(SkylarkProviderIdentifier id);
+}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java
index 03f9d955c8..b174a47699 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java
@@ -16,9 +16,6 @@ package com.google.devtools.build.lib.analysis;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.packages.ClassObjectConstructor;
-import com.google.devtools.build.lib.packages.SkylarkClassObject;
-import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
import com.google.devtools.build.lib.syntax.SkylarkIndexable;
@@ -44,21 +41,25 @@ import javax.annotation.Nullable;
category = SkylarkModuleCategory.BUILTIN,
doc =
"A BUILD target. It is essentially a <code>struct</code> with the following fields:"
- + "<ul>"
- + "<li><h3 id=\"modules.Target.label\">label</h3><code><a class=\"anchor\" "
- + "href=\"Label.html\">Label</a> Target.label</code><br>The identifier of the target.</li>"
- + "<li><h3 id=\"modules.Target.files\">files</h3><code><a class=\"anchor\" "
- + "href=\"depset.html\">depset</a> Target.files </code><br>The set of <a class=\"anchor\" "
- + "href=\"File.html\">File</a>s produced directly by this target.</li>"
- + "<li><h3 id=\"modules.Target.aspect_ids\">aspect_ids</h3><code><a class=\"anchor\""
- + "href=\"list.html\">list</a> Target.aspect_ids </code><br>The list of <a class=\"anchor\" "
- + "href=\"ctx.html#aspect_id\">aspect_id</a>s applied to this target.</li>"
- + "<li><h3 id=\"modules.Target.extraproviders\">Extra providers</h3>For rule targets all "
- + "additional providers provided by this target are accessible as <code>struct</code> fields. "
- + "These extra providers are defined in the <code>struct</code> returned by the rule "
- + "implementation function.</li>"
- + "</ul>")
-public interface TransitiveInfoCollection extends SkylarkIndexable {
+ + "<ul>"
+ + "<li><h3 id=\"modules.Target.label\">label</h3><code><a class=\"anchor\" "
+ + "href=\"Label.html\">Label</a> Target.label</code><br>The identifier of the "
+ + "target.</li>"
+ + "<li><h3 id=\"modules.Target.files\">files</h3><code><a class=\"anchor\" "
+ + "href=\"depset.html\">depset</a> Target.files </code><br>The set of "
+ + "<a class=\"anchor\" href=\"File.html\">File</a>s produced directly by this "
+ + "target.</li>"
+ + "<li><h3 id=\"modules.Target.aspect_ids\">aspect_ids</h3><code><a class=\"anchor\""
+ + "href=\"list.html\">list</a> Target.aspect_ids </code><br>The list of "
+ + "<a class=\"anchor\" href=\"ctx.html#aspect_id\">aspect_id</a>s applied to this "
+ + "target.</li>"
+ + "<li><h3 id=\"modules.Target.extraproviders\">Extra providers</h3>For rule targets all "
+ + "additional providers provided by this target are accessible as <code>struct</code> "
+ + "fields. These extra providers are defined in the <code>struct</code> returned by the "
+ + "rule implementation function.</li>"
+ + "</ul>"
+)
+public interface TransitiveInfoCollection extends SkylarkIndexable, SkylarkProviderCollection {
/**
* Returns the transitive information provider requested, or null if the provider is not found.
@@ -78,26 +79,4 @@ public interface TransitiveInfoCollection extends SkylarkIndexable {
* <b>null</b>.</p>
*/
@Nullable BuildConfiguration getConfiguration();
-
- /**
- * Returns the transitive information requested or null, if the information is not found.
- * The transitive information has to have been added using the Skylark framework.
- */
- @Nullable Object get(String providerKey);
-
- /**
- * Returns the declared provider requested, or null, if the information is not found.
- * The transitive information has to have been added using the Skylark framework.
- */
- @Nullable SkylarkClassObject get(ClassObjectConstructor.Key providerKey);
-
- /**
- * Returns the provider defined in Skylark, or null, if the information is not found.
- * The transitive information has to have been added using the Skylark framework.
- *
- * This method dispatches to either {@link #get(ClassObjectConstructor.Key)} or
- * {@link #get(String)} depending on whether {@link SkylarkProviderIdentifier} is for
- * legacy or for declared provider.
- */
- @Nullable Object get(SkylarkProviderIdentifier id);
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD b/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD
index ce3a69d759..e5c4231f14 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/BUILD
@@ -5,11 +5,16 @@ package(
default_visibility = ["//src:__subpackages__"],
)
+UTIL_SRCS = ["PlatformProviderUtils.java"]
+
java_library(
name = "platform",
- srcs = glob([
- "*.java",
- ]),
+ srcs = glob(
+ [
+ "*.java",
+ ],
+ exclude = UTIL_SRCS,
+ ),
deps = [
"//src/main/java/com/google/devtools/build/lib:packages",
"//src/main/java/com/google/devtools/build/lib:skylarkinterface",
@@ -17,6 +22,17 @@ java_library(
],
)
+java_library(
+ name = "utils",
+ srcs = UTIL_SRCS,
+ deps = [
+ ":platform",
+ "//src/main/java/com/google/devtools/build/lib:preconditions",
+ "//src/main/java/com/google/devtools/build/lib:skylark-provider-collection",
+ "//third_party:guava",
+ ],
+)
+
filegroup(
name = "srcs",
testonly = 0, # All srcs should be not test only, overwrite package default.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformProviderUtils.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformProviderUtils.java
new file mode 100644
index 0000000000..7a5d06d969
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformProviderUtils.java
@@ -0,0 +1,93 @@
+// Copyright 2017 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.analysis.platform;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
+import com.google.devtools.build.lib.analysis.SkylarkProviderCollection;
+import com.google.devtools.build.lib.util.Preconditions;
+
+/** Utility methods to help locate platform-related providers. */
+public class PlatformProviderUtils {
+
+ /** Retrieves and casts the {@link PlatformInfo} provider from the given target. */
+ public static PlatformInfo platform(SkylarkProviderCollection target) {
+ Object provider = target.get(PlatformInfo.SKYLARK_IDENTIFIER);
+ if (provider == null) {
+ return null;
+ }
+ Preconditions.checkState(provider instanceof PlatformInfo);
+ return (PlatformInfo) provider;
+ }
+
+ /** Retrieves and casts {@link PlatformInfo} providers from the given targets. */
+ public static Iterable<PlatformInfo> platforms(
+ Iterable<? extends SkylarkProviderCollection> targets) {
+ return Iterables.transform(
+ targets,
+ new Function<SkylarkProviderCollection, PlatformInfo>() {
+ @Override
+ public PlatformInfo apply(SkylarkProviderCollection target) {
+ return platform(target);
+ }
+ });
+ }
+
+ /** Retrieves and casts the {@link ConstraintSettingInfo} provider from the given target. */
+ public static ConstraintSettingInfo constraintSetting(SkylarkProviderCollection target) {
+ Object provider = target.get(ConstraintSettingInfo.SKYLARK_IDENTIFIER);
+ if (provider == null) {
+ return null;
+ }
+ Preconditions.checkState(provider instanceof ConstraintSettingInfo);
+ return (ConstraintSettingInfo) provider;
+ }
+
+ /** Retrieves and casts {@link ConstraintSettingInfo} providers from the given targets. */
+ public static Iterable<ConstraintSettingInfo> constraintSettings(
+ Iterable<? extends SkylarkProviderCollection> targets) {
+ return Iterables.transform(
+ targets,
+ new Function<SkylarkProviderCollection, ConstraintSettingInfo>() {
+ @Override
+ public ConstraintSettingInfo apply(SkylarkProviderCollection target) {
+ return constraintSetting(target);
+ }
+ });
+ }
+
+ /** Retrieves and casts the {@link ConstraintValueInfo} provider from the given target. */
+ public static ConstraintValueInfo constraintValue(SkylarkProviderCollection target) {
+ Object provider = target.get(ConstraintValueInfo.SKYLARK_IDENTIFIER);
+ if (provider == null) {
+ return null;
+ }
+ Preconditions.checkState(provider instanceof ConstraintValueInfo);
+ return (ConstraintValueInfo) provider;
+ }
+
+ /** Retrieves and casts {@link ConstraintValueInfo} providers from the given targets. */
+ public static Iterable<ConstraintValueInfo> constraintValues(
+ Iterable<? extends SkylarkProviderCollection> targets) {
+ return Iterables.transform(
+ targets,
+ new Function<SkylarkProviderCollection, ConstraintValueInfo>() {
+ @Override
+ public ConstraintValueInfo apply(SkylarkProviderCollection target) {
+ return constraintValue(target);
+ }
+ });
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/BUILD b/src/main/java/com/google/devtools/build/lib/rules/platform/BUILD
index c3a8cc5103..3aa6097a3e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/platform/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/BUILD
@@ -15,6 +15,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib:packages",
"//src/main/java/com/google/devtools/build/lib:skylarkinterface",
"//src/main/java/com/google/devtools/build/lib/analysis/platform",
+ "//src/main/java/com/google/devtools/build/lib/analysis/platform:utils",
"//third_party:guava",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintSetting.java b/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintSetting.java
index 6c903fd04a..b7088d3c7b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintSetting.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintSetting.java
@@ -14,18 +14,14 @@
package com.google.devtools.build.lib.rules.platform;
-import com.google.common.base.Function;
-import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.FileProvider;
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.RunfilesProvider;
-import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.platform.ConstraintSettingInfo;
import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
-import com.google.devtools.build.lib.util.Preconditions;
/**
* Defines a category of constraint that can be fulfilled by a constraint_value rule in a platform
@@ -44,27 +40,4 @@ public class ConstraintSetting implements RuleConfiguredTargetFactory {
.addNativeDeclaredProvider(ConstraintSettingInfo.create(ruleContext.getLabel()))
.build();
}
-
- /** Retrieves and casts the provider from the given target. */
- public static ConstraintSettingInfo constraintSetting(TransitiveInfoCollection target) {
- Object provider = target.get(ConstraintSettingInfo.SKYLARK_IDENTIFIER);
- if (provider == null) {
- return null;
- }
- Preconditions.checkState(provider instanceof ConstraintSettingInfo);
- return (ConstraintSettingInfo) provider;
- }
-
- /** Retrieves and casts the providers from the given targets. */
- public static Iterable<ConstraintSettingInfo> constraintSettings(
- Iterable<? extends TransitiveInfoCollection> targets) {
- return Iterables.transform(
- targets,
- new Function<TransitiveInfoCollection, ConstraintSettingInfo>() {
- @Override
- public ConstraintSettingInfo apply(TransitiveInfoCollection target) {
- return constraintSetting(target);
- }
- });
- }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintValue.java b/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintValue.java
index 1eb3ba1802..21e7588089 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintValue.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/ConstraintValue.java
@@ -14,8 +14,6 @@
package com.google.devtools.build.lib.rules.platform;
-import com.google.common.base.Function;
-import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.FileProvider;
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
@@ -23,11 +21,10 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.RunfilesProvider;
-import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.platform.ConstraintSettingInfo;
import com.google.devtools.build.lib.analysis.platform.ConstraintValueInfo;
+import com.google.devtools.build.lib.analysis.platform.PlatformProviderUtils;
import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
-import com.google.devtools.build.lib.util.Preconditions;
/** Defines a potential value of a constraint. */
public class ConstraintValue implements RuleConfiguredTargetFactory {
@@ -37,7 +34,7 @@ public class ConstraintValue implements RuleConfiguredTargetFactory {
throws InterruptedException, RuleErrorException {
ConstraintSettingInfo constraint =
- ConstraintSetting.constraintSetting(
+ PlatformProviderUtils.constraintSetting(
ruleContext.getPrerequisite(
ConstraintValueRule.CONSTRAINT_SETTING_ATTR, Mode.DONT_CHECK));
@@ -48,27 +45,4 @@ public class ConstraintValue implements RuleConfiguredTargetFactory {
.addNativeDeclaredProvider(ConstraintValueInfo.create(constraint, ruleContext.getLabel()))
.build();
}
-
- /** Retrieves and casts the provider from the given target. */
- public static ConstraintValueInfo constraintValue(TransitiveInfoCollection target) {
- Object provider = target.get(ConstraintValueInfo.SKYLARK_IDENTIFIER);
- if (provider == null) {
- return null;
- }
- Preconditions.checkState(provider instanceof ConstraintValueInfo);
- return (ConstraintValueInfo) provider;
- }
-
- /** Retrieves and casts the providers from the given targets. */
- public static Iterable<ConstraintValueInfo> constraintValues(
- Iterable<? extends TransitiveInfoCollection> targets) {
- return Iterables.transform(
- targets,
- new Function<TransitiveInfoCollection, ConstraintValueInfo>() {
- @Override
- public ConstraintValueInfo apply(TransitiveInfoCollection target) {
- return constraintValue(target);
- }
- });
- }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/Platform.java b/src/main/java/com/google/devtools/build/lib/rules/platform/Platform.java
index 184f7a8a07..87d4b6be7a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/platform/Platform.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/Platform.java
@@ -14,8 +14,6 @@
package com.google.devtools.build.lib.rules.platform;
-import com.google.common.base.Function;
-import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.FileProvider;
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
@@ -23,14 +21,13 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.RunfilesProvider;
-import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.platform.ConstraintValueInfo;
import com.google.devtools.build.lib.analysis.platform.PlatformInfo;
+import com.google.devtools.build.lib.analysis.platform.PlatformProviderUtils;
import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.CPU;
import com.google.devtools.build.lib.util.OS;
-import com.google.devtools.build.lib.util.Preconditions;
import java.util.Map;
/** Defines a platform for execution contexts. */
@@ -46,7 +43,7 @@ public class Platform implements RuleConfiguredTargetFactory {
autodetectHostConstraints(ruleContext, platformBuilder);
} else {
platformBuilder.addConstraints(
- ConstraintValue.constraintValues(
+ PlatformProviderUtils.constraintValues(
ruleContext.getPrerequisites(PlatformRule.CONSTRAINT_VALUES_ATTR, Mode.DONT_CHECK)));
}
@@ -77,7 +74,7 @@ public class Platform implements RuleConfiguredTargetFactory {
// Add the CPU.
CPU cpu = CPU.getCurrent();
Iterable<ConstraintValueInfo> cpuConstraintValues =
- ConstraintValue.constraintValues(
+ PlatformProviderUtils.constraintValues(
ruleContext.getPrerequisites(PlatformRule.HOST_CPU_CONSTRAINTS_ATTR, Mode.DONT_CHECK));
for (ConstraintValueInfo constraint : cpuConstraintValues) {
if (cpu.getCanonicalName().equals(constraint.label().getName())) {
@@ -89,7 +86,7 @@ public class Platform implements RuleConfiguredTargetFactory {
// Add the OS.
OS os = OS.getCurrent();
Iterable<ConstraintValueInfo> osConstraintValues =
- ConstraintValue.constraintValues(
+ PlatformProviderUtils.constraintValues(
ruleContext.getPrerequisites(PlatformRule.HOST_OS_CONSTRAINTS_ATTR, Mode.DONT_CHECK));
for (ConstraintValueInfo constraint : osConstraintValues) {
if (os.getCanonicalName().equals(constraint.label().getName())) {
@@ -98,27 +95,4 @@ public class Platform implements RuleConfiguredTargetFactory {
}
}
}
-
- /** Retrieves and casts the provider from the given target. */
- public static PlatformInfo platform(TransitiveInfoCollection target) {
- Object provider = target.get(PlatformInfo.SKYLARK_IDENTIFIER);
- if (provider == null) {
- return null;
- }
- Preconditions.checkState(provider instanceof PlatformInfo);
- return (PlatformInfo) provider;
- }
-
- /** Retrieves and casts the providers from the given targets. */
- public static Iterable<PlatformInfo> platforms(
- Iterable<? extends TransitiveInfoCollection> targets) {
- return Iterables.transform(
- targets,
- new Function<TransitiveInfoCollection, PlatformInfo>() {
- @Override
- public PlatformInfo apply(TransitiveInfoCollection target) {
- return platform(target);
- }
- });
- }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/SkylarkToolchainConstructor.java b/src/main/java/com/google/devtools/build/lib/rules/platform/SkylarkToolchainConstructor.java
index 41d7cd1087..47b2d8c427 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/platform/SkylarkToolchainConstructor.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/SkylarkToolchainConstructor.java
@@ -14,9 +14,9 @@
package com.google.devtools.build.lib.rules.platform;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.platform.ConstraintValueInfo;
+import com.google.devtools.build.lib.analysis.platform.PlatformProviderUtils;
import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
@@ -28,8 +28,6 @@ import com.google.devtools.build.lib.syntax.FunctionSignature;
import com.google.devtools.build.lib.syntax.SkylarkDict;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.SkylarkType;
-import java.util.Map;
-import java.util.Set;
import javax.annotation.Nullable;
/** Skylark value that can be used to create toolchains. */
@@ -74,27 +72,12 @@ public class SkylarkToolchainConstructor extends SkylarkClassObjectConstructor
// Based on SIGNATURE above, the args are exec (list), target (list), data (map).
Iterable<ConstraintValueInfo> execConstraints =
- ConstraintValue.constraintValues((SkylarkList<TransitiveInfoCollection>) args[0]);
+ PlatformProviderUtils.constraintValues((SkylarkList<TransitiveInfoCollection>) args[0]);
Iterable<ConstraintValueInfo> targetConstraints =
- ConstraintValue.constraintValues((SkylarkList<TransitiveInfoCollection>) args[1]);
+ PlatformProviderUtils.constraintValues((SkylarkList<TransitiveInfoCollection>) args[1]);
SkylarkDict<String, Object> toolchainData = (SkylarkDict<String, Object>) args[2];
Location loc = ast != null ? ast.getLocation() : Location.BUILTIN;
return new ToolchainInfo(getKey(), execConstraints, targetConstraints, toolchainData, loc);
}
-
- private Map<String, Object> collectData(
- SkylarkDict<String, Object> receivedArguments, Set<String> ignoredKeys) {
-
- ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
- for (Map.Entry<String, Object> entry : receivedArguments.entrySet()) {
- String key = entry.getKey();
- Object value = entry.getValue();
- if (!ignoredKeys.contains(key)) {
- builder.put(key, value);
- }
- }
-
- return builder.build();
- }
}
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/platform/BUILD b/src/test/java/com/google/devtools/build/lib/analysis/platform/BUILD
index 6bacfd18c5..0b9feba7f1 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/platform/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/analysis/platform/BUILD
@@ -16,8 +16,8 @@ java_test(
"//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib:util",
"//src/main/java/com/google/devtools/build/lib/analysis/platform",
+ "//src/main/java/com/google/devtools/build/lib/analysis/platform:utils",
"//src/main/java/com/google/devtools/build/lib/cmdline",
- "//src/main/java/com/google/devtools/build/lib/rules/platform",
"//src/test/java/com/google/devtools/build/lib:analysis_testutil",
"//src/test/java/com/google/devtools/build/lib:packages_testutil",
"//src/test/java/com/google/devtools/build/lib/skylark:testutil",
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfoTest.java b/src/test/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfoTest.java
index ddc66d71b3..ca34b45f40 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfoTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfoTest.java
@@ -20,7 +20,6 @@ import com.google.common.testing.EqualsTester;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.rules.platform.ConstraintSetting;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -58,8 +57,8 @@ public class ConstraintSettingInfoTest extends BuildViewTestCase {
ConfiguredTarget setting = getConfiguredTarget("//test/platform:custom");
assertThat(setting).isNotNull();
- assertThat(ConstraintSetting.constraintSetting(setting)).isNotNull();
- assertThat(ConstraintSetting.constraintSetting(setting).label())
+ assertThat(PlatformProviderUtils.constraintSetting(setting)).isNotNull();
+ assertThat(PlatformProviderUtils.constraintSetting(setting).label())
.isEqualTo(Label.parseAbsolute("//test/platform:custom"));
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfoTest.java b/src/test/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfoTest.java
index 9a6e6d21c3..9684124862 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfoTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfoTest.java
@@ -20,7 +20,6 @@ import com.google.common.testing.EqualsTester;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.rules.platform.ConstraintValue;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -73,10 +72,10 @@ public class ConstraintValueInfoTest extends BuildViewTestCase {
ConfiguredTarget value = getConfiguredTarget("//test/platform:custom");
assertThat(value).isNotNull();
- assertThat(ConstraintValue.constraintValue(value)).isNotNull();
- assertThat(ConstraintValue.constraintValue(value).constraint().label())
+ assertThat(PlatformProviderUtils.constraintValue(value)).isNotNull();
+ assertThat(PlatformProviderUtils.constraintValue(value).constraint().label())
.isEqualTo(Label.parseAbsolute("//test/platform:basic"));
- assertThat(ConstraintValue.constraintValue(value).label())
+ assertThat(PlatformProviderUtils.constraintValue(value).label())
.isEqualTo(Label.parseAbsolute("//test/platform:custom"));
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/platform/PlatformInfoTest.java b/src/test/java/com/google/devtools/build/lib/analysis/platform/PlatformInfoTest.java
index d8f0029011..4553647f1f 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/platform/PlatformInfoTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/platform/PlatformInfoTest.java
@@ -19,7 +19,6 @@ import static com.google.common.truth.Truth.assertThat;
import com.google.common.testing.EqualsTester;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
-import com.google.devtools.build.lib.rules.platform.Platform;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -116,7 +115,7 @@ public class PlatformInfoTest extends BuildViewTestCase {
ConfiguredTarget platform = getConfiguredTarget("//test/platform:custom");
assertThat(platform).isNotNull();
- PlatformInfo provider = Platform.platform(platform);
+ PlatformInfo provider = PlatformProviderUtils.platform(platform);
assertThat(provider).isNotNull();
assertThat(provider.constraints()).hasSize(1);
ConstraintSettingInfo constraintSetting =
diff --git a/src/test/java/com/google/devtools/build/lib/rules/platform/BUILD b/src/test/java/com/google/devtools/build/lib/rules/platform/BUILD
index 981b5b15f2..781420d5f7 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/platform/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/rules/platform/BUILD
@@ -15,8 +15,8 @@ java_test(
"//src/main/java/com/google/devtools/build/lib:syntax",
"//src/main/java/com/google/devtools/build/lib:util",
"//src/main/java/com/google/devtools/build/lib/analysis/platform",
+ "//src/main/java/com/google/devtools/build/lib/analysis/platform:utils",
"//src/main/java/com/google/devtools/build/lib/cmdline",
- "//src/main/java/com/google/devtools/build/lib/rules/platform",
"//src/test/java/com/google/devtools/build/lib:analysis_testutil",
"//src/test/java/com/google/devtools/build/lib:packages_testutil",
"//src/test/java/com/google/devtools/build/lib/skylark:testutil",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintTest.java b/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintTest.java
index fbf1e196cb..23ff526c18 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/platform/ConstraintTest.java
@@ -17,6 +17,7 @@ package com.google.devtools.build.lib.rules.platform;
import static com.google.common.truth.Truth.assertThat;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.analysis.platform.PlatformProviderUtils;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.cmdline.Label;
import org.junit.Before;
@@ -45,22 +46,22 @@ public class ConstraintTest extends BuildViewTestCase {
public void testConstraint() throws Exception {
ConfiguredTarget setting = getConfiguredTarget("//constraint:basic");
assertThat(setting).isNotNull();
- assertThat(ConstraintSetting.constraintSetting(setting)).isNotNull();
- assertThat(ConstraintSetting.constraintSetting(setting)).isNotNull();
- assertThat(ConstraintSetting.constraintSetting(setting).label())
+ assertThat(PlatformProviderUtils.constraintSetting(setting)).isNotNull();
+ assertThat(PlatformProviderUtils.constraintSetting(setting)).isNotNull();
+ assertThat(PlatformProviderUtils.constraintSetting(setting).label())
.isEqualTo(Label.parseAbsolute("//constraint:basic"));
ConfiguredTarget fooValue = getConfiguredTarget("//constraint:foo");
assertThat(fooValue).isNotNull();
- assertThat(ConstraintValue.constraintValue(fooValue)).isNotNull();
- assertThat(ConstraintValue.constraintValue(fooValue).constraint().label())
+ assertThat(PlatformProviderUtils.constraintValue(fooValue)).isNotNull();
+ assertThat(PlatformProviderUtils.constraintValue(fooValue).constraint().label())
.isEqualTo(Label.parseAbsolute("//constraint:basic"));
- assertThat(ConstraintValue.constraintValue(fooValue).label())
+ assertThat(PlatformProviderUtils.constraintValue(fooValue).label())
.isEqualTo(Label.parseAbsolute("//constraint:foo"));
ConfiguredTarget barValue = getConfiguredTarget("//constraint:bar");
assertThat(barValue).isNotNull();
- assertThat(ConstraintValue.constraintValue(barValue).constraint().label())
+ assertThat(PlatformProviderUtils.constraintValue(barValue).constraint().label())
.isEqualTo(Label.parseAbsolute("//constraint:basic"));
- assertThat(ConstraintValue.constraintValue(barValue).label())
+ assertThat(PlatformProviderUtils.constraintValue(barValue).label())
.isEqualTo(Label.parseAbsolute("//constraint:bar"));
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/platform/PlatformTest.java b/src/test/java/com/google/devtools/build/lib/rules/platform/PlatformTest.java
index ee430b51e5..152aca3f8f 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/platform/PlatformTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/platform/PlatformTest.java
@@ -21,6 +21,7 @@ import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.platform.ConstraintSettingInfo;
import com.google.devtools.build.lib.analysis.platform.ConstraintValueInfo;
import com.google.devtools.build.lib.analysis.platform.PlatformInfo;
+import com.google.devtools.build.lib.analysis.platform.PlatformProviderUtils;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.util.CPU;
@@ -57,7 +58,7 @@ public class PlatformTest extends BuildViewTestCase {
ConfiguredTarget platform = getConfiguredTarget("//constraint:plat1");
assertThat(platform).isNotNull();
- PlatformInfo provider = Platform.platform(platform);
+ PlatformInfo provider = PlatformProviderUtils.platform(platform);
assertThat(provider).isNotNull();
assertThat(provider.constraints()).hasSize(1);
ConstraintSettingInfo constraintSetting =
@@ -89,7 +90,7 @@ public class PlatformTest extends BuildViewTestCase {
ConfiguredTarget platform = getConfiguredTarget("//host:host_platform");
assertThat(platform).isNotNull();
- PlatformInfo provider = Platform.platform(platform);
+ PlatformInfo provider = PlatformProviderUtils.platform(platform);
assertThat(provider).isNotNull();
// Check the CPU and OS.
@@ -135,7 +136,7 @@ public class PlatformTest extends BuildViewTestCase {
ConfiguredTarget platform = getConfiguredTarget("//constraint/remote:plat_remote");
assertThat(platform).isNotNull();
- PlatformInfo provider = Platform.platform(platform);
+ PlatformInfo provider = PlatformProviderUtils.platform(platform);
assertThat(provider).isNotNull();
assertThat(provider.remoteExecutionProperties())
.containsExactlyEntriesIn(ImmutableMap.of("foo", "val1", "bar", "val2"));