diff options
author | Vladimir Moskva <vladmos@google.com> | 2016-09-20 13:46:11 +0000 |
---|---|---|
committer | Laszlo Csomor <laszlocsomor@google.com> | 2016-09-21 07:04:29 +0000 |
commit | 748ba861bd7141ce24c71c966c22f83249435ec6 (patch) | |
tree | 124f6347b2d5c204882671379d3eed9a22d7961e /src/main/java/com/google/devtools/build/lib/analysis | |
parent | b8d0902db6e27c671cd2aadfbb03f13e2351c2bb (diff) |
Implemented declared providers interface #1727
--
MOS_MIGRATED_REVID=133699895
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java | 25 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java | 4 |
2 files changed, 27 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java index ca5aac4a6b..718c67b7b9 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java @@ -22,9 +22,13 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; +import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.PackageSpecification; +import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.syntax.ClassObject; +import com.google.devtools.build.lib.syntax.EvalException; +import com.google.devtools.build.lib.syntax.EvalUtils; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import javax.annotation.Nullable; @@ -115,6 +119,27 @@ public abstract class AbstractConfiguredTarget } @Override + public Object getIndex(Object key, Location loc) throws EvalException { + if (!(key instanceof SkylarkClassObjectConstructor)) { + throw new EvalException(loc, String.format( + "Type Target only supports indexing by object constructors, got %s instead", + EvalUtils.getDataTypeName(key))); + } + SkylarkClassObjectConstructor constructor = (SkylarkClassObjectConstructor) key; + SkylarkProviders provider = getProvider(SkylarkProviders.class); + if (provider != null) { + Object declaredProvider = provider.getDeclaredProvider(constructor.getKey()); + if (declaredProvider != null) { + return declaredProvider; + } + } + // Either provider or declaredProvider is null + throw new EvalException(loc, String.format( + "Object of type Target doesn't contain declared provider %s", + constructor.getKey().getExportedName())); + } + + @Override public String errorMessage(String name) { return null; } 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 6dd8dd7f13..d1a9ececdc 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 @@ -18,7 +18,7 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; - +import com.google.devtools.build.lib.syntax.SkylarkIndexable; import javax.annotation.Nullable; /** @@ -52,7 +52,7 @@ import javax.annotation.Nullable; + "These extra providers are defined in the <code>struct</code> returned by the rule " + "implementation function.</li>" + "</ul>") -public interface TransitiveInfoCollection { +public interface TransitiveInfoCollection extends SkylarkIndexable { /** * Returns the transitive information provider requested, or null if the provider is not found. |