11/*
2- * Copyright (c) 2021 University Corporation for Atmospheric Research/Unidata
2+ * Copyright (c) 2021-2025 University Corporation for Atmospheric Research/Unidata
33 * See LICENSE for license information.
44 */
55
66package ucar .nc2 .filter ;
77
8+ import com .google .common .collect .ImmutableList ;
89import java .util .Map ;
910import java .util .ServiceLoader ;
1011
1112public class Filters {
1213
14+ private static final ImmutableList <FilterProvider > spFilters ;
15+
16+ // load filter service providers
17+ static {
18+ ImmutableList .Builder <FilterProvider > spFiltersBuilder = ImmutableList .builder ();
19+ for (FilterProvider fp : ServiceLoader .load (FilterProvider .class )) {
20+ spFiltersBuilder .add (fp );
21+ }
22+ spFilters = spFiltersBuilder .build ();
23+ }
24+
1325 /**
1426 * Set of common properties used by Filters
1527 */
@@ -54,14 +66,14 @@ public static Filter getFilter(Map<String, Object> properties) throws UnknownFil
5466 String name = (String ) properties .get (Keys .NAME );
5567 Object oid = properties .get (Keys .ID );
5668 // if no id or name, return null filter
57- if ((name == null || name .isEmpty ()) && !(oid instanceof Number )) {
69+ final boolean missingName = name == null || name .isEmpty ();
70+ if (missingName && !(oid instanceof Number )) {
5871 return nullFilter ;
5972 }
6073
6174 // try by name first
62- if (name != null && !name .isEmpty ()) {
63- // look for dynamically loaded filters by name
64- for (FilterProvider fp : ServiceLoader .load (FilterProvider .class )) {
75+ if (!missingName ) {
76+ for (FilterProvider fp : spFilters ) {
6577 if (fp .canProvide (name )) {
6678 return fp .create (properties );
6779 }
@@ -70,8 +82,7 @@ public static Filter getFilter(Map<String, Object> properties) throws UnknownFil
7082
7183 // try by id next
7284 int id = ((Short ) oid ).intValue ();
73- // look for dynamically loaded filters by id
74- for (FilterProvider fp : ServiceLoader .load (FilterProvider .class )) {
85+ for (FilterProvider fp : spFilters ) {
7586 if (fp .canProvide (id )) {
7687 return fp .create (properties );
7788 }
0 commit comments