package org.pitest.mutationtest.config; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.pitest.mutationtest.MutationEngineFactory; import org.pitest.mutationtest.MutationResultListenerFactory; import org.pitest.mutationtest.build.MutationGrouperFactory; import org.pitest.mutationtest.build.TestPrioritiserFactory; import org.pitest.mutationtest.filter.MutationFilterFactory; import org.pitest.plugin.ClientClasspathPlugin; import org.pitest.plugin.ToolClasspathPlugin; import org.pitest.testapi.TestPluginFactory; import org.pitest.util.IsolationUtils; import org.pitest.util.ServiceLoader; public class PluginServices { private final ClassLoader loader; public PluginServices(ClassLoader loader) { this.loader = loader; } public static PluginServices makeForContextLoader() { return new PluginServices(IsolationUtils.getContextClassLoader()); } /** * Lists all plugin classes that must be present on the classpath of the * controlling process only. * * @return list of plugins */ public Iterable<? extends ToolClasspathPlugin> findToolClasspathPlugins() { final List<ToolClasspathPlugin> l = new ArrayList<ToolClasspathPlugin>(); l.addAll(findListeners()); l.addAll(findGroupers()); l.addAll(findFilters()); l.addAll(findTestPrioritisers()); return l; } /** * Lists all plugin classes that must be present on the classpath of the code * under test at runtime */ public Iterable<? extends ClientClasspathPlugin> findClientClasspathPlugins() { final List<ClientClasspathPlugin> l = new ArrayList<ClientClasspathPlugin>(); l.addAll(findMutationEngines()); l.addAll(findTestFrameworkPlugins()); l.addAll(nullPlugins()); return l; } Collection<? extends TestPluginFactory> findTestFrameworkPlugins() { return ServiceLoader.load(TestPluginFactory.class, this.loader); } Collection<? extends MutationGrouperFactory> findGroupers() { return ServiceLoader.load(MutationGrouperFactory.class, this.loader); } Collection<? extends MutationFilterFactory> findFilters() { return ServiceLoader.load(MutationFilterFactory.class, this.loader); } Collection<? extends MutationResultListenerFactory> findListeners() { return ServiceLoader.load(MutationResultListenerFactory.class, this.loader); } Collection<? extends MutationEngineFactory> findMutationEngines() { return ServiceLoader.load(MutationEngineFactory.class, this.loader); } Collection<? extends TestPrioritiserFactory> findTestPrioritisers() { return ServiceLoader.load(TestPrioritiserFactory.class, this.loader); } private Collection<ClientClasspathPlugin> nullPlugins() { return ServiceLoader.load(ClientClasspathPlugin.class, this.loader); } }