Browse Source

Short-circuit matching algorithm in InstanceFilter

In commit 97522cfa36, I implemented a
short-circuiting matching algorithm in DefaultRetryPolicy for includes
and excludes, which was later copied to MethodRetrySpec.

After we switched to using ExceptionTypeFilter, I realized that the
matching algorithm in InstanceFilter (the superclass of
ExceptionTypeFilter) does not exhibit the same short-circuiting
characteristics.

In light of that, this commit revises the matching algorithm in
InstanceFilter to mirror the original short-circuiting algorithm in
DefaultRetryPolicy.

See gh-35058
See gh-35109
See gh-35160
Closes gh-35161
pull/34709/head
Sam Brannen 9 months ago
parent
commit
32b56a35c6
  1. 19
      spring-core/src/main/java/org/springframework/util/InstanceFilter.java

19
spring-core/src/main/java/org/springframework/util/InstanceFilter.java

@ -86,21 +86,16 @@ public class InstanceFilter<T> { @@ -86,21 +86,16 @@ public class InstanceFilter<T> {
public boolean match(T instance) {
Assert.notNull(instance, "Instance to match must not be null");
boolean includesSet = !this.includes.isEmpty();
boolean excludesSet = !this.excludes.isEmpty();
if (!includesSet && !excludesSet) {
return this.matchIfEmpty;
}
boolean emptyIncludes = this.includes.isEmpty();
boolean emptyExcludes = this.excludes.isEmpty();
boolean matchIncludes = match(instance, this.includes);
boolean matchExcludes = match(instance, this.excludes);
if (!includesSet) {
return !matchExcludes;
if (emptyIncludes && emptyExcludes) {
return this.matchIfEmpty;
}
if (!excludesSet) {
return matchIncludes;
if (!emptyExcludes && match(instance, this.excludes)) {
return false;
}
return matchIncludes && !matchExcludes;
return (emptyIncludes || match(instance, this.includes));
}
/**

Loading…
Cancel
Save