aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java
diff options
context:
space:
mode:
authorGravatar vladmos <vladmos@google.com>2017-04-11 11:14:22 +0000
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-04-11 13:50:44 +0200
commit360fb4d9a1e2c44154b17aeb866e07bac2dd1b5b (patch)
tree7a61fc7be99320496a50780807945271d4a6c586 /src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java
parent1dadb878a59b180bf950c72ee3b4bdb8d7ea7d67 (diff)
Implement default provider
Default providers can now be used not only to return standard providers values from a rule implementation function, but also to access these values provided by other rules. PiperOrigin-RevId: 152797193
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java25
1 files changed, 13 insertions, 12 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 d32b279b49..f5313b8ca0 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
@@ -16,7 +16,6 @@ package com.google.devtools.build.lib.analysis;
import com.google.common.collect.ImmutableCollection;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
@@ -27,10 +26,10 @@ import com.google.devtools.build.lib.packages.ClassObjectConstructor;
import com.google.devtools.build.lib.packages.PackageSpecification;
import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.rules.SkylarkRuleContext;
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;
/**
@@ -108,19 +107,17 @@ public abstract class AbstractConfiguredTarget
@Override
public Object getValue(String name) {
+ // Standard fields should be proxied to their default provider object
+ DefaultProvider defaultProvider =
+ (DefaultProvider) get(SkylarkRuleContext.getDefaultProvider().getKey());
switch (name) {
- case LABEL_FIELD:
- return getLabel();
case FILES_FIELD:
- // A shortcut for files to build in Skylark. FileConfiguredTarget and RuleConfiguredTarget
- // always has FileProvider and Error- and PackageGroupConfiguredTarget-s shouldn't be
- // accessible in Skylark.
- return SkylarkNestedSet.of(
- Artifact.class, getProvider(FileProvider.class).getFilesToBuild());
case DEFAULT_RUNFILES_FIELD:
- return RunfilesProvider.DEFAULT_RUNFILES.apply(this);
case DATA_RUNFILES_FIELD:
- return RunfilesProvider.DATA_RUNFILES.apply(this);
+ case FilesToRunProvider.SKYLARK_NAME:
+ return defaultProvider.getValue(name);
+ case LABEL_FIELD:
+ return getLabel();
default:
return get(name);
}
@@ -173,6 +170,10 @@ public abstract class AbstractConfiguredTarget
@Override
public ImmutableCollection<String> getKeys() {
return ImmutableList.of(
- DATA_RUNFILES_FIELD, DEFAULT_RUNFILES_FIELD, LABEL_FIELD, FILES_FIELD);
+ DATA_RUNFILES_FIELD,
+ DEFAULT_RUNFILES_FIELD,
+ LABEL_FIELD,
+ FILES_FIELD,
+ FilesToRunProvider.SKYLARK_NAME);
}
}