patches to support cancelation of long running tasks FELIX-2590
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@995645 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/model/util/JavaHelper.java b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/model/util/JavaHelper.java
index 7ece159..ba1b938 100644
--- a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/model/util/JavaHelper.java
+++ b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/model/util/JavaHelper.java
@@ -258,30 +258,31 @@
IProgressMonitor monitor)
{
LinkedList<IPackageImport> imports = new LinkedList<IPackageImport>();
-
- for (String packageName : findJavaImports(project, monitor))
- {
- if (!ProfileManager.isBootDelegate(project, packageName))
- { // these must come from boot classloader
- try
- {
- if (!project.isInClasspath(packageName, monitor))
+ Set<String> names = findJavaImports(project, monitor);
+ if ( !monitor.isCanceled() ) {
+ for (String packageName : names)
+ {
+ if (!ProfileManager.isBootDelegate(project, packageName))
+ { // these must come from boot classloader
+ try
{
- Collection<IPackageExport> exports = findExportsForPackage(
- project, packageName);
- if (!exports.isEmpty())
+ if (!project.isInClasspath(packageName, monitor))
{
- imports.add(select(exports));
+ Collection<IPackageExport> exports = findExportsForPackage(
+ project, packageName);
+ if (!exports.isEmpty())
+ {
+ imports.add(select(exports));
+ }
}
}
- }
- catch (CoreException e)
- {
- SigilCore.error("Failed to check classpath", e);
+ catch (CoreException e)
+ {
+ SigilCore.error("Failed to check classpath", e);
+ }
}
}
}
-
return imports;
}
@@ -297,53 +298,55 @@
final Set<String> packages = findJavaImports(project, monitor);
- project.visit(new IModelWalker()
- {
- public boolean visit(IModelElement element)
+ if (!monitor.isCanceled()) {
+ project.visit(new IModelWalker()
{
- if (element instanceof IPackageImport)
+ public boolean visit(IModelElement element)
{
- IPackageImport pi = (IPackageImport) element;
- if (!packages.contains(pi.getPackageName()))
+ if (element instanceof IPackageImport)
{
- unused.add(pi);
- }
- }
- else if (element instanceof IRequiredBundle)
- {
- IRequiredBundle rb = (IRequiredBundle) element;
- IRepositoryManager manager = project.getRepositoryManager();
- ResolutionConfig config = new ResolutionConfig(
- ResolutionConfig.INCLUDE_OPTIONAL
- | ResolutionConfig.IGNORE_ERRORS);
- try
- {
- IResolution r = manager.getBundleResolver().resolve(rb, config,
- new ResolutionMonitorAdapter(monitor));
- ISigilBundle bundle = r.getProvider(rb);
- boolean found = false;
- for (IPackageExport pe : bundle.getBundleInfo().getExports())
+ IPackageImport pi = (IPackageImport) element;
+ if (!packages.contains(pi.getPackageName()))
{
- if (packages.contains(pe.getPackageName()))
+ unused.add(pi);
+ }
+ }
+ else if (element instanceof IRequiredBundle)
+ {
+ IRequiredBundle rb = (IRequiredBundle) element;
+ IRepositoryManager manager = project.getRepositoryManager();
+ ResolutionConfig config = new ResolutionConfig(
+ ResolutionConfig.INCLUDE_OPTIONAL
+ | ResolutionConfig.IGNORE_ERRORS);
+ try
+ {
+ IResolution r = manager.getBundleResolver().resolve(rb, config,
+ new ResolutionMonitorAdapter(monitor));
+ ISigilBundle bundle = r.getProvider(rb);
+ boolean found = false;
+ for (IPackageExport pe : bundle.getBundleInfo().getExports())
{
- found = true;
- break;
+ if (packages.contains(pe.getPackageName()))
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if (!found)
+ {
+ unused.add(rb);
}
}
-
- if (!found)
+ catch (ResolutionException e)
{
- unused.add(rb);
+ SigilCore.error("Failed to resolve " + rb, e);
}
}
- catch (ResolutionException e)
- {
- SigilCore.error("Failed to resolve " + rb, e);
- }
+ return !monitor.isCanceled();
}
- return true;
- }
- });
+ });
+ }
return unused;
}
@@ -860,7 +863,9 @@
Set<String> imports = new HashSet<String>();
findJavaModelImports(project, imports, monitor);
- findTextImports(project, imports, monitor);
+ if ( !monitor.isCanceled() ) {
+ findTextImports(project, imports, monitor);
+ }
return imports;
}
@@ -905,6 +910,10 @@
{
for (IPackageFragment root : project.getJavaModel().getPackageFragments())
{
+ if ( monitor.isCanceled() ) {
+ return;
+ }
+
IPackageFragmentRoot rt = (IPackageFragmentRoot) root.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
if (isInClassPath(project, rt))
diff --git a/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/actions/PruneProjectDependenciesAction.java b/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/actions/PruneProjectDependenciesAction.java
index d3715c0..1b44d7d 100644
--- a/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/actions/PruneProjectDependenciesAction.java
+++ b/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/actions/PruneProjectDependenciesAction.java
@@ -62,6 +62,8 @@
Collection<IModelElement> unused = JavaHelper.findUnusedReferences(
project, monitor);
+ if (monitor.isCanceled()) return Status.CANCEL_STATUS;
+
if (unused.isEmpty())
{
info(shell, "No unused references found");
diff --git a/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/actions/ResolveProjectDependenciesAction.java b/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/actions/ResolveProjectDependenciesAction.java
index 413281e..6cd4b88 100644
--- a/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/actions/ResolveProjectDependenciesAction.java
+++ b/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/actions/ResolveProjectDependenciesAction.java
@@ -65,6 +65,10 @@
List<IPackageImport> imports = JavaHelper.findRequiredImports(project,
monitor);
+ if (monitor.isCanceled()) {
+ return Status.CANCEL_STATUS;
+ }
+
if (imports.isEmpty())
{
info(shell, "No new dependencies found");