public Result createBuildableForAndroidResources( BuildRuleResolver ruleResolver, boolean createBuildableIfEmptyDeps) { ImmutableSortedSet<BuildRule> originalDeps = originalBuildRuleParams.getDeps(); ImmutableList<HasAndroidResourceDeps> androidResourceDeps = UberRDotJavaUtil.getAndroidResourceDeps(originalDeps); if (androidResourceDeps.isEmpty() && !createBuildableIfEmptyDeps) { return new Result(originalBuildRuleParams, Optional.<DummyRDotJava>absent()); } BuildRule dummyRDotJavaBuildRule = ruleResolver.buildAndAddToIndex( DummyRDotJava.newDummyRDotJavaBuildableBuilder(buildRuleBuilderParams) .setBuildTarget(dummyRDotJavaBuildTarget) .setAndroidResourceDeps(androidResourceDeps)); final DummyRDotJava dummyRDotJava = (DummyRDotJava) dummyRDotJavaBuildRule.getBuildable(); ImmutableSortedSet<BuildRule> totalDeps = ImmutableSortedSet.<BuildRule>naturalOrder() .addAll(originalDeps) .add(dummyRDotJavaBuildRule) .build(); BuildRuleParams newBuildRuleParams = originalBuildRuleParams.copyWithChangedDeps(totalDeps); return new Result(newBuildRuleParams, Optional.of(dummyRDotJava)); }
@Override protected ImmutableList<HasAndroidResourceDeps> getAndroidResourceDepsInternal( DependencyGraph graph) { // Filter out the AndroidResourceRules that are needed by this APK but not the APK under test. ImmutableSet<HasAndroidResourceDeps> originalResources = ImmutableSet.copyOf(UberRDotJavaUtil.getAndroidResourceDeps(apkUnderTest, graph)); ImmutableList<HasAndroidResourceDeps> instrumentationResources = UberRDotJavaUtil.getAndroidResourceDeps(this, graph); // Include all of the instrumentation resources first, in their original order. ImmutableList.Builder<HasAndroidResourceDeps> allResources = ImmutableList.builder(); for (HasAndroidResourceDeps resource : instrumentationResources) { if (!originalResources.contains(resource)) { allResources.add(resource); } } return allResources.build(); }