Skip to content

Commit ae6697a

Browse files
gselzerctrueden
authored andcommitted
Revamp Discoverer interface
This commit provides major changes to the Discoverer interface. 1. We rename implementingClasses to implsOfType 2. We add the elementsTaggedWith(String key) method 3. We make both elements default, so that Discoverers can decide to implement only one of the two methods.
1 parent e043103 commit ae6697a

9 files changed

Lines changed: 22 additions & 12 deletions

File tree

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,20 @@
11

22
package org.scijava.discovery;
33

4+
import java.lang.reflect.AnnotatedElement;
5+
import java.util.Collections;
46
import java.util.List;
57

68
public interface Discoverer {
79

8-
<T> List<Class<T>> implementingClasses(Class<T> c);
10+
@SuppressWarnings("unused")
11+
default <T> List<Class<T>> implsOfType(Class<T> c) {
12+
return Collections.emptyList();
13+
}
14+
15+
@SuppressWarnings("unused")
16+
default List<AnnotatedElement> elementsTaggedWith(String... tags) {
17+
return Collections.emptyList();
18+
}
919

1020
}

scijava/scijava-discovery/src/main/java/org/scijava/discovery/StaticDiscoverer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public void register(Class<?> c, String name) {
2020

2121
@SuppressWarnings("unchecked")
2222
@Override
23-
public <T> List<Class<T>> implementingClasses(Class<T> c) {
23+
public <T> List<Class<T>> implsOfType(Class<T> c) {
2424
return names.keySet().stream() //
2525
.filter(cls -> cls.isAssignableFrom(c)) //
2626
.map(cls -> (Class<T>) cls) //

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/impl/DefaultOpEnvironment.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ public static List<MatchingRoutine> getMatchingRoutines(
183183
{
184184
List<MatchingRoutine> matchers = new ArrayList<>();
185185
for (Discoverer d : discoverers) {
186-
List<Class<MatchingRoutine>> implementingClasses = d.implementingClasses(
186+
List<Class<MatchingRoutine>> implementingClasses = d.implsOfType(
187187
MatchingRoutine.class);
188188
List<MatchingRoutine> routines = implementingClasses.parallelStream().map(
189189
c -> {
@@ -564,7 +564,7 @@ private synchronized void initWrappers() {
564564
if (wrappers != null) return;
565565
wrappers = new HashMap<>();
566566
for (Discoverer d : discoverers)
567-
for (Class<OpWrapper> cls : d.implementingClasses(OpWrapper.class)) {
567+
for (Class<OpWrapper> cls : d.implsOfType(OpWrapper.class)) {
568568
OpWrapper<?> wrapper;
569569
try {
570570
wrapper = cls.getDeclaredConstructor().newInstance();
@@ -580,7 +580,7 @@ private synchronized void initInfoChainGenerators() {
580580
if (infoChainGenerators != null) return;
581581
Set<InfoChainGenerator> generators = new HashSet<>();
582582
for (Discoverer d : discoverers)
583-
for (Class<InfoChainGenerator> cls : d.implementingClasses(
583+
for (Class<InfoChainGenerator> cls : d.implsOfType(
584584
InfoChainGenerator.class))
585585
{
586586
InfoChainGenerator wrapper;

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/impl/DefaultOpService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public PluginBasedDiscoverer(Context ctx) {
125125

126126
@Override
127127
@SuppressWarnings("unchecked")
128-
public <T> List<Class<T>> implementingClasses(Class<T> c) {
128+
public <T> List<Class<T>> implsOfType(Class<T> c) {
129129
if (!SciJavaPlugin.class.isAssignableFrom(c)) {
130130
throw new UnsupportedOperationException(
131131
"Current discovery mechanism tied to SciJava Context; only able to search for SciJavaPlugins");

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/impl/OpClassBasedClassOpInfoGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public OpClassBasedClassOpInfoGenerator(Discoverer... d) {
2525
@Override
2626
public List<OpInfo> generateInfos() {
2727
List<OpInfo> infos = discoverers.stream() //
28-
.flatMap(d -> d.implementingClasses(Op.class).stream()) //
28+
.flatMap(d -> d.implsOfType(Op.class).stream()) //
2929
.filter(cls -> cls.getAnnotation(OpClass.class) != null) //
3030
.map(cls -> {
3131
OpClass p = cls.getAnnotation(OpClass.class);

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/impl/OpCollectionInfoGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public OpCollectionInfoGenerator(Discoverer... d) {
3232
@Override
3333
public List<OpInfo> generateInfos() {
3434
List<OpInfo> infos = discoverers.stream() //
35-
.flatMap(d -> d.implementingClasses(OpCollection.class).stream()) //
35+
.flatMap(d -> d.implsOfType(OpCollection.class).stream()) //
3636
.map(cls -> {
3737
try {
3838
String version = VersionUtils.getVersion(cls);

scijava/scijava-ops-engine/src/main/java/org/scijava/ops/engine/impl/PluginBasedClassOpInfoGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public PluginBasedClassOpInfoGenerator(Discoverer... d) {
2525
@Override
2626
public List<OpInfo> generateInfos() {
2727
List<OpInfo> infos = discoverers.stream() //
28-
.flatMap(d -> d.implementingClasses(Op.class).stream()) //
28+
.flatMap(d -> d.implsOfType(Op.class).stream()) //
2929
.filter(cls -> cls.getAnnotation(Plugin.class) != null) //
3030
.map(cls -> {
3131
Plugin p = cls.getAnnotation(Plugin.class);

scijava/scijava-ops-serviceloader/src/main/java/org/scijava/ops/serviceloader/ServiceLoaderDiscoverer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class ServiceLoaderDiscoverer implements Discoverer {
1212

1313
@SuppressWarnings("unchecked")
1414
@Override
15-
public <T> List<Class<T>> implementingClasses(Class<T> c) {
15+
public <T> List<Class<T>> implsOfType(Class<T> c) {
1616
// If we cannot use c, we cannot find any implementations
1717
Module thisModule = this.getClass().getModule();
1818
if (!thisModule.canUse(c)) return Collections.emptyList();

scijava/scijava-ops-serviceloader/src/test/java/org/scijava/ops/serviceloader/ServiceLoaderDiscovererTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@ public class ServiceLoaderDiscovererTest {
1313
@Test
1414
public void testServiceLoaderWithOps() {
1515
Discoverer d = new ServiceLoaderDiscoverer();
16-
List<Class<Op>> implementingClasses = d.implementingClasses(Op.class);
16+
List<Class<Op>> implementingClasses = d.implsOfType(Op.class);
1717
Assert.assertTrue(implementingClasses.contains(ServiceBasedAdder.class));
1818
Assert.assertEquals(implementingClasses.size(), 1);
1919
}
2020

2121
@Test
2222
public void testServiceLoaderWithOpCollections() {
2323
Discoverer d = new ServiceLoaderDiscoverer();
24-
List<Class<OpCollection>> implementingClasses = d.implementingClasses(OpCollection.class);
24+
List<Class<OpCollection>> implementingClasses = d.implsOfType(OpCollection.class);
2525
Assert.assertTrue(implementingClasses.contains(ServiceBasedMultipliers.class));
2626
Assert.assertEquals(implementingClasses.size(), 1);
2727
}

0 commit comments

Comments
 (0)