Ticket #18277: 18277.1.patch
File 18277.1.patch, 4.2 KB (added by , 4 years ago) |
---|
-
src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
55 55 import org.openstreetmap.josm.gui.util.GuiHelper; 56 56 import org.openstreetmap.josm.gui.widgets.FilterField; 57 57 import org.openstreetmap.josm.plugins.PluginDownloadTask; 58 import org.openstreetmap.josm.plugins.PluginHandler; 58 59 import org.openstreetmap.josm.plugins.PluginInformation; 59 60 import org.openstreetmap.josm.plugins.ReadLocalPluginInformationTask; 60 61 import org.openstreetmap.josm.plugins.ReadRemotePluginInformationTask; … … 324 325 List<String> l = new LinkedList<>(model.getSelectedPluginNames()); 325 326 Collections.sort(l); 326 327 Config.getPref().putList("plugins", l); 327 if (!model.getNewlyDeactivatedPlugins().isEmpty()) 328 return true; 328 List<PluginInformation> deactivatedPlugins = model.getNewlyDeactivatedPlugins(); 329 if (!deactivatedPlugins.isEmpty()) { 330 boolean requiresRestart = PluginHandler.removePlugins(deactivatedPlugins); 331 if (requiresRestart) 332 return requiresRestart; 333 } 329 334 for (PluginInformation pi : model.getNewlyActivatedPlugins()) { 330 335 if (!pi.canloadatruntime) 331 336 return true; -
src/org/openstreetmap/josm/plugins/PluginHandler.java
68 68 import org.openstreetmap.josm.io.OfflineAccessException; 69 69 import org.openstreetmap.josm.io.OnlineResource; 70 70 import org.openstreetmap.josm.spi.preferences.Config; 71 import org.openstreetmap.josm.tools.Destroyable; 71 72 import org.openstreetmap.josm.tools.GBC; 72 73 import org.openstreetmap.josm.tools.I18n; 73 74 import org.openstreetmap.josm.tools.ImageProvider; … … 1167 1168 pluginsToDownload, 1168 1169 tr("Update plugins") 1169 1170 ); 1170 1171 1171 try { 1172 1172 pluginDownloadTask.run(); 1173 1173 } catch (RuntimeException e) { // NOPMD … … 1331 1331 URL oldPluginURL = updatedPlugin.toURI().toURL(); 1332 1332 pluginsToLoad.stream().filter(x -> x.libraries.contains(oldPluginURL)).forEach( 1333 1333 x -> Collections.replaceAll(x.libraries, oldPluginURL, newPluginURL)); 1334 1335 // Attempt to update loaded plugin (must implement Destroyable) 1336 PluginInformation tInfo = pluginsToLoad.parallelStream() 1337 .filter(x -> x.libraries.contains(newPluginURL)).findAny().orElse(null); 1338 if (tInfo != null) { 1339 Object tUpdatedPlugin = getPlugin(tInfo.name); 1340 if (tUpdatedPlugin instanceof Destroyable) { 1341 ((Destroyable) tUpdatedPlugin).destroy(); 1342 PluginHandler.loadPlugins(getInfoPanel(), Collections.singleton(tInfo), 1343 NullProgressMonitor.INSTANCE); 1344 } 1345 } 1334 1346 } catch (MalformedURLException e) { 1335 1347 Logging.warn(e); 1336 1348 } … … 1642 1654 return cbDontShowAgain.isSelected(); 1643 1655 } 1644 1656 } 1657 1658 /** 1659 * Remove deactivated plugins, returning true if JOSM should restart 1660 * 1661 * @param deactivatedPlugins 1662 * @return true if there was a plugin that requires a restart 1663 */ 1664 public static boolean removePlugins(List<PluginInformation> deactivatedPlugins) { 1665 List<Destroyable> noRestart = deactivatedPlugins.parallelStream() 1666 .map(info -> PluginHandler.getPlugin(info.name)).filter(Destroyable.class::isInstance) 1667 .map(Destroyable.class::cast).collect(Collectors.toList()); 1668 noRestart.forEach(Destroyable::destroy); 1669 return deactivatedPlugins.size() == noRestart.size(); 1670 } 1645 1671 }