summaryrefslogtreecommitdiff
path: root/platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdater.java
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2014-07-16 18:07:37 -0700
committerTor Norbye <tnorbye@google.com>2014-07-16 18:09:03 -0700
commit65f60eb9011bb2c549a6d83ae31257480368ddc5 (patch)
treede0dca03bec460e8797332e5f460400f5cf6485f /platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdater.java
parent9ea67227e8fdcf8ed37e65bb96e32767291d0f4f (diff)
downloadidea-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.java40
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);
}
});