aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-05-24 09:12:10 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-24 09:13:31 -0700
commitbc32493847eb5670ed9fdf472abc3a70b1901999 (patch)
treee99cf4e26b2eeae806f24143ee68f8dda9810f33
parentd22ade3730bbb2e95df4ca2bee3760bf63c3d30c (diff)
Expose [AndroidAssetsInfo].local_assets, [AndroidAssetsInfo].local_asset_dir and [AndroidResourcesInfo].r_txt to Skylark.
RELNOTES: none PiperOrigin-RevId: 197902129
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssets.java21
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java37
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java5
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java6
4 files changed, 62 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssets.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssets.java
index cd411b9d8e..423c380bf2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssets.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssets.java
@@ -102,7 +102,7 @@ public class AndroidAssets {
}
}
- return new AndroidAssets(assets.build(), assetRoots.build());
+ return new AndroidAssets(assets.build(), assetRoots.build(), assetsDir.getPathString());
}
@Nullable
@@ -135,24 +135,31 @@ public class AndroidAssets {
static AndroidAssets forAarImport(SpecialArtifact assetsDir) {
Preconditions.checkArgument(assetsDir.isTreeArtifact());
return new AndroidAssets(
- ImmutableList.of(assetsDir), ImmutableList.of(assetsDir.getExecPath().getChild("assets")));
+ ImmutableList.of(assetsDir),
+ ImmutableList.of(assetsDir.getExecPath().getChild("assets")),
+ assetsDir.getExecPathString());
}
public static AndroidAssets empty() {
- return new AndroidAssets(ImmutableList.of(), ImmutableList.of());
+ return new AndroidAssets(ImmutableList.of(), ImmutableList.of(), /* assetDir = */ null);
}
private final ImmutableList<Artifact> assets;
private final ImmutableList<PathFragment> assetRoots;
+ private final @Nullable String assetDir;
AndroidAssets(AndroidAssets other) {
- this(other.assets, other.assetRoots);
+ this(other.assets, other.assetRoots, other.assetDir);
}
@VisibleForTesting
- AndroidAssets(ImmutableList<Artifact> assets, ImmutableList<PathFragment> assetRoots) {
+ AndroidAssets(
+ ImmutableList<Artifact> assets,
+ ImmutableList<PathFragment> assetRoots,
+ @Nullable String assetDir) {
this.assets = assets;
this.assetRoots = assetRoots;
+ this.assetDir = assetDir;
}
public ImmutableList<Artifact> getAssets() {
@@ -163,6 +170,10 @@ public class AndroidAssets {
return assetRoots;
}
+ public @Nullable String getAssetDirAsString() {
+ return assetDir;
+ }
+
public ParsedAndroidAssets parse(AndroidDataContext dataContext) throws InterruptedException {
return ParsedAndroidAssets.parseFrom(dataContext, this);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
index 80e4f6661a..ff51d94ae2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
@@ -13,6 +13,8 @@
// limitations under the License.
package com.google.devtools.build.lib.rules.android;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
@@ -23,6 +25,7 @@ import com.google.devtools.build.lib.packages.NativeProvider;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import java.util.Optional;
import javax.annotation.Nullable;
/** Provides information about transitive Android assets. */
@@ -43,6 +46,12 @@ public class AndroidAssetsInfo extends NativeInfo {
private final NestedSet<ParsedAndroidAssets> transitiveParsedAssets;
private final NestedSet<Artifact> transitiveAssets;
private final NestedSet<Artifact> transitiveSymbols;
+ /**
+ * Whether the local assets have been specified. This field is needed to distinguish between the
+ * situation when the local assets haven't been specified and the {@link #directParsedAssets}
+ * contains assets form the target's dependencies.
+ */
+ private final boolean hasLocalAssets;
static AndroidAssetsInfo empty(Label label) {
return new AndroidAssetsInfo(
@@ -79,6 +88,7 @@ public class AndroidAssetsInfo extends NativeInfo {
NestedSet<Artifact> transitiveSymbols) {
super(PROVIDER);
this.label = label;
+ this.hasLocalAssets = validationResult != null;
this.validationResult = validationResult;
this.directParsedAssets = directParsedAssets;
this.transitiveParsedAssets = transitiveParsedAssets;
@@ -110,6 +120,27 @@ public class AndroidAssetsInfo extends NativeInfo {
return directParsedAssets;
}
+ /** Returns the local assets for the target. */
+ @SkylarkCallable(
+ name = "local_assets",
+ doc = "Returns the local assets for the target.",
+ allowReturnNones = true,
+ structField = true)
+ public ImmutableList<Artifact> getLocalAssets() {
+ return getLocalParsedAndroidAssets().map(AndroidAssets::getAssets).orElse(null);
+ }
+
+ /** Returns the local asset dir for the target. */
+ @SkylarkCallable(
+ name = "local_asset_dir",
+ doc = "Returns the local asset directory for the target.",
+ allowReturnNones = true,
+ structField = true)
+ public String getLocalAssetDir() {
+ return getLocalParsedAndroidAssets().map(AndroidAssets::getAssetDirAsString).orElse(null);
+ }
+
+
public NestedSet<ParsedAndroidAssets> getTransitiveParsedAssets() {
return transitiveParsedAssets;
}
@@ -121,4 +152,10 @@ public class AndroidAssetsInfo extends NativeInfo {
public NestedSet<Artifact> getSymbols() {
return transitiveSymbols;
}
+
+ private Optional<ParsedAndroidAssets> getLocalParsedAndroidAssets() {
+ return hasLocalAssets && getDirectParsedAssets().isSingleton()
+ ? Optional.of(Iterables.getOnlyElement(getDirectParsedAssets()))
+ : Optional.empty();
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
index f6626d8a04..4ab92d5e42 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
@@ -106,6 +106,11 @@ public class AndroidResourcesInfo extends NativeInfo {
return manifest;
}
+ /** Returns the r.txt file for the target. */
+ @SkylarkCallable(
+ name = "r_txt",
+ doc = "Returns the R.txt file for the target.",
+ structField = true)
public Artifact getRTxt() {
return rTxt;
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java
index 2da5c64606..1ee24231fa 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java
@@ -163,14 +163,16 @@ public class AndroidAssetsTest extends ResourceTestBase {
private AndroidAssets getLocalAssets() {
return new AndroidAssets(
ImmutableList.of(getResource("asset_1"), getResource("asset_2")),
- ImmutableList.of(PathFragment.create("asset_dir")));
+ ImmutableList.of(PathFragment.create("asset_dir")),
+ "asset_dir");
}
private ParsedAndroidAssets getDependencyAssets(RuleContext ruleContext, String depName) {
return ParsedAndroidAssets.of(
new AndroidAssets(
ImmutableList.of(getResource(depName + "_asset_1"), getResource(depName + "_asset_2")),
- ImmutableList.of(PathFragment.create(depName))),
+ ImmutableList.of(PathFragment.create(depName)),
+ depName),
getResource("symbols_for_" + depName),
ruleContext.getLabel());
}