Skip to content

Commit b44cc06

Browse files
gselzerctrueden
authored andcommitted
Explicitly check for declared usage of c
1 parent 140fdeb commit b44cc06

2 files changed

Lines changed: 10 additions & 12 deletions

File tree

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
# SciJava Discovery: A library for the abstraction of service discovery mechanisms
2-
3-
This module provides the `Discoverer` interface, an abstraction for service discovery.
1+
# SciJava Ops Service Loader: A [`ServiceLoader`](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ServiceLoader.html)
2+
This module provides an implementation of `Discoverer`
43

54
WIP

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

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,14 @@ public class ServiceLoaderDiscoverer implements Discoverer {
1414
@SuppressWarnings("unchecked")
1515
@Override
1616
public <T> List<Class<T>> implementingClasses(Class<T> c) {
17-
// TODO: can we first check that THIS module uses c?
18-
try {
19-
ServiceLoader<T> loader = ServiceLoader.load(c);
20-
return loader.stream().map(p -> (Class<T>) p.get().getClass()) //
21-
.collect(Collectors.toList());
22-
}
23-
catch (ServiceConfigurationError e) {
24-
return Collections.emptyList();
25-
}
17+
// If we cannot use c, we cannot find any implementations
18+
Module thisModule = this.getClass().getModule();
19+
if (!thisModule.canUse(c)) return Collections.emptyList();
20+
21+
// If we can use c, look up the implementations
22+
ServiceLoader<T> loader = ServiceLoader.load(c);
23+
return loader.stream().map(p -> (Class<T>) p.get().getClass()) //
24+
.collect(Collectors.toList());
2625
}
2726

2827
}

0 commit comments

Comments
 (0)