Created
June 9, 2015 16:00
-
-
Save sdwilsh/b0e7ca14bda617041c11 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- 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