aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2015-09-08 12:19:44 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2015-09-08 12:23:00 +0000
commit240eb7888627967252229979c3029097f58cbb38 (patch)
tree9c07a7205582ad0dc2af5c203b53bf4cb90f6770 /src/main
parent87a3c4932eef7c7f33cfed49e1e67680a75df658 (diff)
Make Android rules work again
They were broken by commit 05e2c5b4e0da2f88e12d95adbc63cc3d46a6fca6. -- MOS_MIGRATED_REVID=102546907
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java25
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java37
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java8
4 files changed, 40 insertions, 45 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 0e552a6d96..e65f28ff73 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
@@ -15,7 +15,6 @@ package com.google.devtools.build.lib.rules.android;
import static com.google.common.base.Strings.isNullOrEmpty;
-import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Joiner;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
@@ -97,7 +96,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
try {
RuleConfiguredTargetBuilder builder =
init(ruleContext, filesBuilder,
- getTransitiveResourceContainers(ruleContext, ImmutableList.of("resources", "deps")),
+ AndroidCommon.getTransitiveResourceContainers(ruleContext, true),
javaCommon, androidCommon, javaSemantics, androidSemantics,
ImmutableList.<String>of("deps"));
if (builder == null) {
@@ -1319,26 +1318,4 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
Joiner.on("_").join(prefix, ruleContext.getLabel().getName(), "proguard.cfg"),
ruleContext.getBinOrGenfilesDirectory()));
}
-
- /**
- * Class that builds the main dex classes list.
- */
- @VisibleForTesting
- public static final String MAIN_DEX_CLASS_BUILDER =
- "com.android.multidex.ClassReferenceListBuilder";
-
- public static NestedSet<ResourceContainer> getTransitiveResourceContainers(
- RuleContext ruleContext, List<String> attributesWithTransitiveResources) {
- // Traverse through all android_library targets looking for resources
- NestedSetBuilder<ResourceContainer> resourcesBuilder = NestedSetBuilder.naiveLinkOrder();
-
- for (String attribute : attributesWithTransitiveResources) {
- for (AndroidResourcesProvider resources :
- ruleContext.getPrerequisites(attribute, Mode.TARGET, AndroidResourcesProvider.class)) {
- resourcesBuilder.addTransitive(resources.getTransitiveAndroidResources());
- }
- }
-
- return resourcesBuilder.build();
- }
}
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 6117d5814d..f90d2ad160 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
@@ -211,6 +211,31 @@ public class AndroidCommon {
return jackCompilationHelper.compileAsDex(mode, mainDexList, proguardSpecs);
}
+ public static NestedSet<ResourceContainer> getTransitiveResourceContainers(
+ RuleContext ruleContext, boolean withDeps) {
+ // Traverse through all android_library targets looking for resources
+ NestedSetBuilder<ResourceContainer> resourcesBuilder = NestedSetBuilder.naiveLinkOrder();
+ List<String> attributes = new ArrayList<>();
+ attributes.add("resources");
+ if (withDeps) {
+ attributes.add("deps");
+ }
+
+ for (String attribute : attributes) {
+ if (!ruleContext.attributes().has(attribute, Type.LABEL)
+ && !ruleContext.attributes().has(attribute, Type.LABEL_LIST)) {
+ continue;
+ }
+
+ for (AndroidResourcesProvider resources :
+ ruleContext.getPrerequisites(attribute, Mode.TARGET, AndroidResourcesProvider.class)) {
+ resourcesBuilder.addTransitive(resources.getTransitiveAndroidResources());
+ }
+ }
+
+ return resourcesBuilder.build();
+ }
+
private void compileResources(
JavaSemantics javaSemantics,
JavaCompilationArtifacts.Builder artifactsBuilder,
@@ -631,10 +656,16 @@ public class AndroidCommon {
}
public static AndroidResourcesProvider getAndroidResources(RuleContext ruleContext) {
+ if (!ruleContext.attributes().has("resources", Type.LABEL)) {
+ return null;
+ }
+
TransitiveInfoCollection prerequisite = ruleContext.getPrerequisite("resources", Mode.TARGET);
- return prerequisite != null
- ? prerequisite.getProvider(AndroidResourcesProvider.class)
- : null;
+ if (prerequisite == null) {
+ return null;
+ }
+
+ return prerequisite.getProvider(AndroidResourcesProvider.class);
}
public static NestedSet<Artifact> getApplicationApks(RuleContext ruleContext) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
index 4747929e40..2bacf57588 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
@@ -68,7 +68,7 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
checkResourceInlining(ruleContext);
checkIdlRootImport(ruleContext);
NestedSet<AndroidResourcesProvider.ResourceContainer> transitiveResources =
- collectTransitiveResources(ruleContext);
+ AndroidCommon.getTransitiveResourceContainers(ruleContext, true);
NestedSetBuilder<Aar> transitiveAars = collectTransitiveAars(ruleContext);
NestedSet<LinkerInput> transitiveNativeLibraries =
AndroidCommon.collectTransitiveNativeLibraries(deps);
@@ -320,7 +320,7 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
&& !hasExplicitlySpecifiedIdlSrcsOrParcelables(ruleContext)) {
ruleContext.attributeError("idl_import_root",
"Neither idl_srcs nor idl_parcelables were specified, "
- + "but 'idl_import_root' attribute was set");
+ + "but 'idl_import_root' attribute was set");
}
}
@@ -340,17 +340,6 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
}
}
- private NestedSet<ResourceContainer> collectTransitiveResources(RuleContext ruleContext) {
- NestedSetBuilder<ResourceContainer> builder = NestedSetBuilder.naiveLinkOrder();
- for (AndroidResourcesProvider resource : Iterables.concat(
- ruleContext.getPrerequisites("resources", Mode.TARGET, AndroidResourcesProvider.class),
- ruleContext.getPrerequisites("deps", Mode.TARGET, AndroidResourcesProvider.class))) {
- builder.addTransitive(resource.getTransitiveAndroidResources());
- }
-
- return builder.build();
- }
-
private NestedSetBuilder<Aar> collectTransitiveAars(RuleContext ruleContext) {
NestedSetBuilder<Aar> builder = NestedSetBuilder.naiveLinkOrder();
for (AndroidLibraryAarProvider library :
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
index e1f84e7feb..2b5e999a66 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
@@ -89,12 +89,10 @@ public final class ApplicationManifest {
return ruleContext.attributes().get("application_id", Type.STRING);
}
- TransitiveInfoCollection resourcesPrerequisite =
- ruleContext.getPrerequisite("resources", Mode.TARGET);
- if (resourcesPrerequisite != null) {
+ AndroidResourcesProvider resourcesProvider = AndroidCommon.getAndroidResources(ruleContext);
+ if (resourcesProvider != null) {
ResourceContainer resourceContainer = Iterables.getOnlyElement(
- resourcesPrerequisite.getProvider(AndroidResourcesProvider.class)
- .getTransitiveAndroidResources());
+ resourcesProvider.getTransitiveAndroidResources());
return resourceContainer.getRenameManifestPackage();
} else {
return null;