LegacyExtensionFinder extends AbstractExtensionFinder { @Override public Map<String, Set<String>> readPluginsStorages() { log.debug("Reading extensions storages from plugins"); Map<String, Set<String>> result = new LinkedHashMap<>(); List<PluginWrapper> plugins = pluginManager.getPlugins(); for (PluginWrapper plugin : plugins) { String pluginId = plugin.getDescriptor().getPluginId(); log.debug("Reading extensions storage from plugin '{}'", pluginId); Set<String> bucket = new HashSet<>(); try { log.debug("Read '{}'", EXTENSIONS_RESOURCE); ClassLoader pluginClassLoader = plugin.getPluginClassLoader(); try (InputStream resourceStream = pluginClassLoader.getResourceAsStream(EXTENSIONS_RESOURCE)) { if (resourceStream == null) { log.debug("Cannot find '{}'", EXTENSIONS_RESOURCE); } else { collectExtensions(resourceStream, bucket); } } debugExtensions(bucket); result.put(pluginId, bucket); } catch (IOException e) { log.error(e.getMessage(), e); } } return result; } LegacyExtensionFinder(PluginManager pluginManager); @Override Map<String, Set<String>> readClasspathStorages(); @Override Map<String, Set<String>> readPluginsStorages(); static final String EXTENSIONS_RESOURCE; }
@Test @EnabledOnOs(WINDOWS) public void shouldUnlockFileAfterReadingExtensionsFromPlugin() throws Exception { PluginJar pluginJar = new PluginJar.Builder(pluginsPath.resolve("test-plugin.jar"), "test-plugin") .pluginClass(TestPlugin.class.getName()) .pluginVersion("1.2.3") .extension(TestExtension.class.getName()) .build(); assertTrue(pluginJar.file().exists()); PluginManager pluginManager = new JarPluginManager(pluginsPath); pluginManager.loadPlugins(); assertEquals(1, pluginManager.getPlugins().size()); LegacyExtensionFinder extensionFinder = new LegacyExtensionFinder(pluginManager); Map<String, Set<String>> pluginsStorages = extensionFinder.readPluginsStorages(); assertNotNull(pluginsStorages); pluginManager.unloadPlugin(pluginJar.pluginId()); boolean fileDeleted = pluginJar.file().delete(); Set<String> pluginStorages = pluginsStorages.get(pluginJar.pluginId()); assertNotNull(pluginStorages); assertEquals(1, pluginStorages.size()); assertThat(pluginStorages, contains(TestExtension.class.getName())); assertTrue(fileDeleted); assertFalse(pluginJar.file().exists()); }