diff --git a/core/src/main/java/hudson/PluginWrapper.java b/core/src/main/java/hudson/PluginWrapper.java index 8d590e407906b2d7e68fd2c55a16b57c61b3597c..32458881948bd001bd9f78130fcb7e9fd8c99d02 100644 --- a/core/src/main/java/hudson/PluginWrapper.java +++ b/core/src/main/java/hudson/PluginWrapper.java @@ -55,6 +55,7 @@ import org.kohsuke.stapler.interceptor.RequirePOST; import java.util.Enumeration; import java.util.jar.JarFile; import java.util.logging.Level; +import javax.annotation.CheckForNull; /** * Represents a Jenkins plug-in and associated control information @@ -284,8 +285,9 @@ public class PluginWrapper implements Comparable, ModelObject { /** * Gets the instance of {@link Plugin} contributed by this plugin. */ - public Plugin getPlugin() { - return Jenkins.lookup(PluginInstanceStore.class).store.get(this); + public @CheckForNull Plugin getPlugin() { + PluginInstanceStore pis = Jenkins.lookup(PluginInstanceStore.class); + return pis != null ? pis.store.get(this) : null; } /** @@ -373,11 +375,16 @@ public class PluginWrapper implements Comparable, ModelObject { * Terminates the plugin. */ public void stop() { - LOGGER.log(Level.FINE, "Stopping {0}", shortName); - try { - getPlugin().stop(); - } catch(Throwable t) { - LOGGER.log(WARNING, "Failed to shut down "+shortName, t); + Plugin plugin = getPlugin(); + if (plugin != null) { + try { + LOGGER.log(Level.FINE, "Stopping {0}", shortName); + plugin.stop(); + } catch (Throwable t) { + LOGGER.log(WARNING, "Failed to shut down " + shortName, t); + } + } else { + LOGGER.log(Level.FINE, "Could not find Plugin instance to stop for {0}", shortName); } // Work around a bug in commons-logging. // See http://www.szegedi.org/articles/memleak.html diff --git a/core/src/main/java/jenkins/model/Jenkins.java b/core/src/main/java/jenkins/model/Jenkins.java index ecc8317398804ec3e1026a7d6dc1071539dd0dc9..03ead6b7c3789204cd6c032c820ebbe01ac896d4 100755 --- a/core/src/main/java/jenkins/model/Jenkins.java +++ b/core/src/main/java/jenkins/model/Jenkins.java @@ -3880,10 +3880,11 @@ public class Jenkins extends AbstractCIBase implements ModifiableTopLevelItemGro } /** - * Shortcut for {@code Hudson.getInstance().lookup.get(type)} + * Shortcut for {@code Jenkins.getInstance().lookup.get(type)} */ - public static T lookup(Class type) { - return Jenkins.getInstance().lookup.get(type); + public static @CheckForNull T lookup(Class type) { + Jenkins j = Jenkins.getInstance(); + return j != null ? j.lookup.get(type) : null; } /**