Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornitind2007-09-03 08:29:18 +0000
committernitind2007-09-03 08:29:18 +0000
commit72573e507ed3caa37f8061c2cafde3868c19c433 (patch)
tree38f19198f10fc3ec05e3a8a132750550f92f7801
parent5a977d69dc70e3985bf4acf8c1fe4ff6f95ac18a (diff)
downloadwebtools.sourceediting-72573e507ed3caa37f8061c2cafde3868c19c433.tar.gz
webtools.sourceediting-72573e507ed3caa37f8061c2cafde3868c19c433.tar.xz
webtools.sourceediting-72573e507ed3caa37f8061c2cafde3868c19c433.zip
[189276] Rogue "Scanning for Task" Message
-rw-r--r--bundles/org.eclipse.wst.sse.core/src-tasktags/org/eclipse/wst/sse/core/internal/tasks/TaskScanningJob.java101
-rw-r--r--bundles/org.eclipse.wst.sse.core/src-tasktags/org/eclipse/wst/sse/core/internal/tasks/TaskScanningScheduler.java6
-rw-r--r--bundles/org.eclipse.wst.sse.core/src-tasktags/org/eclipse/wst/sse/core/internal/tasks/WorkspaceTaskScanner.java4
3 files changed, 62 insertions, 49 deletions
diff --git a/bundles/org.eclipse.wst.sse.core/src-tasktags/org/eclipse/wst/sse/core/internal/tasks/TaskScanningJob.java b/bundles/org.eclipse.wst.sse.core/src-tasktags/org/eclipse/wst/sse/core/internal/tasks/TaskScanningJob.java
index c712f6f838..1183beb241 100644
--- a/bundles/org.eclipse.wst.sse.core/src-tasktags/org/eclipse/wst/sse/core/internal/tasks/TaskScanningJob.java
+++ b/bundles/org.eclipse.wst.sse.core/src-tasktags/org/eclipse/wst/sse/core/internal/tasks/TaskScanningJob.java
@@ -17,16 +17,19 @@ import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.IPreferencesService;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.wst.sse.core.internal.Logger;
import org.eclipse.wst.sse.core.internal.SSECoreMessages;
import org.eclipse.wst.sse.core.internal.SSECorePlugin;
@@ -37,8 +40,8 @@ import org.osgi.framework.Bundle;
* Queueing Job for processing deltas and projects.
*/
class TaskScanningJob extends Job {
- static final int JOB_DELAY_DELTA = 500;
- private static final int JOB_DELAY_PROJECT = 1000;
+ static final int JOB_DELAY_DELTA = 400;
+ private static final int JOB_DELAY_PROJECT = 2000;
static final String TASK_TAG_PROJECTS_ALREADY_SCANNED = "task-tag-projects-already-scanned"; //$NON-NLS-1$
private List fQueue = null;
@@ -49,39 +52,46 @@ class TaskScanningJob extends Job {
super(SSECoreMessages.TaskScanner_0);
fQueue = new ArrayList();
setPriority(Job.DECORATE);
- setSystem(false);
+ setSystem(true);
+ setUser(false);
SSECorePlugin.getDefault().getPluginPreferences().setDefault(TASK_TAG_PROJECTS_ALREADY_SCANNED, ""); //$NON-NLS-1$
}
- synchronized void addDelta(IResourceDelta delta) {
- fQueue.add(delta);
- if (Logger.DEBUG_TASKSJOB) {
- String kind = null;
- switch (delta.getKind()) {
- case IResourceDelta.ADDED :
- kind = " [IResourceDelta.ADDED]"; //$NON-NLS-1$
- break;
- case IResourceDelta.CHANGED :
- kind = " [IResourceDelta.CHANGED]"; //$NON-NLS-1$
- break;
- case IResourceDelta.REMOVED :
- kind = " [IResourceDelta.REMOVED]"; //$NON-NLS-1$
- break;
- case IResourceDelta.ADDED_PHANTOM :
- kind = " [IResourceDelta.ADDED_PHANTOM]"; //$NON-NLS-1$
- break;
- case IResourceDelta.REMOVED_PHANTOM :
- kind = " [IResourceDelta.REMOVED_PHANTOM]"; //$NON-NLS-1$
- break;
+ synchronized void addProjectDelta(IResourceDelta delta) {
+ IResource projectResource = delta.getResource();
+
+ if (projectResource.getType() == IResource.PROJECT) {
+ if (isEnabledOnProject((IProject) projectResource)) {
+ fQueue.add(delta);
+ if (Logger.DEBUG_TASKSJOB) {
+ String kind = null;
+ switch (delta.getKind()) {
+ case IResourceDelta.ADDED :
+ kind = " [IResourceDelta.ADDED]"; //$NON-NLS-1$
+ break;
+ case IResourceDelta.CHANGED :
+ kind = " [IResourceDelta.CHANGED]"; //$NON-NLS-1$
+ break;
+ case IResourceDelta.REMOVED :
+ kind = " [IResourceDelta.REMOVED]"; //$NON-NLS-1$
+ break;
+ case IResourceDelta.ADDED_PHANTOM :
+ kind = " [IResourceDelta.ADDED_PHANTOM]"; //$NON-NLS-1$
+ break;
+ case IResourceDelta.REMOVED_PHANTOM :
+ kind = " [IResourceDelta.REMOVED_PHANTOM]"; //$NON-NLS-1$
+ break;
+ }
+ System.out.println("Adding delta " + delta.getFullPath() + kind); //$NON-NLS-1$
+ }
+ schedule(JOB_DELAY_DELTA);
}
- System.out.println("Adding delta " + delta.getFullPath() + kind); //$NON-NLS-1$
}
- schedule(JOB_DELAY_DELTA);
}
synchronized void addProject(IProject project) {
- if (isEnabledProject(project)) {
+ if (projectHasNotBeenFullyScanned(project)) {
fQueue.add(project);
if (Logger.DEBUG_TASKSJOB) {
System.out.println("Adding project " + project.getName()); //$NON-NLS-1$
@@ -107,8 +117,14 @@ class TaskScanningJob extends Job {
}
return shuttingDown;
}
+
+ private boolean isEnabledOnProject(IProject p) {
+ IPreferencesService preferencesService = Platform.getPreferencesService();
+ IScopeContext[] lookupOrder = new IScopeContext[]{new ProjectScope(p), new InstanceScope(), new DefaultScope()};
+ return preferencesService.getBoolean(TaskTagPreferenceKeys.TASK_TAG_NODE, TaskTagPreferenceKeys.TASK_TAG_ENABLE, false, lookupOrder);
+ }
- private boolean isEnabledProject(IResource project) {
+ private boolean projectHasNotBeenFullyScanned(IResource project) {
String[] projectsScanned = StringUtils.unpack(SSECorePlugin.getDefault().getPluginPreferences().getString(TASK_TAG_PROJECTS_ALREADY_SCANNED));
boolean shouldScan = true;
@@ -133,18 +149,7 @@ class TaskScanningJob extends Job {
if (frameworkIsShuttingDown())
return Status.CANCEL_STATUS;
- try {
- getJobManager().join(ResourcesPlugin.FAMILY_AUTO_REFRESH, new NullProgressMonitor());
- getJobManager().join(ResourcesPlugin.FAMILY_MANUAL_BUILD, new NullProgressMonitor());
- getJobManager().join(ResourcesPlugin.FAMILY_AUTO_BUILD, new NullProgressMonitor());
- }
- catch (OperationCanceledException e1) {
- return Status.CANCEL_STATUS;
- }
- catch (InterruptedException e1) {
- }
-
- validateRememberedProjectList(TASK_TAG_PROJECTS_ALREADY_SCANNED);
+ cleanupRememberedProjectList(TASK_TAG_PROJECTS_ALREADY_SCANNED);
IStatus status = null;
List currentQueue = retrieveQueue();
@@ -171,11 +176,13 @@ class TaskScanningJob extends Job {
}
else if (o instanceof IProject) {
WorkspaceTaskScanner.getInstance().scan((IProject) o, scanMonitor);
- String[] projectsPreviouslyScanned = StringUtils.unpack(SSECorePlugin.getDefault().getPluginPreferences().getString(TASK_TAG_PROJECTS_ALREADY_SCANNED));
- String[] updatedProjects = new String[projectsPreviouslyScanned.length + 1];
- updatedProjects[projectsPreviouslyScanned.length] = ((IResource) o).getName();
- System.arraycopy(projectsPreviouslyScanned, 0, updatedProjects, 0, projectsPreviouslyScanned.length);
- SSECorePlugin.getDefault().getPluginPreferences().setValue(TASK_TAG_PROJECTS_ALREADY_SCANNED, StringUtils.pack(updatedProjects));
+ if(!scanMonitor.isCanceled() ) {
+ String[] projectsPreviouslyScanned = StringUtils.unpack(SSECorePlugin.getDefault().getPluginPreferences().getString(TASK_TAG_PROJECTS_ALREADY_SCANNED));
+ String[] updatedProjects = new String[projectsPreviouslyScanned.length + 1];
+ updatedProjects[projectsPreviouslyScanned.length] = ((IResource) o).getName();
+ System.arraycopy(projectsPreviouslyScanned, 0, updatedProjects, 0, projectsPreviouslyScanned.length);
+ SSECorePlugin.getDefault().getPluginPreferences().setValue(TASK_TAG_PROJECTS_ALREADY_SCANNED, StringUtils.pack(updatedProjects));
+ }
}
}
catch (Exception e) {
@@ -204,7 +211,7 @@ class TaskScanningJob extends Job {
return status;
}
- private void validateRememberedProjectList(String preferenceName) {
+ private void cleanupRememberedProjectList(String preferenceName) {
String[] rememberedProjectNames = StringUtils.unpack(SSECorePlugin.getDefault().getPluginPreferences().getString(preferenceName));
IResource[] workspaceProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
String[] projectNames = new String[workspaceProjects.length];
diff --git a/bundles/org.eclipse.wst.sse.core/src-tasktags/org/eclipse/wst/sse/core/internal/tasks/TaskScanningScheduler.java b/bundles/org.eclipse.wst.sse.core/src-tasktags/org/eclipse/wst/sse/core/internal/tasks/TaskScanningScheduler.java
index 45c134a80d..3f932603e0 100644
--- a/bundles/org.eclipse.wst.sse.core/src-tasktags/org/eclipse/wst/sse/core/internal/tasks/TaskScanningScheduler.java
+++ b/bundles/org.eclipse.wst.sse.core/src-tasktags/org/eclipse/wst/sse/core/internal/tasks/TaskScanningScheduler.java
@@ -53,7 +53,7 @@ public class TaskScanningScheduler {
if (resource.getType() == IResource.ROOT)
return true;
else if (resource.getType() == IResource.PROJECT) {
- fJob.addDelta(delta);
+ fJob.addProjectDelta(delta);
return false;
}
}
@@ -103,7 +103,9 @@ public class TaskScanningScheduler {
/*
* According to
* http://www.eclipse.org/eclipse/development/performance/bloopers.html,
- * POST_CHANGE listeners add a trivial performance cost
+ * POST_CHANGE listeners add a trivial performance cost.
+ *
+ * Always add listener since we might be enabled per-project even if disabled workspace-wide.
*/
ResourcesPlugin.getWorkspace().addResourceChangeListener(scheduler.visitor, IResourceChangeEvent.POST_CHANGE);
diff --git a/bundles/org.eclipse.wst.sse.core/src-tasktags/org/eclipse/wst/sse/core/internal/tasks/WorkspaceTaskScanner.java b/bundles/org.eclipse.wst.sse.core/src-tasktags/org/eclipse/wst/sse/core/internal/tasks/WorkspaceTaskScanner.java
index 2a96abc8f9..c0882067c5 100644
--- a/bundles/org.eclipse.wst.sse.core/src-tasktags/org/eclipse/wst/sse/core/internal/tasks/WorkspaceTaskScanner.java
+++ b/bundles/org.eclipse.wst.sse.core/src-tasktags/org/eclipse/wst/sse/core/internal/tasks/WorkspaceTaskScanner.java
@@ -27,6 +27,7 @@ import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.core.runtime.content.IContentDescription;
@@ -278,6 +279,9 @@ class WorkspaceTaskScanner {
catch (CoreException e1) {
Logger.logException(e1);
}
+ catch(OperationCanceledException e) {
+ // not an error condition
+ }
}
}

Back to the top