Skip to content

Commit 03b7e49

Browse files
gselzerctrueden
authored andcommitted
Simplify discovery
1 parent c893de5 commit 03b7e49

81 files changed

Lines changed: 924 additions & 1014 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

scijava/scijava-discovery-plugin/src/main/java/module-info.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@
55

66
requires org.scijava.discovery;
77
requires transitive org.scijava;
8+
9+
provides org.scijava.discovery.Discoverer with org.scijava.discovery.plugin.PluginBasedDiscoverer;
810
}

scijava/scijava-discovery-plugin/src/main/java/org/scijava/discovery/plugin/PluginBasedDiscoverer.java

Lines changed: 23 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -7,45 +7,18 @@
77

88
import org.scijava.InstantiableException;
99
import org.scijava.discovery.Discoverer;
10-
import org.scijava.discovery.Discovery;
1110
import org.scijava.plugin.Plugin;
11+
import org.scijava.plugin.PluginIndex;
1212
import org.scijava.plugin.PluginInfo;
13-
import org.scijava.plugin.PluginService;
1413
import org.scijava.plugin.SciJavaPlugin;
1514

1615
public class PluginBasedDiscoverer implements Discoverer {
1716

18-
private final PluginService p;
17+
private final PluginIndex index;
1918

20-
public PluginBasedDiscoverer(PluginService p) {
21-
this.p = p;
22-
}
23-
24-
@Override
25-
@SuppressWarnings("unchecked")
26-
public <T> List<Discovery<Class<T>>> discoveriesOfType(Class<T> c) {
27-
if (!SciJavaPlugin.class.isAssignableFrom(c)) {
28-
return Collections.emptyList();
29-
}
30-
List<PluginInfo<SciJavaPlugin>> infos = p.getPluginsOfType(
31-
(Class<SciJavaPlugin>) c);
32-
return infos.stream() //
33-
.map(info -> makeDiscoveryOrNull(c, info)) //
34-
.filter(Objects::nonNull).collect(Collectors.toList());
35-
}
36-
37-
@SuppressWarnings("unchecked")
38-
private <T> Discovery<Class<T>> makeDiscoveryOrNull(@SuppressWarnings("unused") Class<T> type,
39-
PluginInfo<SciJavaPlugin> instance)
40-
{
41-
try {
42-
Class<T> c = (Class<T>) instance.loadClass();
43-
String tag = getTag(instance.getAnnotation());
44-
return new Discovery<>(c, tag);
45-
}
46-
catch (InstantiableException exc) {
47-
return null;
48-
}
19+
public PluginBasedDiscoverer() {
20+
this.index = new PluginIndex();
21+
this.index.discover();
4922
}
5023

5124
private String getTag(Plugin annotation) {
@@ -54,4 +27,21 @@ private String getTag(Plugin annotation) {
5427
return String.join(" ", tagType, priority);
5528
}
5629

57-
}
30+
@Override
31+
public <T> List<T> discover(Class<T> c) {
32+
if (!SciJavaPlugin.class.isAssignableFrom(c))
33+
return Collections.emptyList();
34+
return discoverFrom((Class<? extends SciJavaPlugin>) c).stream().map(o -> (T) o).collect(Collectors.toList());
35+
}
36+
37+
private <PT extends SciJavaPlugin> List<PT> discoverFrom(Class<PT> c) {
38+
List<PluginInfo<PT>> infos = index.getPlugins(c);
39+
return infos.parallelStream().map(info -> {
40+
try {
41+
return info.createInstance();
42+
} catch (InstantiableException e) {
43+
return null;
44+
}
45+
}).filter(Objects::nonNull).collect(Collectors.toList());
46+
}
47+
}

scijava/scijava-discovery-plugin/src/test/java/org/scijava/discovery/plugin/PluginDiscovererTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ public static void tearDown() throws Exception {
3030

3131
@Test
3232
public void testPluginDiscovery() {
33-
Discoverer d = new PluginBasedDiscoverer(plugins);
34-
List<Class<TestPlugin>> implsOfType = d.implsOfType(TestPlugin.class);
35-
Assert.assertTrue(implsOfType.contains(TestPluginImpl.class));
33+
Discoverer d = new PluginBasedDiscoverer();
34+
List<TestPlugin> discoveries = d.discover(TestPlugin.class);
35+
Assert.assertTrue(discoveries.stream().anyMatch(o -> o.getClass() == TestPluginImpl.class));
3636
}
3737

3838
}

0 commit comments

Comments
 (0)