diff options
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.java | 33 |
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; |