diff options
author | 2016-12-16 02:20:33 +0000 | |
---|---|---|
committer | 2016-12-16 15:35:50 +0000 | |
commit | 855ca3159eb8de49248b2a2ab3e8e71d74e88b03 (patch) | |
tree | 72d92ad3410685bffc721c6a7bc4289f87382690 /src/main/java/com/google/devtools/build/lib/rules/android | |
parent | cf1c437c03588b3271d3fd786982fa2e51cd866f (diff) |
RELNOTES[NEW]: Allow Android aidl tool to add a jar to the program's classpath, such as if needed to support generated sources.
--
PiperOrigin-RevId: 142214383
MOS_MIGRATED_REVID=142214383
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android')
5 files changed, 35 insertions, 2 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 04576835f9..46439e64aa 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 @@ -97,7 +97,7 @@ public class AndroidCommon { IterablesChain.Builder<T> builder = IterablesChain.builder(); AttributeMap attributes = ruleContext.attributes(); for (String attr : TRANSITIVE_ATTRIBUTES) { - if (ruleContext.attributes().has(attr, BuildType.LABEL_LIST)) { + if (attributes.has(attr, BuildType.LABEL_LIST)) { builder.add(ruleContext.getPrerequisites(attr, mode, classType)); } } @@ -994,6 +994,9 @@ public class AndroidCommon { if (useDataBinding) { compileDeps = DataBinding.addSupportLibs(ruleContext, compileDeps); } + if (AndroidIdlHelper.hasIdlSrcs(ruleContext)) { + compileDeps = AndroidIdlHelper.addSupportLibs(ruleContext, compileDeps); + } runtimeDeps = JavaCommon.defaultDeps(ruleContext, semantics, ClasspathType.RUNTIME_ONLY); bothDeps = JavaCommon.defaultDeps(ruleContext, semantics, ClasspathType.BOTH); } else { diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java index f27cb736a7..d36086e590 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java @@ -20,6 +20,7 @@ import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleContext; +import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.cmdline.Label; @@ -152,6 +153,25 @@ public class AndroidIdlHelper { return idlSourceJar; } + public static boolean hasIdlSrcs(RuleContext ruleContext) { + return ruleContext.getRule().isAttrDefined("idl_srcs", BuildType.LABEL_LIST); + } + + /** + * Returns a new list with the idl libs added to the given list if necessary, or the same list. + */ + public static ImmutableList<TransitiveInfoCollection> addSupportLibs(RuleContext ruleContext, + ImmutableList<TransitiveInfoCollection> deps) { + TransitiveInfoCollection aidlLib = AndroidSdkProvider.fromRuleContext(ruleContext).getAidlLib(); + if (aidlLib == null) { + return deps; + } + return ImmutableList.<TransitiveInfoCollection>builder() + .addAll(deps) + .add(aidlLib) + .build(); + } + /** * Generates an artifact by replacing the extension of the input with the suffix. */ @@ -175,7 +195,7 @@ public class AndroidIdlHelper { * Returns the idl_srcs defined on the given rule. */ private static Collection<Artifact> getIdlSrcs(RuleContext ruleContext) { - if (!ruleContext.getRule().isAttrDefined("idl_srcs", BuildType.LABEL_LIST)) { + if (!hasIdlSrcs(ruleContext)) { return ImmutableList.of(); } checkIdlSrcsSamePackage(ruleContext); 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 c627627150..4240fb22d0 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 @@ -356,6 +356,7 @@ public final class AndroidRuleClasses { .add(attr("adb", LABEL).mandatory().cfg(HOST).allowedFileTypes(ANY_FILE).exec()) .add(attr("framework_aidl", LABEL).mandatory().cfg(HOST).allowedFileTypes(ANY_FILE)) .add(attr("aidl", LABEL).mandatory().cfg(HOST).allowedFileTypes(ANY_FILE).exec()) + .add(attr("aidl_lib", LABEL).allowedFileTypes(JavaSemantics.JAR)) .add(attr("android_jar", LABEL).mandatory().cfg(HOST).allowedFileTypes(JavaSemantics.JAR)) .add(attr("shrinked_android_jar", LABEL).mandatory().cfg(HOST).allowedFileTypes(ANY_FILE)) .add(attr("annotations_jar", LABEL).mandatory().cfg(HOST).allowedFileTypes(ANY_FILE)) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java index 63434171be..ca9d8460f0 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java @@ -23,6 +23,7 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.RunfilesProvider; +import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; @@ -78,6 +79,7 @@ public class AndroidSdk implements RuleConfiguredTargetFactory { FilesToRunProvider resourceExtractor = ruleContext.getExecutablePrerequisite("resource_extractor", Mode.HOST); Artifact frameworkAidl = ruleContext.getPrerequisiteArtifact("framework_aidl", Mode.HOST); + TransitiveInfoCollection aidlLib = ruleContext.getPrerequisite("aidl_lib", Mode.TARGET); Artifact androidJar = ruleContext.getPrerequisiteArtifact("android_jar", Mode.HOST); Artifact shrinkedAndroidJar = ruleContext.getPrerequisiteArtifact("shrinked_android_jar", Mode.HOST); @@ -109,6 +111,7 @@ public class AndroidSdk implements RuleConfiguredTargetFactory { buildToolsVersion, aaptSupportsMainDexGeneration, frameworkAidl, + aidlLib, androidJar, shrinkedAndroidJar, androidBaseClasspathForJack, diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java index 5877181e27..4e65affeb2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; 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 javax.annotation.Nullable; /** Description of the tools Blaze needs from an Android SDK. */ @AutoValue @@ -32,6 +33,7 @@ public abstract class AndroidSdkProvider implements TransitiveInfoProvider { String buildToolsVersion, boolean aaptSupportsMainDexGeneration, Artifact frameworkAidl, + @Nullable TransitiveInfoCollection aidlLib, Artifact androidJar, Artifact shrinkedAndroidJar, NestedSet<Artifact> androidBaseClasspathForJack, @@ -55,6 +57,7 @@ public abstract class AndroidSdkProvider implements TransitiveInfoProvider { buildToolsVersion, aaptSupportsMainDexGeneration, frameworkAidl, + aidlLib, androidJar, shrinkedAndroidJar, androidBaseClasspathForJack, @@ -108,6 +111,9 @@ public abstract class AndroidSdkProvider implements TransitiveInfoProvider { public abstract Artifact getFrameworkAidl(); + @Nullable + public abstract TransitiveInfoCollection getAidlLib(); + public abstract Artifact getAndroidJar(); public abstract Artifact getShrinkedAndroidJar(); |