diff options
author | jingwen <jingwen@google.com> | 2017-10-26 18:23:17 +0200 |
---|---|---|
committer | Dmitry Lomov <dslomov@google.com> | 2017-10-27 16:29:26 +0200 |
commit | aca69a974ade777c54119dbe2c3a52aef61bc243 (patch) | |
tree | 324a92a76929f2124e091cf764b4c1bcd56e0f3a /src/main/java/com/google/devtools/build | |
parent | fba45f5695370fda1d8868a079223d4212b5484a (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.java | 15 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java | 6 |
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(); } |