diff options
author | asteinb <asteinb@google.com> | 2018-04-13 14:35:12 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-04-13 14:37:04 -0700 |
commit | e4e8e9ef4e4e56b7abfa5bdb20182c983e8247d3 (patch) | |
tree | 8f5819b393b9b77d33f8f7aa442dd95775bdce17 /src/main/java | |
parent | ab136c0b099a325edbab5d2939f74b6cabc4f5ab (diff) |
Filter ValidatedAndroidResources
Transitive ValidatedAndroidResource objects will, in future reviews, be used in
resource processing (replacing transitive ResourceContainers). To support this,
we must be able to filter these objects.
RELNOTES: none
PiperOrigin-RevId: 192825260
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)) { |