private final PluginManager pluginManager;
private final PluginDescriptor pluginDescriptor;
private final ClassLoadingStrategy classLoadingStrategy;
+ private boolean closed;
public PluginClassLoader(PluginManager pluginManager, PluginDescriptor pluginDescriptor, ClassLoader parent) {
this(pluginManager, pluginDescriptor, parent, ClassLoadingStrategy.PDA);
return null;
}
-
@Override
public Enumeration<URL> getResources(String name) throws IOException {
List<URL> resources = new ArrayList<>();
return Collections.enumeration(resources);
}
+ /**
+ * Closes this class loader.
+ * <p>
+ * This method should be called when the class loader is no longer needed.
+ */
+ @Override
+ public void close() throws IOException {
+ super.close();
+
+ closed = true;
+ }
+
+ /**
+ * Returns whether this class loader has been closed.
+ *
+ * @return {@code true} if this class loader has been closed, {@code false} otherwise
+ */
+ public boolean isClosed() {
+ return closed;
+ }
+
/**
* Loads the class with the specified name from the dependencies of the plugin.
*
import java.util.Enumeration;
import java.util.List;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* @author Sebastian Lövdahl
*/
-public class PluginClassLoaderTest {
+class PluginClassLoaderTest {
private TestPluginManager pluginManager;
private TestPluginManager pluginManagerParentFirst;
Path jarsDirectoryPath = pluginDependencyZip.unzippedPath().resolve(jarsDirectory);
List<File> jars = FileUtils.getJars(jarsDirectoryPath);
for (File jar : jars) {
- parentLastPluginDependencyClassLoader.addFile(jar);
- parentFirstPluginDependencyClassLoader.addFile(jar);
+ parentLastPluginDependencyClassLoader.addFile(jar);
+ parentFirstPluginDependencyClassLoader.addFile(jar);
}
}
assertNumberOfResourcesAndFirstLineOfFirstElement(3, "parent", resources);
}
+ @Test
+ void isClosed() throws IOException {
+ parentLastPluginClassLoader.close();
+ assertTrue(parentLastPluginClassLoader.isClosed());
+ }
+
private static void assertFirstLine(String expected, URL resource) throws URISyntaxException, IOException {
assertNotNull(resource);
assertEquals(expected, Files.readAllLines(Paths.get(resource.toURI())).get(0));
assertEquals(expectedFirstLine, Files.readAllLines(Paths.get(firstResource.toURI())).get(0));
}
- class TestPluginManager extends DefaultPluginManager {
+ static class TestPluginManager extends DefaultPluginManager {
- public TestPluginManager(Path pluginsPath) {
- super(pluginsPath);
- }
+ public TestPluginManager(Path pluginsPath) {
+ super(pluginsPath);
+ }
+
+ void addClassLoader(String pluginId, PluginClassLoader classLoader) {
+ getPluginClassLoaders().put(pluginId, classLoader);
+ }
- void addClassLoader(String pluginId, PluginClassLoader classLoader) {
- getPluginClassLoaders().put(pluginId, classLoader);
- }
}
+
}