31
31
32
32
package org .scijava .plugin ;
33
33
34
- import java .util .ArrayList ;
35
34
import java .util .Collections ;
36
35
import java .util .HashMap ;
37
36
import java .util .List ;
@@ -58,19 +57,16 @@ public abstract class AbstractSingletonService<PT extends SingletonPlugin>
58
57
private ObjectService objectService ;
59
58
60
59
// TODO: Listen for PluginsAddedEvent and PluginsRemovedEvent
61
- // and update the list of singletons accordingly.
62
-
63
- /** List of singleton plugin instances. */
64
- private List <PT > instances ;
60
+ // and update the map of singletons accordingly.
65
61
66
62
private Map <Class <? extends PT >, PT > instanceMap ;
67
63
68
64
// -- SingletonService methods --
69
65
70
66
@ Override
71
67
public List <PT > getInstances () {
72
- if ( instances == null ) initInstances ( );
73
- return instances ;
68
+ final List < PT > plugins = objectService . getObjects ( getPluginType () );
69
+ return Collections . unmodifiableList ( plugins ) ;
74
70
}
75
71
76
72
@ SuppressWarnings ("unchecked" )
@@ -89,7 +85,7 @@ public void initialize() {
89
85
90
86
@ Override
91
87
public List <PT > get () {
92
- return new ArrayList < PT >( getInstances () );
88
+ return createInstances ( );
93
89
}
94
90
95
91
@ Override
@@ -115,27 +111,30 @@ protected List<PT> filterInstances(final List<PT> list) {
115
111
// -- Helper methods --
116
112
117
113
private synchronized void initInstances () {
118
- if (instances != null ) return ;
119
-
120
- final List <PT > list =
121
- Collections .unmodifiableList (filterInstances (getPluginService ()
122
- .createInstancesOfType (getPluginType ())));
114
+ if (instanceMap != null ) return ;
123
115
124
116
final HashMap <Class <? extends PT >, PT > map =
125
117
new HashMap <Class <? extends PT >, PT >();
126
118
119
+ final List <PT > list = getInstances ();
127
120
for (final PT plugin : list ) {
128
121
@ SuppressWarnings ("unchecked" )
129
122
final Class <? extends PT > ptClass =
130
123
(Class <? extends PT >) plugin .getClass ();
131
124
map .put (ptClass , plugin );
132
125
}
133
126
134
- log .debug ("Found " + list .size () + " " + getPluginType ().getSimpleName () +
135
- " plugins." );
136
-
137
127
instanceMap = map ;
138
- instances = list ;
128
+ }
129
+
130
+ private List <PT > createInstances () {
131
+ final List <PT > instances =
132
+ filterInstances (getPluginService ().createInstancesOfType (getPluginType ()));
133
+
134
+ log .info ("Found " + instances .size () + " " +
135
+ getPluginType ().getSimpleName () + " plugins." );
136
+
137
+ return instances ;
139
138
}
140
139
141
140
}
0 commit comments