3131
3232package org .scijava .plugin ;
3333
34- import java .util .ArrayList ;
3534import java .util .Collections ;
3635import java .util .HashMap ;
3736import java .util .List ;
@@ -58,19 +57,16 @@ public abstract class AbstractSingletonService<PT extends SingletonPlugin>
5857 private ObjectService objectService ;
5958
6059 // 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.
6561
6662 private Map <Class <? extends PT >, PT > instanceMap ;
6763
6864 // -- SingletonService methods --
6965
7066 @ Override
7167 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 ) ;
7470 }
7571
7672 @ SuppressWarnings ("unchecked" )
@@ -89,7 +85,7 @@ public void initialize() {
8985
9086 @ Override
9187 public List <PT > get () {
92- return new ArrayList < PT >( getInstances () );
88+ return createInstances ( );
9389 }
9490
9591 @ Override
@@ -115,27 +111,30 @@ protected List<PT> filterInstances(final List<PT> list) {
115111 // -- Helper methods --
116112
117113 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 ;
123115
124116 final HashMap <Class <? extends PT >, PT > map =
125117 new HashMap <Class <? extends PT >, PT >();
126118
119+ final List <PT > list = getInstances ();
127120 for (final PT plugin : list ) {
128121 @ SuppressWarnings ("unchecked" )
129122 final Class <? extends PT > ptClass =
130123 (Class <? extends PT >) plugin .getClass ();
131124 map .put (ptClass , plugin );
132125 }
133126
134- log .debug ("Found " + list .size () + " " + getPluginType ().getSimpleName () +
135- " plugins." );
136-
137127 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 ;
139138 }
140139
141140}
0 commit comments