Index: src/java/org/apache/ivyde/eclipse/ui/actions/CleanCacheAction.java =================================================================== --- src/java/org/apache/ivyde/eclipse/ui/actions/CleanCacheAction.java (revision 818491) +++ src/java/org/apache/ivyde/eclipse/ui/actions/CleanCacheAction.java (working copy) @@ -20,26 +20,41 @@ import org.apache.ivy.core.cache.RepositoryCacheManager; import org.apache.ivy.core.cache.ResolutionCacheManager; import org.apache.ivyde.eclipse.IvyPlugin; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.action.Action; public class CleanCacheAction extends Action { private final Cleanable[] cleanables; - public static interface Cleanable { - public void clean(); - public String getName(); + public static abstract class Cleanable { + public void performClean() { + Job cleanJob = new Job("Resolving dependencies") { + protected IStatus run(IProgressMonitor monitor) { + clean(); + return Status.OK_STATUS; + } + }; + + cleanJob.setUser(true); + cleanJob.schedule(); + } + + protected abstract void clean(); + public abstract String getName(); } - public static class ResolutionCacheCleanable implements Cleanable { + public static class ResolutionCacheCleanable extends Cleanable { private final ResolutionCacheManager manager; public ResolutionCacheCleanable(ResolutionCacheManager manager) { this.manager = manager; } - public void clean() { + protected void clean() { manager.clean(); } @@ -48,14 +63,14 @@ } } - public static class RepositoryCacheCleanable implements Cleanable { + public static class RepositoryCacheCleanable extends Cleanable { private final RepositoryCacheManager manager; public RepositoryCacheCleanable(RepositoryCacheManager manager) { this.manager = manager; } - public void clean() { + protected void clean() { manager.clean(); } @@ -75,7 +90,7 @@ public void run() { StringBuffer builder = new StringBuffer("Ivy cache cleaned: "); for (int i = 0; i < cleanables.length; i++) { - cleanables[i].clean(); + cleanables[i].performClean(); builder.append(cleanables[i].getName()); if (i < cleanables.length - 1) { builder.append(", ");