You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by hi...@apache.org on 2009/11/12 23:25:46 UTC
svn commit: r835606 - in /ant/ivy/ivyde/trunk: ./
org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/
org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/
org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/actions/...
Author: hibou
Date: Thu Nov 12 22:25:46 2009
New Revision: 835606
URL: http://svn.apache.org/viewvc?rev=835606&view=rev
Log:
IVYDE-219: add a multi resolve job and make it return the errors found if any
Added:
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyMultiResolveJob.java (with props)
Modified:
ant/ivy/ivyde/trunk/CHANGES.txt
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyDERuntimeClasspathEntryResolver.java
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/actions/ProjectResolveAction.java
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/actions/ResolveAllAction.java
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/workspaceresolver/WorkspaceResourceChangeListener.java
Modified: ant/ivy/ivyde/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/CHANGES.txt?rev=835606&r1=835605&r2=835606&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/CHANGES.txt (original)
+++ ant/ivy/ivyde/trunk/CHANGES.txt Thu Nov 12 22:25:46 2009
@@ -23,6 +23,7 @@
- FIX: Ivy Classpath Contributed to Dependent Projects When not Exported (IVYDE-193)
- FIX: Incorrect project:// path in the ivysettings configuration make the UI crash (IVYDE-203)
- FIX: conf attributes must not be null (IVYDE-209) (thanks to Ivica Loncar)
+- FIX: Errors are not reported when multiple resolve are launched (IVYDE-219)
version 2.0.0 final
==========================
Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyDERuntimeClasspathEntryResolver.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyDERuntimeClasspathEntryResolver.java?rev=835606&r1=835605&r2=835606&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyDERuntimeClasspathEntryResolver.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyDERuntimeClasspathEntryResolver.java Thu Nov 12 22:25:46 2009
@@ -71,7 +71,10 @@
}
IvyClasspathContainer ivycp = (IvyClasspathContainer) container;
if (ivycp.getConf().isInheritedResolveBeforeLaunch()) {
- ivycp.launchResolve(false, false, new NullProgressMonitor());
+ IStatus status = ivycp.launchResolve(false, false, new NullProgressMonitor());
+ if (status.getCode() != IStatus.OK) {
+ throw new CoreException(status);
+ }
}
IClasspathEntry[] cpes = container.getClasspathEntries();
int property = -1;
Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java?rev=835606&r1=835605&r2=835606&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainer.java Thu Nov 12 22:25:46 2009
@@ -25,12 +25,12 @@
import org.apache.ivy.Ivy;
import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
import org.apache.ivy.core.resolve.ResolveOptions;
-import org.apache.ivy.util.Message;
import org.apache.ivyde.eclipse.IvyDEException;
import org.apache.ivyde.eclipse.IvyPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.jdt.core.ElementChangedEvent;
import org.eclipse.jdt.core.IClasspathAttribute;
@@ -45,7 +45,6 @@
import org.eclipse.jdt.internal.core.JavaElementDelta;
import org.eclipse.jdt.internal.core.JavaModelManager;
import org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider;
-import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;
@@ -55,8 +54,7 @@
*/
public class IvyClasspathContainer implements IClasspathContainer {
- public static final String CONTAINER_ID =
- "org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER";
+ public static final String CONTAINER_ID = "org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER";
private IClasspathEntry[] classpathEntries;
@@ -141,39 +139,27 @@
}
};
- private IvyResolveJob computeClasspathEntries(final boolean usePreviousResolveIfExist,
- boolean isUser) {
- try {
- synchronized (this) {
- if (job != null) {
- // resolve job already running
- return job;
- }
- job = new IvyResolveJob(this, usePreviousResolveIfExist);
- job.setUser(isUser);
- job.setRule(RESOLVE_EVENT_RULE);
+ private IvyResolveJob createResolveJob(final boolean usePreviousResolveIfExist, boolean isUser) {
+ synchronized (this) {
+ if (job != null) {
+ // resolve job already running
return job;
}
- } catch (Throwable e) {
- // IVYDE-79 : catch Throwable in order to catch java.lang.NoClassDefFoundError too
- Message.error(e.getMessage());
- IvyPlugin.log(IStatus.ERROR, "The creation of the job failed", e);
- MessageDialog.openError(IvyPlugin.getActiveWorkbenchShell(), "Resolve failed", e
- .getMessage());
- return null;
+ job = new IvyResolveJob(this, usePreviousResolveIfExist);
+ job.setUser(isUser);
+ job.setRule(RESOLVE_EVENT_RULE);
+ return job;
}
}
- public void launchResolve(boolean usePreviousResolveIfExist, boolean isUser,
+ public IStatus launchResolve(boolean usePreviousResolveIfExist, boolean isUser,
IProgressMonitor monitor) {
- IvyResolveJob j = computeClasspathEntries(usePreviousResolveIfExist, isUser);
- if (j != null) {
- if (monitor != null) {
- j.run(monitor);
- } else {
- j.schedule();
- }
+ IvyResolveJob j = createResolveJob(usePreviousResolveIfExist, isUser);
+ if (monitor != null) {
+ return j.run(monitor);
}
+ j.schedule();
+ return Status.OK_STATUS;
}
void updateClasspathEntries(final IClasspathEntry[] newEntries) {
@@ -210,7 +196,7 @@
null);
// the following code was imported from:
- // http://svn.codehaus.org/m2eclipse/trunk/org.maven.ide.eclipse/src/org/maven/ide/eclipse
+ // http://svn.codehaus.org/m2eclipse/trunk/org.maven.ide.eclipse/src/org/maven/ide/eclipse
// /embedder/BuildPathManager.java
// revision: 370; function setClasspathContainer; line 215
Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java?rev=835606&r1=835605&r2=835606&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java Thu Nov 12 22:25:46 2009
@@ -22,8 +22,8 @@
import java.net.URL;
import java.text.ParseException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -295,10 +295,10 @@
public static List/* <IvyClasspathContainer> */getIvyClasspathContainers(IProject project) {
IJavaProject javaProject = JavaCore.create(project);
- if (javaProject.exists()) {
+ if (javaProject != null && javaProject.exists()) {
return getIvyClasspathContainers(javaProject);
}
- return Arrays.asList(new IvyClasspathContainer[] {});
+ return Collections.EMPTY_LIST;
}
/**
Added: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyMultiResolveJob.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyMultiResolveJob.java?rev=835606&view=auto
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyMultiResolveJob.java (added)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyMultiResolveJob.java Thu Nov 12 22:25:46 2009
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivyde.eclipse.cpcontainer;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.ivyde.eclipse.IvyPlugin;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.core.runtime.jobs.Job;
+
+public class IvyMultiResolveJob extends Job {
+
+ private final List containers;
+
+ public IvyMultiResolveJob(List/* <IvyClasspathContainer> */containers) {
+ super("Multiple Ivy resolve");
+ this.containers = containers;
+ }
+
+ protected IStatus run(IProgressMonitor monitor) {
+ MultiStatus errorsStatus = new MultiStatus(IvyPlugin.ID, IStatus.ERROR,
+ "Some projects fail to be resolved", null);
+
+ monitor.beginTask("Resolving dependencies", containers.size());
+
+ Iterator containerIterator = containers.iterator();
+ while (containerIterator.hasNext()) {
+ if (monitor.isCanceled()) {
+ return Status.CANCEL_STATUS;
+ }
+ IvyClasspathContainer container = (IvyClasspathContainer) containerIterator.next();
+
+ SubProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1);
+ String projectName = container.getConf().getJavaProject().getProject().getName();
+ subMonitor.beginTask("Resolving dependencies of " + projectName + " ("
+ + container.getDescription() + ")", 1);
+
+ IStatus jobStatus = container.launchResolve(false, true, subMonitor);
+ switch (jobStatus.getCode()) {
+ case IStatus.CANCEL:
+ return Status.CANCEL_STATUS;
+ case IStatus.OK:
+ case IStatus.INFO:
+ break;
+ case IStatus.ERROR:
+ errorsStatus.add(jobStatus);
+ break;
+ }
+ }
+
+ if (errorsStatus.getChildren().length != 0) {
+ return errorsStatus;
+ }
+
+ return Status.OK_STATUS;
+ }
+
+}
Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyMultiResolveJob.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyMultiResolveJob.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyMultiResolveJob.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/actions/ProjectResolveAction.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/actions/ProjectResolveAction.java?rev=835606&r1=835605&r2=835606&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/actions/ProjectResolveAction.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/actions/ProjectResolveAction.java Thu Nov 12 22:25:46 2009
@@ -17,58 +17,31 @@
*/
package org.apache.ivyde.eclipse.ui.actions;
-import java.util.Iterator;
+import java.util.ArrayList;
import java.util.List;
-import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathContainer;
import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathUtil;
+import org.apache.ivyde.eclipse.cpcontainer.IvyMultiResolveJob;
import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.action.Action;
public class ProjectResolveAction extends Action {
- IProject[] projects;
-
+
+ private final IProject[] projects;
+
public ProjectResolveAction(IProject[] projects) {
this.projects = projects;
this.setText("Resolve");
}
-
- public void run() {
- final IProject[] finalProjects = projects;
- Job multipleResolveJob = new Job("Resolving dependencies") {
- protected IStatus run(IProgressMonitor monitor) {
- for (int i = 0; i < finalProjects.length; i++) {
- IJavaProject javaProject = JavaCore.create(finalProjects[i]);
- if (javaProject == null)
- continue;
-
- List/* <IvyClasspathContainer> */classpathContainers = IvyClasspathUtil
- .getIvyClasspathContainers(javaProject);
-
- Iterator containerIterator = classpathContainers.iterator();
- while (containerIterator.hasNext()) {
- if (monitor.isCanceled()) {
- return Status.CANCEL_STATUS;
- }
- SubProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1);
- IvyClasspathContainer container = (IvyClasspathContainer) containerIterator
- .next();
- container.launchResolve(false, true, subMonitor);
- }
- }
-
- return Status.OK_STATUS;
- }
- };
+ public void run() {
+ List allContainers = new ArrayList();
+ for (int i = 0; i < projects.length; i++) {
+ allContainers.addAll(IvyClasspathUtil.getIvyClasspathContainers(projects[i]));
+ }
+ Job multipleResolveJob = new IvyMultiResolveJob(allContainers);
multipleResolveJob.setUser(true);
multipleResolveJob.schedule();
}
Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/actions/ResolveAllAction.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/actions/ResolveAllAction.java?rev=835606&r1=835605&r2=835606&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/actions/ResolveAllAction.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/actions/ResolveAllAction.java Thu Nov 12 22:25:46 2009
@@ -18,17 +18,11 @@
package org.apache.ivyde.eclipse.ui.actions;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
-import org.apache.ivyde.eclipse.IvyPlugin;
-import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathContainer;
import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathUtil;
+import org.apache.ivyde.eclipse.cpcontainer.IvyMultiResolveJob;
import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jdt.core.IJavaModel;
import org.eclipse.jdt.core.IJavaProject;
@@ -40,74 +34,36 @@
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
public class ResolveAllAction implements IWorkbenchWindowActionDelegate {
- /**
- * The constructor.
- */
- public ResolveAllAction() {
- }
- /**
- * The action has been activated. The argument of the method represents the 'real' action
- * sitting in the workbench UI.
- *
- * @see IWorkbenchWindowActionDelegate#run
- */
public void run(IAction action) {
- Job resolveAllJob = new Job("Resolve all dependencies") {
- protected IStatus run(IProgressMonitor monitor) {
- IJavaModel model = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
- IJavaProject[] projects;
- try {
- projects = model.getJavaProjects();
- } catch (JavaModelException e) {
- return new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR,
- "Unable to get the list of available java projects", e);
- }
- List containers = new ArrayList();
- for (int i = 0; i < projects.length; i++) {
- containers.addAll(IvyClasspathUtil.getIvyClasspathContainers(projects[i]));
- }
- monitor.beginTask("Resolve all dependencies", containers.size());
- for (Iterator iter = containers.iterator(); iter.hasNext();) {
- if (monitor.isCanceled()) {
- return Status.CANCEL_STATUS;
- }
- SubProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1);
- IvyClasspathContainer cp = (IvyClasspathContainer) iter.next();
- cp.launchResolve(false, true, subMonitor);
- }
-
- return Status.OK_STATUS;
- }
- };
+ IJavaModel model = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
+ IJavaProject[] projects;
+ try {
+ projects = model.getJavaProjects();
+ } catch (JavaModelException e) {
+ // TODO deal with it properly
+ return;
+ }
+
+ List allContainers = new ArrayList();
+ for (int i = 0; i < projects.length; i++) {
+ allContainers.addAll(IvyClasspathUtil.getIvyClasspathContainers(projects[i]));
+ }
+ Job resolveAllJob = new IvyMultiResolveJob(allContainers);
resolveAllJob.setUser(true);
resolveAllJob.schedule();
}
- /**
- * Selection in the workbench has been changed. We can change the state of the 'real' action
- * here if we want, but this can only happen after the delegate has been created.
- *
- * @see IWorkbenchWindowActionDelegate#selectionChanged
- */
public void selectionChanged(IAction action, ISelection selection) {
+ // nothing to do
}
- /**
- * We can use this method to dispose of any system resources we previously allocated.
- *
- * @see IWorkbenchWindowActionDelegate#dispose
- */
public void dispose() {
+ // nothing to do
}
- /**
- * We will cache window object in order to be able to provide parent shell for the message
- * dialog.
- *
- * @see IWorkbenchWindowActionDelegate#init
- */
public void init(IWorkbenchWindow window) {
+ // nothing to do
}
}
Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/workspaceresolver/WorkspaceResourceChangeListener.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/workspaceresolver/WorkspaceResourceChangeListener.java?rev=835606&r1=835605&r2=835606&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/workspaceresolver/WorkspaceResourceChangeListener.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/workspaceresolver/WorkspaceResourceChangeListener.java Thu Nov 12 22:25:46 2009
@@ -17,6 +17,7 @@
*/
package org.apache.ivyde.eclipse.workspaceresolver;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashSet;
@@ -25,6 +26,7 @@
import org.apache.ivyde.eclipse.IvyPlugin;
import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathContainer;
import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathUtil;
+import org.apache.ivyde.eclipse.cpcontainer.IvyMultiResolveJob;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
@@ -35,14 +37,10 @@
import org.eclipse.core.resources.IResourceRuleFactory;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.resources.WorkspaceJob;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
@@ -113,21 +111,10 @@
// dependent projects after the close operation has finished.
IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
ISchedulingRule modifyRule = ruleFactory.modifyRule(javaProject.getCorrespondingResource());
- class IvyClosedProjectJob extends WorkspaceJob {
-
- public IvyClosedProjectJob() {
- super("IvyClosedProjectJob");
- }
-
- public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
- resolveAffectedProjects(javaProject.getPath(), isUser(), monitor);
- return Status.OK_STATUS;
- }
- }
-
- IvyClosedProjectJob job = new IvyClosedProjectJob();
- job.setRule(modifyRule);
- job.schedule();
+ List affectedContainers = getAffectedContainers(javaProject.getPath());
+ IvyMultiResolveJob multiResolveJob = new IvyMultiResolveJob(affectedContainers);
+ multiResolveJob.setRule(modifyRule);
+ multiResolveJob.schedule();
}
@@ -172,30 +159,27 @@
IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
ISchedulingRule modifyRule = ruleFactory.modifyRule(ResourcesPlugin.getWorkspace()
.getRoot());
- class IvyOpenProjectJob extends WorkspaceJob {
-
- public IvyOpenProjectJob() {
- super("IvyOpenProjectJob");
- }
-
- public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
- resolveAllProjectsExcept(projects, isUser(), monitor);
- return Status.OK_STATUS;
- }
- }
-
- IvyOpenProjectJob job = new IvyOpenProjectJob();
- job.setRule(modifyRule);
- job.schedule();
+ List allContainers = getAllContainersExcludingProjects(projects);
+ IvyMultiResolveJob multiResolveJob = new IvyMultiResolveJob(allContainers);
+ multiResolveJob.setRule(modifyRule);
+ multiResolveJob.schedule();
}
- /*
- * Only resolve those projects which include the specified project path as ivy dependency
+ /**
+ * Return the IvyDE container which include the specified project path as ivy dependency
*/
- private void resolveAffectedProjects(IPath projectPath, boolean isUser, IProgressMonitor monitor)
- throws JavaModelException {
+ private List getAffectedContainers(IPath projectPath) {
+ List/* <IvyClasspathContainer> */allContainers = new ArrayList();
+
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
- IJavaProject[] projects = JavaCore.create(root).getJavaProjects();
+ IJavaProject[] projects;
+ try {
+ projects = JavaCore.create(root).getJavaProjects();
+ } catch (JavaModelException e) {
+ // something bad happend in the JDT...
+ IvyPlugin.log(e);
+ return allContainers;
+ }
for (int i = 0; i < projects.length; i++) {
IJavaProject javaProject = projects[i];
@@ -212,44 +196,35 @@
|| !containerEntry.getPath().equals(projectPath)) {
continue;
}
-
- SubProgressMonitor subMonitor = null;
- if (monitor != null) {
- if (monitor.isCanceled()) {
- return;
- }
- subMonitor = new SubProgressMonitor(monitor, 1);
- }
- ivycp.launchResolve(false, isUser, subMonitor);
+ allContainers.add(ivycp);
break;
}
}
}
+
+ return allContainers;
}
- private void resolveAllProjectsExcept(Collection sourceProjects, boolean isUser,
- IProgressMonitor monitor) throws JavaModelException {
- IJavaProject[] projects = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot())
- .getJavaProjects();
+ private List getAllContainersExcludingProjects(Collection sourceProjects) {
+ List/* <IvyClasspathContainer> */allContainers = new ArrayList();
+
+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+ IJavaProject[] projects;
+ try {
+ projects = JavaCore.create(root).getJavaProjects();
+ } catch (JavaModelException e) {
+ // something bad happend in the JDT...
+ IvyPlugin.log(e);
+ return allContainers;
+ }
+
for (int i = 0; i < projects.length; i++) {
- if (sourceProjects.contains(projects[i])) {
- continue;
- }
- SubProgressMonitor subMonitor = null;
- if (monitor != null) {
- if (monitor.isCanceled()) {
- return;
- }
- subMonitor = new SubProgressMonitor(monitor, 1);
- }
- List/* <IvyClasspathContainer> */containers = IvyClasspathUtil
- .getIvyClasspathContainers(projects[i]);
- Iterator/* <IvyClasspathContainer> */itContainer = containers.iterator();
- while (itContainer.hasNext()) {
- IvyClasspathContainer ivycp = (IvyClasspathContainer) itContainer.next();
- ivycp.launchResolve(false, isUser, subMonitor);
+ if (!sourceProjects.contains(projects[i])) {
+ allContainers.addAll(IvyClasspathUtil.getIvyClasspathContainers(projects[i]));
}
}
+
+ return allContainers;
}
}