Bug 298677 - Analyse uses directive does not cancel
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dependencies/CalculateUsesOperation.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dependencies/CalculateUsesOperation.java
index aea74b2..8497528 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dependencies/CalculateUsesOperation.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/search/dependencies/CalculateUsesOperation.java
@@ -40,6 +40,9 @@
 			if (packages.isEmpty())
 				return;
 			Map pkgsAndUses = findPackageReferences(packages, monitor);
+			if (monitor.isCanceled()) {
+				return;
+			}
 			handleSetUsesDirectives(pkgsAndUses);
 		} finally {
 			monitor.done();
@@ -68,6 +71,9 @@
 		IPackageFragment[] frags = PDEJavaHelper.getPackageFragments(jp, Collections.EMPTY_SET, false);
 		monitor.beginTask("", frags.length * 2); //$NON-NLS-1$
 		for (int i = 0; i < frags.length; i++) {
+			if (monitor.isCanceled()) {
+				return pkgsAndUses;
+			}
 			monitor.subTask(NLS.bind(PDEUIMessages.CalculateUsesOperation_calculatingDirective, frags[i].getElementName()));
 			if (packages.contains(frags[i].getElementName())) {
 				HashSet pkgs = new HashSet();