diff options
author | 2016-03-03 13:14:38 +0000 | |
---|---|---|
committer | 2016-03-03 15:28:01 +0000 | |
commit | efd7ca1b420e00cf32839c07733e0e4a4d8b1bbb (patch) | |
tree | 04eee06d2b6e277f3d0eaa7f326f1ae843b56746 /src/main/java/com/google/devtools/build/lib/analysis/SkylarkProviders.java | |
parent | f745e99db7632cfb2145b6926f961e85f9084bc5 (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.java | 14 |
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. |