diff options
author | Tor Norbye <tnorbye@google.com> | 2014-07-16 18:07:37 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2014-07-16 18:09:03 -0700 |
commit | 65f60eb9011bb2c549a6d83ae31257480368ddc5 (patch) | |
tree | de0dca03bec460e8797332e5f460400f5cf6485f /platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdater.java | |
parent | 9ea67227e8fdcf8ed37e65bb96e32767291d0f4f (diff) | |
download | idea-65f60eb9011bb2c549a6d83ae31257480368ddc5.tar.gz |
Snapshot idea/138.1029 from git://git.jetbrains.org/idea/community.git
Update from idea/138.538 to idea/138.1029
Change-Id: I828f829a968439a99ec67640990c18ff7c9b58ce
Diffstat (limited to 'platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdater.java')
-rw-r--r-- | platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdater.java | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdater.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdater.java index 4ec190127427..cb4b94016611 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdater.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdater.java @@ -59,9 +59,10 @@ public class PushedFilePropertiesUpdater { private final Project myProject; private final FilePropertyPusher[] myPushers; private final FilePropertyPusher[] myFilePushers; - private final Queue<DumbModeTask> myTasks = new ConcurrentLinkedQueue<DumbModeTask>(); + private final Queue<Runnable> myTasks = new ConcurrentLinkedQueue<Runnable>(); private final MessageBusConnection myConnection; + @NotNull public static PushedFilePropertiesUpdater getInstance(Project project) { return project.getComponent(PushedFilePropertiesUpdater.class); } @@ -84,7 +85,6 @@ public class PushedFilePropertiesUpdater { myConnection.subscribe(ProjectTopics.PROJECT_ROOTS, new ModuleRootAdapter() { @Override public void rootsChanged(final ModuleRootEvent event) { - pushAll(myPushers); for (FilePropertyPusher pusher : myPushers) { pusher.afterRootsChanged(project); } @@ -123,8 +123,6 @@ public class PushedFilePropertiesUpdater { } public void initializeProperties() { - pushAll(myPushers); - for (final FilePropertyPusher pusher : myPushers) { pusher.initExtra(myProject, myProject.getMessageBus(), new FilePropertyPusher.Engine() { @Override @@ -140,13 +138,18 @@ public class PushedFilePropertiesUpdater { } } + public void pushAllPropertiesNow() { + performPushTasks(); + doPushAll(myPushers); + } + private void schedulePushRecursively(final VirtualFile dir, final FilePropertyPusher... pushers) { if (pushers.length == 0) return; final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(myProject).getFileIndex(); if (!fileIndex.isInContent(dir)) return; - queueTask(new DumbModeTask() { + queueTask(new Runnable() { @Override - public void performInDumbMode(@NotNull final ProgressIndicator indicator) { + public void run() { doPushRecursively(dir, pushers, fileIndex); } }); @@ -162,25 +165,32 @@ public class PushedFilePropertiesUpdater { }); } - private void queueTask(DumbModeTask task) { - myTasks.offer(task); - DumbService.getInstance(myProject).queueTask(new DumbModeTask() { + private void queueTask(Runnable action) { + myTasks.offer(action); + final DumbModeTask task = new DumbModeTask() { @Override public void performInDumbMode(@NotNull ProgressIndicator indicator) { - performPushTasks(indicator); + performPushTasks(); + } + }; + myProject.getMessageBus().connect(task).subscribe(ProjectTopics.PROJECT_ROOTS, new ModuleRootAdapter() { + @Override + public void rootsChanged(ModuleRootEvent event) { + DumbService.getInstance(myProject).cancelTask(task); } }); + DumbService.getInstance(myProject).queueTask(task); } - public void performPushTasks(ProgressIndicator indicator) { + private void performPushTasks() { boolean hadTasks = false; while (true) { - DumbModeTask task = myTasks.poll(); + Runnable task = myTasks.poll(); if (task == null) { break; } hadTasks = true; - task.performInDumbMode(indicator); + task.run(); } if (hadTasks && !myProject.isDisposed()) { @@ -213,9 +223,9 @@ public class PushedFilePropertiesUpdater { } public void pushAll(final FilePropertyPusher... pushers) { - queueTask(new DumbModeTask() { + queueTask(new Runnable() { @Override - public void performInDumbMode(@NotNull ProgressIndicator indicator) { + public void run() { doPushAll(pushers); } }); |