Modify SkyQueryEnvironment#evalTargetPatternKey to take into account the filtering policy specified in the TargetPatternKey.
Add a TargetExcludingFilteringPolicy that can filter multiple single targets
Allow for TargetPatternValue.combineTargetsBelowDirectoryWithNegativePatterns the option of excluding single targets.
Improve toString of some filtering policies.

PiperOrigin-RevId: 230566477
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java
index 2c43726..bfbb45d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java
@@ -108,8 +108,8 @@
     // subdirectory exclusion) is only acceptable because all the use cases for query universe
     // preloading involve short (<10 items) pattern sequences.
     Iterable<TargetPatternKey> combinedTargetPatternKeys =
-        TargetPatternValue.combineNegativeTargetsBelowDirectoryPatterns(
-            targetPatternKeysBuilder.build());
+        TargetPatternValue.combineTargetsBelowDirectoryWithNegativePatterns(
+            targetPatternKeysBuilder.build(), /*excludeSingleTargets=*/ false);
     for (TargetPatternKey targetPatternKey : combinedTargetPatternKeys) {
       if (targetPatternKey.isNegative()
           && !targetPatternKey