diff options
author | nitind | 2007-09-03 08:29:18 +0000 |
---|---|---|
committer | nitind | 2007-09-03 08:29:18 +0000 |
commit | 72573e507ed3caa37f8061c2cafde3868c19c433 (patch) | |
tree | 38f19198f10fc3ec05e3a8a132750550f92f7801 | |
parent | 5a977d69dc70e3985bf4acf8c1fe4ff6f95ac18a (diff) | |
download | webtools.sourceediting-72573e507ed3caa37f8061c2cafde3868c19c433.tar.gz webtools.sourceediting-72573e507ed3caa37f8061c2cafde3868c19c433.tar.xz webtools.sourceediting-72573e507ed3caa37f8061c2cafde3868c19c433.zip |
[189276] Rogue "Scanning for Task" Message
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 + } } } |