diff --git a/core/src/main/java/hudson/matrix/MatrixProject.java b/core/src/main/java/hudson/matrix/MatrixProject.java index 6fddfa3abddcc58a0645fb798925dd35d9bdd28b..e366882e028bc31f9b2f231d7c339e313e15dd63 100644 --- a/core/src/main/java/hudson/matrix/MatrixProject.java +++ b/core/src/main/java/hudson/matrix/MatrixProject.java @@ -467,6 +467,10 @@ public class MatrixProject extends AbstractProject im throw new UnsupportedOperationException(); } + public void onDeleted(MatrixConfiguration item) throws IOException { + // noop + } + public File getRootDirFor(Combination combination) { File f = getConfigurationsDir(); for (Entry e : combination.entrySet()) diff --git a/core/src/main/java/hudson/model/AbstractItem.java b/core/src/main/java/hudson/model/AbstractItem.java index 9117bcb6d6aac0835b4791fa2d94fbdbe748c974..4208b847654482e594d9e65c8654187c76d27d43 100644 --- a/core/src/main/java/hudson/model/AbstractItem.java +++ b/core/src/main/java/hudson/model/AbstractItem.java @@ -412,12 +412,23 @@ public abstract class AbstractItem extends Actionable implements Item, HttpDelet checkPermission(DELETE); performDelete(); - if(this instanceof TopLevelItem) - Hudson.getInstance().deleteJob((TopLevelItem)this); + try { + invokeOnDeleted(); + } catch (AbstractMethodError e) { + // ignore + } Hudson.getInstance().rebuildDependencyGraph(); } + /** + * A pointless function to work around what appears to be a HotSpot problem. See HUDSON-5756 and bug 6933067 + * on BugParade for more details. + */ + private void invokeOnDeleted() throws IOException { + getParent().onDeleted(this); + } + /** * Does the real job of deleting the item. */ diff --git a/core/src/main/java/hudson/model/Hudson.java b/core/src/main/java/hudson/model/Hudson.java index dc6dd9334219896c45c07d6cc6eeb09d382c9476..2b55f2ea7b122b0429f7fbb519c20e800909a2e5 100644 --- a/core/src/main/java/hudson/model/Hudson.java +++ b/core/src/main/java/hudson/model/Hudson.java @@ -2153,28 +2153,28 @@ public final class Hudson extends Node implements ItemGroup, Stapl } /** - * Called in response to {@link Job#doDoDelete(StaplerRequest, StaplerResponse)} + * Called by {@link Job#renameTo(String)} to update relevant data structure. + * assumed to be synchronized on Hudson by the caller. */ - /*package*/ void deleteJob(TopLevelItem item) throws IOException { - for (ItemListener l : ItemListener.all()) - l.onDeleted(item); + public void onRenamed(TopLevelItem job, String oldName, String newName) throws IOException { + items.remove(oldName); + items.put(newName,job); - items.remove(item.getName()); for (View v : views) - v.onJobRenamed(item, item.getName(), null); + v.onJobRenamed(job, oldName, newName); save(); } /** - * Called by {@link Job#renameTo(String)} to update relevant data structure. - * assumed to be synchronized on Hudson by the caller. + * Called in response to {@link Job#doDoDelete(StaplerRequest, StaplerResponse)} */ - public void onRenamed(TopLevelItem job, String oldName, String newName) throws IOException { - items.remove(oldName); - items.put(newName,job); + public void onDeleted(TopLevelItem item) throws IOException { + for (ItemListener l : ItemListener.all()) + l.onDeleted(item); + items.remove(item.getName()); for (View v : views) - v.onJobRenamed(job, oldName, newName); + v.onJobRenamed(item, item.getName(), null); save(); } diff --git a/core/src/main/java/hudson/model/ItemGroup.java b/core/src/main/java/hudson/model/ItemGroup.java index 9713567109b038e4a08a38bbdb728ae17e321cb8..9c7fe37d7cc45bdcb67c29e92bb9582f5391f09d 100644 --- a/core/src/main/java/hudson/model/ItemGroup.java +++ b/core/src/main/java/hudson/model/ItemGroup.java @@ -77,4 +77,9 @@ public interface ItemGroup extends PersistenceRoot, ModelObject * Internal method. Called by {@link Item}s when they are renamed by users. */ void onRenamed(T item, String oldName, String newName) throws IOException; + + /** + * Internal method. Called by {@link Item}s when they are deleted by users. + */ + void onDeleted(T item) throws IOException; } diff --git a/maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java b/maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java index 898e181281e4bf84b0f5b6b7f5b2d5771cec294a..0cbbe52641311fe51b881b3ad4b429e23e640dea 100644 --- a/maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java +++ b/maven-plugin/src/main/java/hudson/maven/MavenModuleSet.java @@ -449,6 +449,10 @@ public final class MavenModuleSet extends AbstractMavenProject getAllJobs() { Set jobs = new HashSet(getItems()); jobs.add(this);