aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-12-16 02:20:33 +0000
committerGravatar John Cater <jcater@google.com>2016-12-16 15:35:50 +0000
commit855ca3159eb8de49248b2a2ab3e8e71d74e88b03 (patch)
tree72d92ad3410685bffc721c6a7bc4289f87382690 /src/main/java/com/google/devtools/build/lib/rules/android
parentcf1c437c03588b3271d3fd786982fa2e51cd866f (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlHelper.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java6
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();