diff options
author | 2018-07-17 23:44:25 -0700 | |
---|---|---|
committer | 2018-07-17 23:45:28 -0700 | |
commit | f09a7f5f70280d8fb3a85a4d292f31a876dfb8ac (patch) | |
tree | 451c8b5f954a243eed7a258cf350923f249bf407 /src/main/java/com/google/devtools/build/lib/rules | |
parent | 61a6bea12cf785f605c84af6c85844b0bb8c1775 (diff) |
Expose the UsesDataBindingProvider to Skylark (as UsesDataBindingInfo).
RELNOTES: none.
PiperOrigin-RevId: 205032841
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/DataBinding.java | 5 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/UsesDataBindingProvider.java | 36 |
2 files changed, 31 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DataBinding.java b/src/main/java/com/google/devtools/build/lib/rules/android/DataBinding.java index c589342614..4991600d1b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/DataBinding.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/DataBinding.java @@ -254,8 +254,7 @@ public final class DataBinding { dataBindingMetadataOutputs.addAll(getTransitiveMetadata(ruleContext, "deps")); } if (!dataBindingMetadataOutputs.isEmpty()) { - builder.addProvider( - UsesDataBindingProvider.class, new UsesDataBindingProvider(dataBindingMetadataOutputs)); + builder.addNativeDeclaredProvider(new UsesDataBindingProvider(dataBindingMetadataOutputs)); } } @@ -265,7 +264,7 @@ public final class DataBinding { if (ruleContext.attributes().has(attr, BuildType.LABEL_LIST)) { for (UsesDataBindingProvider provider : ruleContext.getPrerequisites( - attr, RuleConfiguredTarget.Mode.TARGET, UsesDataBindingProvider.class)) { + attr, RuleConfiguredTarget.Mode.TARGET, UsesDataBindingProvider.PROVIDER)) { dataBindingMetadataOutputs.addAll(provider.getMetadataOutputs()); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/UsesDataBindingProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/UsesDataBindingProvider.java index 2f6ddd3c03..87cd49a26c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/UsesDataBindingProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/UsesDataBindingProvider.java @@ -15,26 +15,48 @@ package com.google.devtools.build.lib.rules.android; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; +import com.google.devtools.build.lib.packages.BuiltinProvider; +import com.google.devtools.build.lib.packages.NativeInfo; +import com.google.devtools.build.lib.skylarkbuildapi.android.UsesDataBindingProviderApi; +import com.google.devtools.build.lib.syntax.EvalException; +import com.google.devtools.build.lib.syntax.SkylarkList; import java.util.Collection; /** - * An Android rule that exposes this enables <a + * A provider that exposes this enables <a * href="https://developer.android.com/topic/libraries/data-binding/index.html">data binding</a> on * its resource processing and Java compilation. */ -public final class UsesDataBindingProvider implements TransitiveInfoProvider { +public final class UsesDataBindingProvider extends NativeInfo + implements UsesDataBindingProviderApi<Artifact> { + + public static final String PROVIDER_NAME = "UsesDataBindingInfo"; + public static final Provider PROVIDER = new Provider(); + private final ImmutableList<Artifact> metadataOutputs; public UsesDataBindingProvider(Collection<Artifact> metadataOutputs) { + super(PROVIDER); this.metadataOutputs = ImmutableList.copyOf(metadataOutputs); } - /** - * Returns the metadata outputs from this rule's annotation processing that describe how it - * applies data binding. See {@link DataBinding#getMetadataOutputs} for details. - */ + @Override public ImmutableList<Artifact> getMetadataOutputs() { return metadataOutputs; } + + /** The provider can construct the UsesDataBindingInfo provider. */ + public static class Provider extends BuiltinProvider<UsesDataBindingProvider> + implements UsesDataBindingProviderApi.Provider<Artifact> { + + private Provider() { + super(PROVIDER_NAME, UsesDataBindingProvider.class); + } + + @Override + public UsesDataBindingProvider createInfo(SkylarkList<Artifact> metadataOutputs) + throws EvalException { + return new UsesDataBindingProvider(metadataOutputs.getImmutableList()); + } + } } |