diff --git a/core/src/main/java/hudson/ExtensionList.java b/core/src/main/java/hudson/ExtensionList.java index 0b9e55fc28a1a0eb3feae9ae8b8da12dd9f9c448..5e3d6c76103bc3b6ea3d1b771bbfa6fb87899d2f 100644 --- a/core/src/main/java/hudson/ExtensionList.java +++ b/core/src/main/java/hudson/ExtensionList.java @@ -33,6 +33,7 @@ import hudson.ExtensionPoint.LegacyInstancesAreScopedToHudson; import java.util.AbstractList; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -133,21 +134,25 @@ public class ExtensionList extends AbstractList { @Override public synchronized boolean remove(Object o) { - legacyInstances.remove(o); + removeComponent(legacyInstances,o); if(extensions!=null) { List> r = new ArrayList>(extensions); - - for (Iterator> itr = r.iterator(); itr.hasNext();) { - ExtensionComponent c = itr.next(); - if (c.getInstance().equals(o)) - itr.remove(); - } - r.remove(o); + removeComponent(r,o); extensions = sort(r); } return true; } + private void removeComponent(Collection> collection, Object t) { + for (Iterator> itr = collection.iterator(); itr.hasNext();) { + ExtensionComponent c = itr.next(); + if (c.getInstance().equals(t)) { + collection.remove(c); + return; + } + } + } + @Override public synchronized T remove(int index) { T t = get(index); diff --git a/test/src/main/java/org/jvnet/hudson/test/HudsonTestCase.java b/test/src/main/java/org/jvnet/hudson/test/HudsonTestCase.java index 2cc26f26ea0eae23d4ac3bc19c880d5fb1e7156c..d911358930cb2734610c36c10519de21b84a869d 100644 --- a/test/src/main/java/org/jvnet/hudson/test/HudsonTestCase.java +++ b/test/src/main/java/org/jvnet/hudson/test/HudsonTestCase.java @@ -714,6 +714,13 @@ public abstract class HudsonTestCase extends TestCase implements RootAction { return assertBuildStatusSuccess(job.scheduleBuild2(0)); } + /** + * Should be unnecessary, but otherwise IntelliJ complains. + */ + public FreeStyleBuild buildAndAssertSuccess(FreeStyleProject job) throws Exception { + return assertBuildStatusSuccess(job.scheduleBuild2(0)); + } + /** * Asserts that the console output of the build contains the given substring. */