diff options
author | Googler <noreply@google.com> | 2018-07-17 12:18:26 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-07-17 12:20:16 -0700 |
commit | 474b896bfdb8c54640aa3f96bd3c84407b6349d4 (patch) | |
tree | e6a09012c6ab95c420e4e368c5472ad9b308e932 | |
parent | 131a1a4641bcf5dc0f9a6e6e5e04fef0b5e61552 (diff) |
Expose AndroidLibraryResourceClassJarProvider to skylark.
RELNOTES: None
PiperOrigin-RevId: 204953629
5 files changed, 108 insertions, 12 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index b0577bed0e..cbbbaaefcb 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -668,7 +668,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { private static NestedSet<Artifact> getLibraryResourceJars(RuleContext ruleContext) { Iterable<AndroidLibraryResourceClassJarProvider> libraryResourceJarProviders = AndroidCommon.getTransitivePrerequisites( - ruleContext, Mode.TARGET, AndroidLibraryResourceClassJarProvider.class); + ruleContext, Mode.TARGET, AndroidLibraryResourceClassJarProvider.PROVIDER); NestedSetBuilder<Artifact> libraryResourceJarsBuilder = NestedSetBuilder.naiveLinkOrder(); for (AndroidLibraryResourceClassJarProvider provider : libraryResourceJarProviders) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java index 96fb3994f4..d2afb8e678 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java @@ -250,8 +250,7 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { .addNativeDeclaredProvider( new AndroidProguardInfo(proguardLibrary.collectLocalProguardSpecs())) .addOutputGroup(OutputGroupInfo.HIDDEN_TOP_LEVEL, transitiveProguardConfigs) - .add( - AndroidLibraryResourceClassJarProvider.class, + .addNativeDeclaredProvider( AndroidLibraryResourceClassJarProvider.create(transitiveResourcesJars.build())); if (!JavaCommon.isNeverLink(ruleContext)) { @@ -265,7 +264,7 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { NestedSetBuilder<Artifact> builder = NestedSetBuilder.naiveLinkOrder(); Iterable<AndroidLibraryResourceClassJarProvider> providers = AndroidCommon.getTransitivePrerequisites( - ruleContext, Mode.TARGET, AndroidLibraryResourceClassJarProvider.class); + ruleContext, Mode.TARGET, AndroidLibraryResourceClassJarProvider.PROVIDER); for (AndroidLibraryResourceClassJarProvider resourceJarProvider : providers) { builder.addTransitive(resourceJarProvider.getResourceClassJars()); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryResourceClassJarProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryResourceClassJarProvider.java index 8135b06719..6e3ac673a2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryResourceClassJarProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryResourceClassJarProvider.java @@ -14,26 +14,61 @@ package com.google.devtools.build.lib.rules.android; -import com.google.auto.value.AutoValue; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.packages.BuiltinProvider; +import com.google.devtools.build.lib.packages.NativeInfo; +import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidLibraryResourceClassJarProviderApi; +import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import javax.annotation.Nonnull; /** * A provider which contains the resource class jars from android_library rules. See {@link * AndroidRuleClasses#ANDROID_RESOURCES_CLASS_JAR}. */ -@AutoValue -public abstract class AndroidLibraryResourceClassJarProvider implements TransitiveInfoProvider { +public final class AndroidLibraryResourceClassJarProvider extends NativeInfo + implements AndroidLibraryResourceClassJarProviderApi<Artifact> { + + public static final String PROVIDER_NAME = "AndroidLibraryResourceClassJarProvider"; + public static final Provider PROVIDER = new Provider(); + + private final NestedSet<Artifact> resourceClassJars; + + private AndroidLibraryResourceClassJarProvider(NestedSet<Artifact> resourceClassJars) { + super(PROVIDER); + this.resourceClassJars = resourceClassJars; + } public static AndroidLibraryResourceClassJarProvider create( NestedSet<Artifact> resourceClassJars) { - return new AutoValue_AndroidLibraryResourceClassJarProvider(resourceClassJars); + return new AndroidLibraryResourceClassJarProvider(resourceClassJars); } @Nonnull - public abstract NestedSet<Artifact> getResourceClassJars(); + @Override + public NestedSet<Artifact> getResourceClassJars() { + return resourceClassJars; + } - AndroidLibraryResourceClassJarProvider() {} + /** Provider class for {@link AndroidLibraryResourceClassJarProvider} objects. */ + public static class Provider extends BuiltinProvider<AndroidLibraryResourceClassJarProvider> + implements AndroidLibraryResourceClassJarProviderApi.Provider<Artifact> { + + private Provider() { + super(PROVIDER_NAME, AndroidLibraryResourceClassJarProvider.class); + } + + public String getName() { + return PROVIDER_NAME; + } + + @Override + public AndroidLibraryResourceClassJarProvider create(SkylarkNestedSet jars) { + return new AndroidLibraryResourceClassJarProvider( + NestedSetBuilder.<Artifact>stableOrder() + .addTransitive(jars.getSet(Artifact.class)) + .build()); + } + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java index 63f59171c5..5821225fd3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java @@ -586,7 +586,7 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor private static NestedSet<Artifact> getLibraryResourceJars(RuleContext ruleContext) { Iterable<AndroidLibraryResourceClassJarProvider> libraryResourceJarProviders = AndroidCommon.getTransitivePrerequisites( - ruleContext, Mode.TARGET, AndroidLibraryResourceClassJarProvider.class); + ruleContext, Mode.TARGET, AndroidLibraryResourceClassJarProvider.PROVIDER); NestedSetBuilder<Artifact> libraryResourceJarsBuilder = NestedSetBuilder.naiveLinkOrder(); for (AndroidLibraryResourceClassJarProvider provider : libraryResourceJarProviders) { diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidLibraryResourceClassJarProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidLibraryResourceClassJarProviderApi.java new file mode 100644 index 0000000000..4cdb1f3e2f --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidLibraryResourceClassJarProviderApi.java @@ -0,0 +1,62 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.skylarkbuildapi.android; + +import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.skylarkbuildapi.FileApi; +import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi; +import com.google.devtools.build.lib.skylarkbuildapi.StructApi; +import com.google.devtools.build.lib.skylarkinterface.Param; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import com.google.devtools.build.lib.syntax.EvalException; +import com.google.devtools.build.lib.syntax.SkylarkNestedSet; + +/** Provides resource class jars from android_library rules. */ +@SkylarkModule( + name = "AndroidLibraryResourceClassJarProvider", + doc = "Resource class jars from android_library rules.", + category = SkylarkModuleCategory.PROVIDER) +public interface AndroidLibraryResourceClassJarProviderApi<FileT extends FileApi> + extends StructApi { + + public static final String NAME = "AndroidLibraryResourceClassJarProvider"; + + @SkylarkCallable(name = "jars", structField = true, doc = "", documented = false) + NestedSet<FileT> getResourceClassJars(); + + /** The provider implementing this can construct the AndroidLibraryResourceClassJarProvider. */ + @SkylarkModule(name = "Provider", doc = "", documented = false) + public interface Provider<FileT extends FileApi> extends ProviderApi { + + @SkylarkCallable( + name = NAME, + doc = "The <code>AndroidLibraryResourceClassJarProvider</code> constructor.", + parameters = { + @Param( + name = "jars", + doc = "Resource class jars.", + positional = true, + named = false, + type = SkylarkNestedSet.class, + generic1 = FileApi.class), + }, + selfCall = true) + @SkylarkConstructor(objectType = AndroidLibraryResourceClassJarProviderApi.class) + AndroidLibraryResourceClassJarProviderApi<FileT> create(SkylarkNestedSet jars) + throws EvalException; + } +} |