@@ -66,8 +66,8 @@ public ClusteringPlugin(Settings settings) {
66
66
this .pluginEnabled = settings .getAsBoolean (DEFAULT_ENABLED_PROPERTY_NAME , true );
67
67
this .transportClient = TransportClient .CLIENT_TYPE .equals (Client .CLIENT_TYPE_SETTING_S .get (settings ));
68
68
69
- // Invoke loadSPI on our own class loader to load default algorithms .
70
- reloadSPI (getClass ().getClassLoader ());
69
+ // load our own class loader's extensions .
70
+ loadExtensions (getClass ().getClassLoader ());
71
71
}
72
72
73
73
@ Override
@@ -136,22 +136,34 @@ private LinkedHashMap<String, ClusteringAlgorithmProvider> reorderAlgorithms(
136
136
}
137
137
138
138
@ Override
139
- public void reloadSPI (ClassLoader classLoader ) {
140
- ServiceLoader .load (ClusteringAlgorithmProvider .class , classLoader ).forEach ((provider ) -> {
141
- String name = provider .name ();
142
- if (algorithmProviders .containsKey (name )) {
143
- throw new RuntimeException ("More than one provider for algorithm " + name + "?" );
144
- }
145
- algorithmProviders .put (name , provider );
146
- });
147
-
148
- for (LanguageComponentsProvider provider :
149
- ServiceLoader .load (LanguageComponentsProvider .class , classLoader )) {
150
- for (String lang : provider .languages ()) {
151
- languageComponentProviders
152
- .computeIfAbsent (lang , (k ) -> new ArrayList <>())
153
- .add (provider );
154
- }
155
- }
139
+ public void loadExtensions (ExtensionLoader loader ) {
140
+ loadExtensions (
141
+ loader .loadExtensions (ClusteringAlgorithmProvider .class ),
142
+ loader .loadExtensions (LanguageComponentsProvider .class ));
156
143
}
144
+
145
+ private void loadExtensions (ClassLoader classLoader ) {
146
+ loadExtensions (
147
+ ServiceLoader .load (ClusteringAlgorithmProvider .class , classLoader ),
148
+ ServiceLoader .load (LanguageComponentsProvider .class , classLoader ));
149
+ }
150
+
151
+ private void loadExtensions (Iterable <ClusteringAlgorithmProvider > clusteringAlgorithmProviders ,
152
+ Iterable <LanguageComponentsProvider > languageComponentsProviders ) {
153
+ clusteringAlgorithmProviders .forEach ((provider ) -> {
154
+ String name = provider .name ();
155
+ if (algorithmProviders .containsKey (name )) {
156
+ throw new RuntimeException ("More than one provider for algorithm " + name + "?" );
157
+ }
158
+ algorithmProviders .put (name , provider );
159
+ });
160
+
161
+ languageComponentsProviders .forEach (provider -> {
162
+ for (String lang : provider .languages ()) {
163
+ languageComponentProviders
164
+ .computeIfAbsent (lang , (k ) -> new ArrayList <>())
165
+ .add (provider );
166
+ }
167
+ });
168
+ }
157
169
}
0 commit comments