diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
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; |