aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java23
4 files changed, 33 insertions, 27 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
index 7be13d2dda..3ac06faff7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
@@ -19,7 +19,6 @@ import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.FileProvider;
-import com.google.devtools.build.lib.analysis.SkylarkProviders;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.cmdline.Label;
@@ -127,19 +126,15 @@ public final class AliasConfiguredTarget implements ConfiguredTarget, ClassObjec
? NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER)
: getProvider(FileProvider.class).getFilesToBuild());
}
- if (actual instanceof ClassObject) {
- return ((ClassObject) actual).getValue(name);
- }
- return actual == null ? null : actual.get(name);
+ return actual == null ? null : actual.getValue(name);
}
@Override
public ImmutableCollection<String> getKeys() {
- ImmutableList.Builder<String> result = ImmutableList.<String>builder().add("label", "files");
if (actual != null) {
- result.addAll(actual.getProvider(SkylarkProviders.class).getKeys());
+ return actual.getKeys();
}
- return result.build();
+ return ImmutableList.of();
}
@Override
@@ -147,4 +142,12 @@ public final class AliasConfiguredTarget implements ConfiguredTarget, ClassObjec
// Use the default error message.
return null;
}
+
+ /**
+ * Returns a target this target aliases.
+ */
+ @Nullable
+ public ConfiguredTarget getActual() {
+ return actual;
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
index dd1dece72a..848ef4419c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
@@ -37,6 +37,8 @@ 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.packages.BuildType;
+import com.google.devtools.build.lib.packages.ClassObjectConstructor;
+import com.google.devtools.build.lib.packages.SkylarkClassObject;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.rules.cpp.CppCompilationContext;
@@ -832,6 +834,15 @@ public class JavaCommon {
}
/**
+ * Gets all the deps that implement a particular provider.
+ */
+ public final <P extends SkylarkClassObject> Iterable<P> getDependencies(
+ ClassObjectConstructor.Key provider, Class<P> resultClass) {
+ return AnalysisUtils.getProviders(getDependencies(), provider, resultClass);
+ }
+
+
+ /**
* Returns true if and only if this target has the neverlink attribute set to
* 1, or false if the neverlink attribute does not exist (for example, on
* *_binary targets)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java
index f8c6daec8f..1a07ff3d0e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaProvider.java
@@ -18,7 +18,6 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.Runfiles;
-import com.google.devtools.build.lib.analysis.SkylarkProviders;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap;
@@ -133,12 +132,8 @@ public final class JavaProvider extends SkylarkClassObject implements Transitive
if (provider != null) {
return provider;
}
- SkylarkProviders skylarkProviders = target.getProvider(SkylarkProviders.class);
- if (skylarkProviders == null) {
- return null;
- }
JavaProvider javaProvider =
- (JavaProvider) skylarkProviders.getDeclaredProvider(JavaProvider.JAVA_PROVIDER.getKey());
+ (JavaProvider) target.get(JavaProvider.JAVA_PROVIDER.getKey());
if (javaProvider == null) {
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java
index 2036401394..3ea0849634 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java
@@ -30,7 +30,6 @@ import com.google.devtools.build.lib.analysis.PseudoAction;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
import com.google.devtools.build.lib.analysis.RuleContext;
-import com.google.devtools.build.lib.analysis.SkylarkProviders;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.Util;
import com.google.devtools.build.lib.cmdline.Label;
@@ -294,12 +293,13 @@ public final class PyCommon {
private NestedSet<Artifact> getTransitivePythonSourcesFromSkylarkProvider(
TransitiveInfoCollection dep) {
SkylarkClassObject pythonSkylarkProvider = null;
- SkylarkProviders skylarkProviders = dep.getProvider(SkylarkProviders.class);
try {
- if (skylarkProviders != null) {
- pythonSkylarkProvider = skylarkProviders.getValue(PYTHON_SKYLARK_PROVIDER_NAME,
- SkylarkClassObject.class);
- }
+ pythonSkylarkProvider = SkylarkType.cast(
+ dep.get(PYTHON_SKYLARK_PROVIDER_NAME),
+ SkylarkClassObject.class,
+ null,
+ "%s should be a struct", PYTHON_SKYLARK_PROVIDER_NAME
+ );
if (pythonSkylarkProvider != null) {
Object sourceFiles = pythonSkylarkProvider.getValue(TRANSITIVE_PYTHON_SRCS);
@@ -472,13 +472,10 @@ public final class PyCommon {
public static boolean checkForSharedLibraries(Iterable<TransitiveInfoCollection> deps)
throws EvalException{
for (TransitiveInfoCollection dep : deps) {
- SkylarkProviders providers = dep.getProvider(SkylarkProviders.class);
- SkylarkClassObject provider = null;
- if (providers != null) {
- provider = providers.getValue(PYTHON_SKYLARK_PROVIDER_NAME,
- SkylarkClassObject.class);
- }
- if (provider != null) {
+ Object providerObject = dep.get(PYTHON_SKYLARK_PROVIDER_NAME);
+ if (providerObject != null) {
+ SkylarkType.checkType(providerObject, SkylarkClassObject.class, null);
+ SkylarkClassObject provider = (SkylarkClassObject) providerObject;
Boolean isUsingSharedLibrary = provider.getValue(IS_USING_SHARED_LIBRARY, Boolean.class);
if (Boolean.TRUE.equals(isUsingSharedLibrary)) {
return true;