aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar jingwen <jingwen@google.com>2017-10-26 18:23:17 +0200
committerGravatar Dmitry Lomov <dslomov@google.com>2017-10-27 16:29:26 +0200
commitaca69a974ade777c54119dbe2c3a52aef61bc243 (patch)
tree324a92a76929f2124e091cf764b4c1bcd56e0f3a /src/main/java/com/google/devtools/build
parentfba45f5695370fda1d8868a079223d4212b5484a (diff)
Implement android_binary.instruments attribute.
android_binary now takes an android_binary in the `instruments` attribute. If the attribute is explicitly specified, an AndroidInstrumentationInfo provider is included in the RuleConfiguredTarget, which android_instrumentation_test can use. Having the provider allows android_instrumentation_test to check and fail if it tries to depend on an android_binary that is not instrumenting anything. RELNOTES: None. PiperOrigin-RevId: 173547240
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java6
2 files changed, 21 insertions, 0 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 1344581725..c48dc11fce 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
@@ -621,6 +621,21 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
RuleConfiguredTargetBuilder builder =
new RuleConfiguredTargetBuilder(ruleContext);
+ // If this is an instrumentation APK, create the provider for android_instrumentation_test.
+ if (ruleContext.attributes().isAttributeValueExplicitlySpecified("instruments")) {
+ Artifact targetApk =
+ ruleContext
+ .getPrerequisite("instruments", Mode.TARGET)
+ .getProvider(ApkProvider.class)
+ .getApk();
+ Artifact instrumentationApk = zipAlignedApk;
+
+ AndroidInstrumentationInfo instrumentationProvider =
+ new AndroidInstrumentationInfo(targetApk, instrumentationApk);
+
+ builder.addNativeDeclaredProvider(instrumentationProvider);
+ }
+
androidCommon.addTransitiveInfoProviders(
builder,
androidSemantics,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index d1c6ed2d02..d3231d101e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -26,6 +26,7 @@ import static com.google.devtools.build.lib.syntax.Type.STRING;
import static com.google.devtools.build.lib.syntax.Type.STRING_DICT;
import static com.google.devtools.build.lib.syntax.Type.STRING_LIST;
import static com.google.devtools.build.lib.util.FileTypeSet.ANY_FILE;
+import static com.google.devtools.build.lib.util.FileTypeSet.NO_FILE;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
@@ -945,6 +946,11 @@ public final class AndroidRuleClasses {
.cfg(HOST)
.exec()
.value(env.getToolsLabel("//tools/android:resource_extractor")))
+ .add(
+ attr("instruments", BuildType.LABEL)
+ .undocumented("blocked by android_instrumentation_test")
+ .allowedRuleClasses("android_binary")
+ .allowedFileTypes(NO_FILE))
.advertiseSkylarkProvider(SkylarkProviderIdentifier.forKey(JavaInfo.PROVIDER.getKey()))
.build();
}