Skip to content

Commit e447fa2

Browse files
gselzerctrueden
authored andcommitted
Remove complex Discoverer methods
1 parent 5dc9198 commit e447fa2

4 files changed

Lines changed: 28 additions & 79 deletions

File tree

scijava/scijava-ops-discovery/src/main/java/org/scijava/ops/discovery/Discoverer.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,4 @@ public interface Discoverer {
77

88
<T> List<? extends Class<T>> implementingClasses(Class<T> c);
99

10-
<T> List<? extends T> implementingInstances(Class<T> c, Class<?>[] constructorClasses, Object[] constructorArgs);
11-
12-
<T> List<Implementation<T>> implementationsOf(Class<T> c);
13-
1410
}

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

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -27,32 +27,4 @@ public <T> List<? extends Class<T>> implementingClasses(Class<T> c) {
2727
.collect(Collectors.toList());
2828
}
2929

30-
@Override
31-
public <T> List<? extends T> implementingInstances(Class<T> c,
32-
Class<?>[] constructorClasses, Object[] constructorArgs)
33-
{
34-
return implementingClasses(c).stream() //
35-
.map(cls -> classToObjectOrNull(cls, constructorClasses, constructorArgs)) //
36-
.filter(o -> o != null) //
37-
.collect(Collectors.toList());
38-
}
39-
40-
private <T> T classToObjectOrNull(Class<T> c, Class<?>[] constructorClasses, Object[] constructorArgs) {
41-
try {
42-
return c.getDeclaredConstructor(constructorClasses).newInstance(
43-
constructorArgs);
44-
}
45-
catch (Throwable t)
46-
{
47-
return null;
48-
}
49-
}
50-
51-
@Override
52-
public <T> List<Implementation<T>> implementationsOf(Class<T> c) {
53-
return implementingClasses(c).stream() //
54-
.map(cls -> new Implementation<>(cls, c, names.get(cls))) //
55-
.collect(Collectors.toList());
56-
}
57-
5830
}

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

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import org.scijava.ops.api.OpCandidate.StatusCode;
5454
import org.scijava.ops.api.OpDependencyMember;
5555
import org.scijava.ops.api.OpEnvironment;
56+
import org.scijava.ops.api.OpHistory;
5657
import org.scijava.ops.api.OpInfo;
5758
import org.scijava.ops.api.OpInfoGenerator;
5859
import org.scijava.ops.api.OpRef;
@@ -92,7 +93,7 @@
9293
*/
9394
public class DefaultOpEnvironment implements OpEnvironment {
9495

95-
private final Discoverer discoverer;
96+
private final List<Discoverer> discoverers;
9697

9798
private OpMatcher matcher;
9899

@@ -137,8 +138,17 @@ public class DefaultOpEnvironment implements OpEnvironment {
137138
*/
138139
private Hints environmentHints = null;
139140

140-
public DefaultOpEnvironment(final Discoverer d, final TypeService typeService, final LogService log, final OpHistoryService history, final List<OpInfoGenerator> infoGenerators) {
141-
this.discoverer = d;
141+
public DefaultOpEnvironment(final TypeService typeService, final LogService log, final OpHistoryService history, final List<OpInfoGenerator> infoGenerators, final List<Discoverer> d) {
142+
this.discoverers = d;
143+
this.typeService = typeService;
144+
this.log = log;
145+
this.history = history;
146+
this.infoGenerators = infoGenerators;
147+
matcher = new DefaultOpMatcher();
148+
}
149+
150+
public DefaultOpEnvironment(final TypeService typeService, final LogService log, final OpHistoryService history, final List<OpInfoGenerator> infoGenerators, final Discoverer... d) {
151+
this.discoverers = Arrays.asList(d);
142152
this.typeService = typeService;
143153
this.log = log;
144154
this.history = history;
@@ -486,11 +496,19 @@ private List<MatchingConditions> resolveOpDependencies(OpCandidate candidate, Hi
486496

487497
private void initWrappers() {
488498
wrappers = new HashMap<>();
489-
Class<?>[] constructorClasses = {};
490-
Object[] constructorObjects = {};
491-
for (OpWrapper<?> wrapper : discoverer.implementingInstances(OpWrapper.class, constructorClasses, constructorObjects)) {
492-
wrappers.put(wrapper.type(), wrapper);
493-
}
499+
for (Discoverer d : discoverers)
500+
for (Class<OpWrapper> cls : d.implementingClasses(OpWrapper.class))
501+
{
502+
OpWrapper<?> wrapper;
503+
try {
504+
wrapper = cls.getDeclaredConstructor().newInstance();
505+
wrappers.put(wrapper.type(), wrapper);
506+
}
507+
catch (Throwable t)
508+
{
509+
log.warn("OpWrapper " + cls + " not instantiated. Due to " + t);
510+
}
511+
}
494512
}
495513

496514
/**

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

Lines changed: 2 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ private synchronized void initEnv() {
9595
List<OpInfoGenerator> infoGenerators = Arrays.asList(
9696
new PluginBasedClassOpInfoGenerator(plugins),
9797
new PluginBasedOpCollectionInfoGenerator(plugins));
98-
env = new DefaultOpEnvironment(new PluginBasedDiscoverer(context()), types,
99-
log, history, infoGenerators);
98+
env = new DefaultOpEnvironment(types, log, history,
99+
infoGenerators, new PluginBasedDiscoverer(context()));
100100
}
101101
}
102102

@@ -122,36 +122,6 @@ public <T> List<? extends Class<T>> implementingClasses(Class<T> c) {
122122
.filter(cls -> cls != null).collect(Collectors.toList());
123123
}
124124

125-
@Override
126-
@SuppressWarnings("unchecked")
127-
public <T> List<? extends T> implementingInstances(Class<T> c,
128-
Class<?>[] constructorClasses, Object[] constructorArgs)
129-
{
130-
if (!SciJavaPlugin.class.isAssignableFrom(c)) {
131-
throw new UnsupportedOperationException(
132-
"Current discovery mechanism tied to SciJava Context; only able to search for SciJavaPlugins");
133-
}
134-
List<SciJavaPlugin> instances = p.createInstancesOfType(
135-
(Class<SciJavaPlugin>) c);
136-
return instances.stream().map(instance -> (T) instance).collect(Collectors
137-
.toList());
138-
}
139-
140-
@Override
141-
@SuppressWarnings("unchecked")
142-
public <T> List<Implementation<T>> implementationsOf(Class<T> c) {
143-
if (!SciJavaPlugin.class.isAssignableFrom(c)) {
144-
throw new UnsupportedOperationException(
145-
"Current discovery mechanism tied to SciJava Context; only able to search for SciJavaPlugins");
146-
}
147-
List<PluginInfo<SciJavaPlugin>> instances = p.getPluginsOfType(
148-
(Class<SciJavaPlugin>) c);
149-
return instances.stream() //
150-
.map(instance -> makeDiscoveryOrNull(c, instance)) //
151-
.filter(d -> d.implementation() != null) //
152-
.collect(Collectors.toList());
153-
}
154-
155125
@SuppressWarnings("unchecked")
156126
private <T> Class<T> makeClassOrNull(@SuppressWarnings("unused") Class<T> type,
157127
PluginInfo<SciJavaPlugin> instance)
@@ -164,11 +134,4 @@ private <T> Class<T> makeClassOrNull(@SuppressWarnings("unused") Class<T> type,
164134
}
165135
}
166136

167-
private <T> Implementation<T> makeDiscoveryOrNull(Class<T> type,
168-
PluginInfo<SciJavaPlugin> instance)
169-
{
170-
return new Implementation<>(makeClassOrNull(type, instance), type, instance
171-
.getName());
172-
}
173-
174137
}

0 commit comments

Comments
 (0)