Skip to content

Commit d28c6d6

Browse files
committed
Add plugin service descriptor paths to minion classpath
1 parent 7bdadd8 commit d28c6d6

File tree

4 files changed

+75
-0
lines changed

4 files changed

+75
-0
lines changed

pitest-command-line/src/main/java/org/pitest/mutationtest/commandline/PluginFilter.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public class PluginFilter implements Predicate<String> {
2020
public PluginFilter(final PluginServices plugin) {
2121
FCollection.mapTo(plugin.findClientClasspathPlugins(), classToLocation(),
2222
this.includedClassPathElement);
23+
FCollection.mapTo(plugin.findClientClasspathPluginDescriptors(), fileToLocation(),
24+
this.includedClassPathElement);
2325
}
2426

2527
private static Function<ClientClasspathPlugin, String> classToLocation() {
@@ -41,6 +43,24 @@ private PitError createPitErrorForExceptionOnClass(final Exception ex,
4143
};
4244
}
4345

46+
private static Function<File, String> fileToLocation() {
47+
return new Function<File, String>() {
48+
@Override
49+
public String apply(final File a) {
50+
try {
51+
return a.getCanonicalPath();
52+
} catch (final IOException ex) {
53+
throw createPitErrorForExceptionOnClass(ex, a);
54+
}
55+
}
56+
57+
private PitError createPitErrorForExceptionOnClass(final Exception ex,
58+
final File file) {
59+
return new PitError("Error getting location of file " + file, ex);
60+
}
61+
};
62+
}
63+
4464
@Override
4565
public boolean test(final String a) {
4666
return this.includedClassPathElement.contains(a);

pitest-entry/src/main/java/org/pitest/mutationtest/config/PluginServices.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.pitest.testapi.TestPluginFactory;
1919
import org.pitest.util.IsolationUtils;
2020

21+
import java.io.File;
2122
import java.util.ArrayList;
2223
import java.util.Collection;
2324
import java.util.List;
@@ -75,6 +76,17 @@ public List<? extends ClientClasspathPlugin> findClientClasspathPlugins() {
7576
return l;
7677
}
7778

79+
public Iterable<? extends File> findClientClasspathPluginDescriptors() {
80+
final List<File> l = new ArrayList<>();
81+
l.addAll(findMutationEngineDescriptors());
82+
l.addAll(findMutationOperatorDescriptors());
83+
l.addAll(findTestFrameworkPluginDescriptors());
84+
l.addAll(nullPluginDescriptors());
85+
l.addAll(loader.findPluginDescriptors(TransformationPlugin.class));
86+
l.addAll(loader.findPluginDescriptors(EnvironmentResetPlugin.class));
87+
return l;
88+
}
89+
7890
public Collection<? extends ConfigurationUpdater> findConfigurationUpdaters() {
7991
return load(ConfigurationUpdater.class);
8092
}
@@ -83,10 +95,18 @@ public Collection<? extends MethodMutatorFactory> findMutationOperators() {
8395
return load(MethodMutatorFactory.class);
8496
}
8597

98+
Collection<File> findMutationOperatorDescriptors() {
99+
return loader.findPluginDescriptors(MethodMutatorFactory.class);
100+
}
101+
86102
Collection<? extends TestPluginFactory> findTestFrameworkPlugins() {
87103
return load(TestPluginFactory.class);
88104
}
89105

106+
Collection<File> findTestFrameworkPluginDescriptors() {
107+
return loader.findPluginDescriptors(TestPluginFactory.class);
108+
}
109+
90110
Collection<? extends MutationGrouperFactory> findGroupers() {
91111
return load(MutationGrouperFactory.class);
92112
}
@@ -99,6 +119,10 @@ Collection<? extends MutationEngineFactory> findMutationEngines() {
99119
return load(MutationEngineFactory.class);
100120
}
101121

122+
Collection<File> findMutationEngineDescriptors() {
123+
return loader.findPluginDescriptors(MutationEngineFactory.class);
124+
}
125+
102126
Collection<? extends TestPrioritiserFactory> findTestPrioritisers() {
103127
return load(TestPrioritiserFactory.class);
104128
}
@@ -107,6 +131,10 @@ private Collection<ClientClasspathPlugin> nullPlugins() {
107131
return load(ClientClasspathPlugin.class);
108132
}
109133

134+
private Collection<File> nullPluginDescriptors() {
135+
return loader.findPluginDescriptors(ClientClasspathPlugin.class);
136+
}
137+
110138
public Collection<MutationInterceptorFactory> findInterceptors() {
111139
return load(MutationInterceptorFactory.class);
112140
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package org.pitest.mutationtest.config;
22

3+
import java.io.File;
34
import java.util.Collection;
45

56
public interface Services {
67
<S> Collection<S> load(Class<S> ifc);
8+
Collection<File> findPluginDescriptors(Class<?> ifc);
79
}

pitest-entry/src/main/java/org/pitest/mutationtest/config/ServicesFromClassLoader.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
package org.pitest.mutationtest.config;
22

3+
import org.pitest.util.PitError;
34
import org.pitest.util.ServiceLoader;
45

6+
import java.io.File;
7+
import java.io.IOException;
8+
import java.net.URISyntaxException;
9+
import java.net.URL;
10+
import java.nio.file.Paths;
11+
import java.util.ArrayList;
512
import java.util.Collection;
13+
import java.util.Enumeration;
614

715
public class ServicesFromClassLoader implements Services {
816
private final ClassLoader loader;
@@ -15,4 +23,21 @@ public ServicesFromClassLoader(ClassLoader loader) {
1523
public <S> Collection<S> load(Class<S> ifc) {
1624
return ServiceLoader.load(ifc, loader);
1725
}
26+
27+
@Override
28+
public Collection<File> findPluginDescriptors(Class<?> ifc) {
29+
try {
30+
final Collection<File> pluginDescriptors = new ArrayList<>();
31+
Enumeration<URL> e = this.loader.getResources("META-INF/services/" + ifc.getName());
32+
while (e.hasMoreElements()) {
33+
URL url = e.nextElement();
34+
if ("file".equals(url.getProtocol())) {
35+
pluginDescriptors.add(Paths.get(url.toURI()).getParent().getParent().getParent().toFile());
36+
}
37+
}
38+
return pluginDescriptors;
39+
} catch (final IOException | URISyntaxException ex) {
40+
throw new PitError("Error finding plugin descriptor for " + ifc.getName(), ex);
41+
}
42+
}
1843
}

0 commit comments

Comments
 (0)