diff options
Diffstat (limited to 'src/main/java')
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; |