aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
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)) {