aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar asteinb <asteinb@google.com>2018-04-13 14:35:12 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-13 14:37:04 -0700
commite4e8e9ef4e4e56b7abfa5bdb20182c983e8247d3 (patch)
tree8f5819b393b9b77d33f8f7aa442dd95775bdce17 /src/main/java/com/google/devtools/build/lib
parentab136c0b099a325edbab5d2939f74b6cabc4f5ab (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/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainer.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java26
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)) {