aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviders.java
diff options
context:
space:
mode:
authorGravatar Yun Peng <pcloudy@google.com>2016-03-03 13:14:38 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2016-03-03 15:28:01 +0000
commitefd7ca1b420e00cf32839c07733e0e4a4d8b1bbb (patch)
tree04eee06d2b6e277f3d0eaa7f326f1ae843b56746 /src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviders.java
parentf745e99db7632cfb2145b6926f961e85f9084bc5 (diff)
Python provider is now available in Skylark
Using mandatoryProvidersList to validate python rules' dependency. Added a SkylarkProvider named 'py' which is a SkylarkClassObject in Java and a struct in Skylark. Native python rule and Skylark python rule should have this provider so that they can depend on each other. RELNOTES[NEW]: Native python rule can depend on skylark rule as long as skylark rule provides 'py' provider. -- MOS_MIGRATED_REVID=116241504
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviders.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviders.java14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviders.java b/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviders.java
index 53708cf243..1f8f1280a0 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviders.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviders.java
@@ -16,6 +16,8 @@ package com.google.devtools.build.lib.analysis;
import com.google.common.collect.ImmutableCollection;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.SkylarkType;
import com.google.devtools.build.lib.util.Preconditions;
import java.util.HashSet;
@@ -49,6 +51,18 @@ public final class SkylarkProviders implements TransitiveInfoProvider {
}
/**
+ * Returns a Skylark provider and try to cast it into the specified type
+ */
+ public <TYPE> TYPE getValue(String key, Class<TYPE> type) throws EvalException {
+ Object obj = skylarkProviders.get(key);
+ if (obj == null) {
+ return null;
+ }
+ SkylarkType.checkType(obj, type, key);
+ return type.cast(obj);
+ }
+
+ /**
* Merges skylark providers. The set of providers must be disjoint.
*
* @param providers providers to merge {@code this} with.