Skip to content

Instantly share code, notes, and snippets.

@sdwilsh
Created June 9, 2015 16:00
Show Gist options
  • Save sdwilsh/b0e7ca14bda617041c11 to your computer and use it in GitHub Desktop.
Save sdwilsh/b0e7ca14bda617041c11 to your computer and use it in GitHub Desktop.
-- a/src/com/facebook/buck/android/AndroidPrebuiltAar.java
+++ b/src/com/facebook/buck/android/AndroidPrebuiltAar.java
@@ -56,7 +56,7 @@ public class AndroidPrebuiltAar
/* resources */ ImmutableSortedSet.<SourcePath>of(),
Optional.of(proguardConfig),
/* postprocessClassesCommands */ ImmutableList.<String>of(),
- ImmutableSortedSet.<BuildRule>of(prebuiltJar),
+ /* exportedDeps */ ImmutableSortedSet.<BuildRule>of(prebuiltJar),
/* providedDeps */ ImmutableSortedSet.<BuildRule>of(),
/* additionalClasspathEntries */ ImmutableSet.<Path>of(),
javacOptions,
--- a/src/com/facebook/buck/android/AndroidPrebuiltAarDescription.java
+++ b/src/com/facebook/buck/android/AndroidPrebuiltAarDescription.java
@@ -65,7 +65,12 @@ public class AndroidPrebuiltAarDescription
BuildRuleParams params,
BuildRuleResolver resolver,
A args) {
- return AndroidPrebuiltAarGraphEnhancer.enhance(params, args.aar, resolver, javacOptions);
+ return AndroidPrebuiltAarGraphEnhancer.enhance(
+ params,
+ args.aar,
+ args.deps.or(ImmutableSortedSet.<BuildTarget>of()),
+ resolver,
+ javacOptions);
}
@SuppressFieldNotInitialized
--- a/src/com/facebook/buck/android/AndroidPrebuiltAarGraphEnhancer.java
+++ b/src/com/facebook/buck/android/AndroidPrebuiltAarGraphEnhancer.java
@@ -43,14 +43,18 @@ import com.facebook.buck.step.fs.MakeCleanDirectoryStep;
import com.facebook.buck.step.fs.MkdirStep;
import com.facebook.buck.step.fs.TouchStep;
import com.facebook.buck.zip.UnzipStep;
+import com.google.common.base.Function;
import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
import com.google.common.base.Suppliers;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSortedSet;
+import com.google.common.collect.Iterables;
import java.io.IOException;
import java.nio.file.Path;
+import java.util.Objects;
import java.util.regex.Pattern;
import javax.annotation.Nullable;
@@ -80,7 +84,8 @@ class AndroidPrebuiltAarGraphEnhancer {
static AndroidPrebuiltAar enhance(
BuildRuleParams originalBuildRuleParams,
SourcePath aarFile,
- BuildRuleResolver ruleResolver,
+ ImmutableSortedSet<BuildTarget> deps,
+ final BuildRuleResolver ruleResolver,
JavacOptions javacOptions) {
SourcePathResolver pathResolver = new SourcePathResolver(ruleResolver);
@@ -105,8 +110,14 @@ class AndroidPrebuiltAarGraphEnhancer {
// prebuilt_jar
BuildRuleParams prebuiltJarParams = originalBuildRuleParams.copyWithChanges(
BuildTargets.createFlavoredBuildTarget(originalBuildTarget, AAR_PREBUILT_JAR_FLAVOR),
- /* declaredDeps */
- Suppliers.ofInstance(ImmutableSortedSet.<BuildRule>of(unzipAar)),
+ /* declaredDeps */ Suppliers.ofInstance(ImmutableSortedSet.<BuildRule>naturalOrder()
+ .add(unzipAar)
+ .addAll(getFlavoredBuildRulesFromTargets(
+ deps,
+ AAR_PREBUILT_JAR_FLAVOR,
+ ruleResolver))
+ .addAll(getBuildRulesFromTargets(deps, PrebuiltJar.class, ruleResolver))
+ .build()),
/* extraDeps */ Suppliers.ofInstance(ImmutableSortedSet.<BuildRule>of()));
PrebuiltJar prebuiltJar = new PrebuiltJar(
/* params */ prebuiltJarParams,
@@ -127,7 +138,13 @@ class AndroidPrebuiltAarGraphEnhancer {
// android_resource
BuildRuleParams androidResourceParams = originalBuildRuleParams.copyWithChanges(
BuildTargets.createFlavoredBuildTarget(originalBuildTarget, AAR_ANDROID_RESOURCE_FLAVOR),
- /* declaredDeps */ Suppliers.ofInstance(ImmutableSortedSet.<BuildRule>of(unzipAar)),
+ /* declaredDeps */ Suppliers.ofInstance(ImmutableSortedSet.<BuildRule>naturalOrder()
+ .add(unzipAar)
+ .addAll(getFlavoredBuildRulesFromTargets(
+ deps,
+ AAR_ANDROID_RESOURCE_FLAVOR,
+ ruleResolver))
+ .build()),
/* extraDeps */ Suppliers.ofInstance(ImmutableSortedSet.<BuildRule>of()));
// Because all resources and assets are generated files, we specify them as empty collections.
@@ -178,6 +195,53 @@ class AndroidPrebuiltAarGraphEnhancer {
javacOptions);
}
+ private static Iterable<BuildRule> getFlavoredBuildRulesFromTargets(
+ ImmutableSortedSet<BuildTarget> targets,
+ final Flavor flavor,
+ final BuildRuleResolver ruleResolver) {
+ return Iterables.transform(
+ Iterables.filter(
+ targets,
+ new Predicate<BuildTarget>() {
+ @Override
+ public boolean apply(BuildTarget target) {
+ return Objects.equals(
+ ruleResolver.getRule(target).getClass(),
+ AndroidPrebuiltAar.class);
+ }
+ }),
+ new Function<BuildTarget, BuildRule>() {
+ @Override
+ public BuildRule apply(BuildTarget target) {
+ UnflavoredBuildTarget unflavoredBuildTarget = target.checkUnflavored();
+ return ruleResolver.getRule(BuildTargets.createFlavoredBuildTarget(
+ unflavoredBuildTarget,
+ flavor));
+ }
+ });
+ }
+
+ private static Iterable<BuildRule> getBuildRulesFromTargets(
+ ImmutableSortedSet<BuildTarget> targets,
+ final Class<? extends BuildRule> type,
+ final BuildRuleResolver ruleResolver) {
+ return Iterables.transform(
+ Iterables.filter(
+ targets,
+ new Predicate<BuildTarget>() {
+ @Override
+ public boolean apply(BuildTarget target) {
+ return Objects.equals(ruleResolver.getRule(target).getClass(), type);
+ }
+ }),
+ new Function<BuildTarget, BuildRule>() {
+ @Override
+ public BuildRule apply(BuildTarget target) {
+ return ruleResolver.getRule(target);
+ }
+ });
+ }
+
private static class UnzipAar extends AbstractBuildRule {
@AddToRuleKey
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment