diff options
author | Googler <noreply@google.com> | 2018-07-16 13:51:09 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-07-16 13:52:37 -0700 |
commit | 83ddf681a8c5814283cb0c1d470a4c532f32fae4 (patch) | |
tree | ebd582c0167b50c12353e4ec72d008d0ec45a74d /src/main/java/com/google/devtools/build/lib/rules/android | |
parent | e6a2f609375312c4fb78507340644b2f75bf6c9e (diff) |
AndroidIdeInfoProvider exposed to Skylark (as AndroidIdeInfo).
RELNOTES: None.
PiperOrigin-RevId: 204801047
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android')
3 files changed, 92 insertions, 19 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java index 88128becae..5703def576 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java @@ -714,8 +714,7 @@ public class AndroidCommon { JavaSkylarkApiProvider.NAME, JavaSkylarkApiProvider.fromRuleContext()) .addNativeDeclaredProvider(javaInfo) .addProvider(RunfilesProvider.class, RunfilesProvider.simple(getRunfiles())) - .addProvider( - AndroidIdeInfoProvider.class, + .addNativeDeclaredProvider( createAndroidIdeInfoProvider( ruleContext, idlHelper, diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java index 316c11d69c..59dc6414db 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java @@ -13,17 +13,24 @@ // limitations under the License. package com.google.devtools.build.lib.rules.android; +import static com.google.devtools.build.lib.rules.android.AndroidSkylarkData.fromNoneable; + import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; 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.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.packages.AttributeMap; +import com.google.devtools.build.lib.packages.BuiltinProvider; +import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar; +import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidIdeInfoProviderApi; +import com.google.devtools.build.lib.syntax.EvalException; +import com.google.devtools.build.lib.syntax.SkylarkDict; +import com.google.devtools.build.lib.syntax.SkylarkList; +import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import java.util.Collection; import java.util.LinkedHashSet; import java.util.Map; @@ -32,7 +39,11 @@ import javax.annotation.Nullable; /** An Android target provider to provide Android-specific info to IDEs. */ @Immutable -public final class AndroidIdeInfoProvider implements TransitiveInfoProvider { +public final class AndroidIdeInfoProvider extends NativeInfo + implements AndroidIdeInfoProviderApi<Artifact, OutputJar> { + + public static final String PROVIDER_NAME = "AndroidIdeInfo"; + public static final Provider PROVIDER = new Provider(); /** Builder for {@link AndroidIdeInfoProvider} */ public static class Builder { @@ -172,7 +183,7 @@ public final class AndroidIdeInfoProvider implements TransitiveInfoProvider { private final ImmutableCollection<Artifact> apksUnderTest; private final ImmutableMap<String, NestedSet<Artifact>> nativeLibs; - AndroidIdeInfoProvider( + public AndroidIdeInfoProvider( String javaPackage, String idlImportRoot, @Nullable Artifact manifest, @@ -188,6 +199,7 @@ public final class AndroidIdeInfoProvider implements TransitiveInfoProvider { ImmutableCollection<Artifact> apksUnderTest, ImmutableMap<String, NestedSet<Artifact>> nativeLibs, Artifact resourceApk) { + super(PROVIDER); this.javaPackage = javaPackage; this.idlImportRoot = idlImportRoot; this.manifest = manifest; @@ -205,84 +217,146 @@ public final class AndroidIdeInfoProvider implements TransitiveInfoProvider { this.resourceApk = resourceApk; } - /** Returns java package for this target. */ + @Override public String getJavaPackage() { return javaPackage; } - /** Returns the direct AndroidManifest. */ + @Override @Nullable public Artifact getManifest() { return manifest; } - /** Returns the direct generated AndroidManifest. */ + @Override @Nullable public Artifact getGeneratedManifest() { return generatedManifest; } - /** - * Returns true if the target defined Android resources. Exposes {@link - * LocalResourceContainer#definesAndroidResources(AttributeMap)} - */ + @Override public boolean definesAndroidResources() { return this.definesAndroidResources; } + @Override @Nullable public String getIdlImportRoot() { return idlImportRoot; } - /** Returns the direct debug key signed apk, if there is one. */ + @Override @Nullable public Artifact getSignedApk() { return signedApk; } + @Override @Nullable public Artifact getIdlClassJar() { return idlClassJar; } + @Override @Nullable public Artifact getIdlSourceJar() { return idlSourceJar; } + @Override @Nullable public OutputJar getResourceJar() { return resourceJar; } + @Override @Nullable public Artifact getAar() { return aar; } + @Override @Nullable public Artifact getResourceApk() { return resourceApk; } - /** A list of sources from the "idl_srcs" attribute. */ + @Override public ImmutableCollection<Artifact> getIdlSrcs() { return idlSrcs; } - /** A list of java files generated from the "idl_srcs" attribute. */ + @Override public ImmutableCollection<Artifact> getIdlGeneratedJavaFiles() { return idlGeneratedJavaFiles; } - /** A list of the APKs related to the app under test, if any. */ + @Override public ImmutableCollection<Artifact> getApksUnderTest() { return apksUnderTest; } - /** A map, keyed on architecture, of the native libs for the app, if any. */ public ImmutableMap<String, NestedSet<Artifact>> getNativeLibs() { return nativeLibs; } + + @Override + public ImmutableMap<String, SkylarkNestedSet> getNativeLibsSkylark() { + ImmutableMap.Builder<String, SkylarkNestedSet> builder = ImmutableMap.builder(); + for (Map.Entry<String, NestedSet<Artifact>> entry : getNativeLibs().entrySet()) { + builder.put(entry.getKey(), SkylarkNestedSet.of(Artifact.class, entry.getValue())); + } + return builder.build(); + } + + /** Provider class for {@link AndroidIdeInfoProvider} objects. */ + public static class Provider extends BuiltinProvider<AndroidIdeInfoProvider> + implements AndroidIdeInfoProviderApi.Provider<Artifact, OutputJar> { + private Provider() { + super(PROVIDER_NAME, AndroidIdeInfoProvider.class); + } + + @Override + public AndroidIdeInfoProvider createInfo( + String javaPackage, + Object manifest, + Object generatedManifest, + String idlImportRoot, + SkylarkList<Artifact> idlSrcs, + SkylarkList<Artifact> idlGeneratedJavaFiles, + Object idlSourceJar, + Object idlClassJar, + boolean definesAndroidResources, + Object resourceJar, + Artifact resourceApk, + Object signedApk, + Object aar, + SkylarkList<Artifact> apksUnderTest, + SkylarkDict<String, SkylarkNestedSet> nativeLibs) + throws EvalException { + Map<String, SkylarkNestedSet> nativeLibsMap = + nativeLibs.getContents(String.class, SkylarkNestedSet.class, "native_libs"); + + ImmutableMap.Builder<String, NestedSet<Artifact>> builder = ImmutableMap.builder(); + for (Map.Entry<String, SkylarkNestedSet> entry : nativeLibsMap.entrySet()) { + builder.put(entry.getKey(), entry.getValue().getSet(Artifact.class)); + } + return new AndroidIdeInfoProvider( + javaPackage, + idlImportRoot, + fromNoneable(manifest, Artifact.class), + fromNoneable(generatedManifest, Artifact.class), + fromNoneable(signedApk, Artifact.class), + fromNoneable(idlClassJar, Artifact.class), + fromNoneable(idlSourceJar, Artifact.class), + fromNoneable(resourceJar, OutputJar.class), + definesAndroidResources, + fromNoneable(aar, Artifact.class), + idlSrcs.getImmutableList(), + idlGeneratedJavaFiles.getImmutableList(), + apksUnderTest.getImmutableList(), + builder.build(), + resourceApk); + } + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java index c4b010385e..34d8469f08 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java @@ -52,7 +52,7 @@ public class AndroidSkylarkApiProvider extends SkylarkApiProvider } private AndroidIdeInfoProvider getIdeInfoProvider() { - return getInfo().getProvider(AndroidIdeInfoProvider.class); + return getInfo().get(AndroidIdeInfoProvider.PROVIDER); } @Override |