diff options
Diffstat (limited to 'src/main/java')
5 files changed, 74 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java index 48e8a47f1c..c30f6d9ad2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java @@ -357,17 +357,19 @@ public class AndroidResources { */ public AndroidResources filterLocalResources( RuleErrorConsumer errorConsumer, ResourceFilter resourceFilter) throws RuleErrorException { - return maybeFilter(errorConsumer, resourceFilter, /* isDependency = */ false).orElse(this); + Optional<? extends AndroidResources> filtered = + maybeFilter(errorConsumer, resourceFilter, /* isDependency = */ false); + return filtered.isPresent() ? filtered.get() : this; } /** * Filters this object. * - * @return an optional wrapping a = new {@link AndroidResources} with resources filtered by the + * @return an optional wrapping a new {@link AndroidResources} with resources filtered by the * passed {@link ResourceFilter}, or {@link Optional#empty()} if no resources should be * filtered. */ - public Optional<AndroidResources> maybeFilter( + public Optional<? extends AndroidResources> maybeFilter( RuleErrorConsumer errorConsumer, ResourceFilter resourceFilter, boolean isDependency) throws RuleErrorException { Optional<ImmutableList<Artifact>> filtered = @@ -384,11 +386,22 @@ public class AndroidResources { getResourceRoots(errorConsumer, filtered.get(), DEFAULT_RESOURCES_ATTR))); } + /** Parses these resources. */ public ParsedAndroidResources parse(RuleContext ruleContext, StampedAndroidManifest manifest) throws InterruptedException, RuleErrorException { return ParsedAndroidResources.parseFrom(ruleContext, this, manifest); } + /** + * Performs the complete resource processing pipeline - parsing, merging, and validation - on + * these resources. + */ + public ValidatedAndroidResources process( + RuleContext ruleContext, StampedAndroidManifest manifest, boolean neverlink) + throws RuleErrorException, InterruptedException { + return parse(ruleContext, manifest).merge(ruleContext, neverlink).validate(ruleContext); + } + @Override public boolean equals(Object object) { if (object == null || getClass() != object.getClass()) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java index c9b6ca69a4..8b7fc72481 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java @@ -16,8 +16,11 @@ package com.google.devtools.build.lib.rules.android; import com.google.common.base.Preconditions; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleContext; +import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; +import com.google.devtools.build.lib.packages.RuleErrorConsumer; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion; import java.util.Objects; +import java.util.Optional; import javax.annotation.Nullable; /** Wraps merged Android resources. */ @@ -138,6 +141,22 @@ public class MergedAndroidResources extends ParsedAndroidResources { } @Override + public Optional<? extends MergedAndroidResources> maybeFilter( + RuleErrorConsumer errorConsumer, ResourceFilter resourceFilter, boolean isDependency) + throws RuleErrorException { + return super.maybeFilter(errorConsumer, resourceFilter, isDependency) + .map( + parsed -> + MergedAndroidResources.of( + parsed, + mergedResources, + classJar, + dataBindingInfoZip, + resourceDependencies, + manifest)); + } + + @Override public boolean equals(Object object) { if (!super.equals(object)) { return false; diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java index bb69d338c1..d308d656a9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java @@ -17,8 +17,10 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; +import com.google.devtools.build.lib.packages.RuleErrorConsumer; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion; import java.util.Objects; +import java.util.Optional; import javax.annotation.Nullable; /** Wraps parsed (and, if requested, compiled) android resources. */ @@ -122,6 +124,16 @@ public class ParsedAndroidResources extends AndroidResources } @Override + public Optional<? extends ParsedAndroidResources> maybeFilter( + RuleErrorConsumer errorConsumer, ResourceFilter resourceFilter, boolean isDependency) + throws RuleErrorException { + return super.maybeFilter(errorConsumer, resourceFilter, isDependency) + .map( + resources -> + ParsedAndroidResources.of(resources, symbols, compiledSymbols, label, manifest)); + } + + @Override public boolean equals(Object object) { if (!super.equals(object)) { return false; diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainer.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainer.java index d1cf13a255..e1fdfd430d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainer.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainer.java @@ -200,7 +200,7 @@ public abstract class ResourceContainer implements CompiledMergableAndroidData { public ResourceContainer filter( RuleErrorConsumer errorConsumer, ResourceFilter filter, boolean isDependency) throws RuleErrorException { - Optional<AndroidResources> filteredResources = + Optional<? extends AndroidResources> filteredResources = getResources().maybeFilter(errorConsumer, filter, isDependency); if (!filteredResources.isPresent()) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java index bfb6863a6e..d8c86865af 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java @@ -16,8 +16,11 @@ package com.google.devtools.build.lib.rules.android; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.config.CompilationMode; +import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; +import com.google.devtools.build.lib.packages.RuleErrorConsumer; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion; import java.util.Objects; +import java.util.Optional; import javax.annotation.Nullable; /** Wraps {@link AndroidResources} that have been validated, processed, and packaged. */ @@ -141,6 +144,29 @@ public class ValidatedAndroidResources extends MergedAndroidResources { return staticLibrary; } + public ValidatedAndroidResources filter( + RuleErrorConsumer errorConsumer, ResourceFilter resourceFilter, boolean isDependency) + throws RuleErrorException { + return maybeFilter(errorConsumer, resourceFilter, isDependency).orElse(this); + } + + @Override + public Optional<ValidatedAndroidResources> maybeFilter( + RuleErrorConsumer errorConsumer, ResourceFilter resourceFilter, boolean isDependency) + throws RuleErrorException { + return super.maybeFilter(errorConsumer, resourceFilter, isDependency) + .map( + merged -> + ValidatedAndroidResources.of( + merged, + rTxt, + sourceJar, + apk, + aapt2RTxt, + aapt2SourceJar, + staticLibrary)); + } + @Override public boolean equals(Object object) { if (!super.equals(object)) { |