aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/pkgcache/FilteringPolicies.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/pkgcache/FilteringPolicies.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/pkgcache/FilteringPolicies.java33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/FilteringPolicies.java b/src/main/java/com/google/devtools/build/lib/pkgcache/FilteringPolicies.java
index e91439642b..9936f338b0 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/FilteringPolicies.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/FilteringPolicies.java
@@ -13,10 +13,12 @@
// limitations under the License.
package com.google.devtools.build.lib.pkgcache;
+import com.google.auto.value.AutoValue;
import com.google.common.base.Preconditions;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.TargetUtils;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import java.util.Objects;
/**
@@ -34,6 +36,10 @@ public final class FilteringPolicies {
return new AndFilteringPolicy(x, y);
}
+ public static FilteringPolicy ruleType(String ruleName, boolean keepExplicit) {
+ return RuleTypeFilter.create(ruleName, keepExplicit);
+ }
+
private FilteringPolicies() {
}
@@ -87,6 +93,33 @@ public final class FilteringPolicies {
}
}
+ /** FilteringPolicy that only matches a specific rule name. */
+ @AutoValue
+ @AutoCodec
+ abstract static class RuleTypeFilter extends FilteringPolicy {
+ abstract String ruleName();
+
+ abstract boolean keepExplicit();
+
+ @Override
+ public boolean shouldRetain(Target target, boolean explicit) {
+ if (explicit && keepExplicit()) {
+ return true;
+ }
+
+ if (target.getAssociatedRule().getRuleClass().equals(ruleName())) {
+ return true;
+ }
+
+ return false;
+ }
+
+ @AutoCodec.Instantiator
+ static RuleTypeFilter create(String ruleName, boolean keepExplicit) {
+ return new AutoValue_FilteringPolicies_RuleTypeFilter(ruleName, keepExplicit);
+ }
+ }
+
/** FilteringPolicy for combining FilteringPolicies. */
public static class AndFilteringPolicy extends FilteringPolicy {
private final FilteringPolicy firstPolicy;