aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis
diff options
context:
space:
mode:
authorGravatar Vladimir Moskva <vladmos@google.com>2016-09-20 13:46:11 +0000
committerGravatar Laszlo Csomor <laszlocsomor@google.com>2016-09-21 07:04:29 +0000
commit748ba861bd7141ce24c71c966c22f83249435ec6 (patch)
tree124f6347b2d5c204882671379d3eed9a22d7961e /src/main/java/com/google/devtools/build/lib/analysis
parentb8d0902db6e27c671cd2aadfbb03f13e2351c2bb (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.java25
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java4
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.