From 31a64e59c497e1112e576dd8937ba6ddf1413e1e Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Thu, 2 Apr 2015 13:55:14 +0200 Subject: [PATCH] better structure after review results --- .../util/indexing/FileBasedIndex.java | 4 ++++ .../impl/PushedFilePropertiesUpdaterImpl.java | 16 +++++++------- .../util/indexing/FileBasedIndexImpl.java | 22 +++++++++++-------- .../util/indexing/UnindexedFilesUpdater.java | 16 ++------------ 4 files changed, 27 insertions(+), 31 deletions(-) diff --git a/platform/indexing-api/src/com/intellij/util/indexing/FileBasedIndex.java b/platform/indexing-api/src/com/intellij/util/indexing/FileBasedIndex.java index 52b07f2cc8f0..0995346a4686 100644 --- a/platform/indexing-api/src/com/intellij/util/indexing/FileBasedIndex.java +++ b/platform/indexing-api/src/com/intellij/util/indexing/FileBasedIndex.java @@ -42,6 +42,10 @@ import java.util.Set; public abstract class FileBasedIndex implements BaseComponent { public abstract void iterateIndexableFiles(@NotNull ContentIterator processor, @NotNull Project project, ProgressIndicator indicator); + public void iterateIndexableFilesConcurrently(@NotNull ContentIterator processor, @NotNull Project project, ProgressIndicator indicator) { + iterateIndexableFiles(processor, project, indicator); + } + public abstract void registerIndexableSet(@NotNull IndexableFileSet set, @Nullable Project project); public abstract void removeIndexableSet(@NotNull IndexableFileSet set); diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdaterImpl.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdaterImpl.java index 9b774b5262b2..455a7212ca6f 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdaterImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/PushedFilePropertiesUpdaterImpl.java @@ -288,14 +288,16 @@ public class PushedFilePropertiesUpdaterImpl extends PushedFilePropertiesUpdater tasks.add(iteration); } - if (ourConcurrentlyFlag.get() == Boolean.TRUE && Registry.is("idea.concurrent.scanning.files.to.index")) { - invoke2xConcurrently(tasks); - } else { - for(Runnable r:tasks) r.run(); - } + invoke2xConcurrentlyIfPossible(tasks); } - public static void invoke2xConcurrently(final List tasks) { + public static void invoke2xConcurrentlyIfPossible(final List tasks) { + if (tasks.size() == 1 || + ApplicationManager.getApplication().isWriteAccessAllowed() || + !Registry.is("idea.concurrent.scanning.files.to.index")) { + for(Runnable r:tasks) r.run(); + return; + } final ConcurrentLinkedQueue tasksQueue = new ConcurrentLinkedQueue(tasks); Future result = null; if (tasks.size() > 1) { @@ -327,8 +329,6 @@ public class PushedFilePropertiesUpdaterImpl extends PushedFilePropertiesUpdater //}); } - public static final ThreadLocal ourConcurrentlyFlag = new ThreadLocal(); - private void applyPushersToFile(final VirtualFile fileOrDir, final FilePropertyPusher[] pushers, final Object[] moduleValues) { ApplicationManager.getApplication().runReadAction(new Runnable() { @Override diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java index 4ee3bc4c0dcf..7524630e9992 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java @@ -2570,12 +2570,21 @@ public class FileBasedIndexImpl extends FileBasedIndex { } } - public static final ThreadLocal ourConcurrentlyFlag = new ThreadLocal(); + @Override + public void iterateIndexableFilesConcurrently(@NotNull ContentIterator processor, @NotNull Project project, ProgressIndicator indicator) { + PushedFilePropertiesUpdaterImpl.invoke2xConcurrentlyIfPossible(collectScanRootRunnables(processor, project, indicator)); + } @Override public void iterateIndexableFiles(@NotNull final ContentIterator processor, @NotNull final Project project, final ProgressIndicator indicator) { + for(Runnable r: collectScanRootRunnables(processor, project, indicator)) r.run(); + } + + private static @NotNull List collectScanRootRunnables(@NotNull final ContentIterator processor, + @NotNull final Project project, + final ProgressIndicator indicator) { if (project.isDisposed()) { - return; + return Collections.emptyList(); } List tasks = new ArrayList(); @@ -2604,7 +2613,7 @@ public class FileBasedIndexImpl extends FileBasedIndex { //important not to depend on project here, to support per-project background reindex // each client gives a project to FileBasedIndex if (project.isDisposed()) { - return; + return null; } for (final VirtualFile root : IndexableSetContributor.getRootsToIndex(provider)) { if (visitedRoots.add(root)) { @@ -2656,12 +2665,7 @@ public class FileBasedIndexImpl extends FileBasedIndex { } } } - - if (ourConcurrentlyFlag.get() == Boolean.TRUE && Registry.is("idea.concurrent.scanning.files.to.index")) { - PushedFilePropertiesUpdaterImpl.invoke2xConcurrently(tasks); - } else { - for(Runnable r:tasks) r.run(); - } + return tasks; } private static void iterateRecursively(@Nullable final VirtualFile root, diff --git a/platform/lang-impl/src/com/intellij/util/indexing/UnindexedFilesUpdater.java b/platform/lang-impl/src/com/intellij/util/indexing/UnindexedFilesUpdater.java index 316694e430d5..b34db6281272 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/UnindexedFilesUpdater.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/UnindexedFilesUpdater.java @@ -31,7 +31,6 @@ import com.intellij.openapi.roots.CollectingContentIterator; import com.intellij.openapi.roots.ModuleRootAdapter; import com.intellij.openapi.roots.ModuleRootEvent; import com.intellij.openapi.roots.impl.PushedFilePropertiesUpdater; -import com.intellij.openapi.roots.impl.PushedFilePropertiesUpdaterImpl; import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Consumer; @@ -63,13 +62,7 @@ public class UnindexedFilesUpdater extends DumbModeTask { private void updateUnindexedFiles(ProgressIndicator indicator) { long started = System.currentTimeMillis(); - boolean canProceedConcurrently = !ApplicationManager.getApplication().isWriteAccessAllowed(); - PushedFilePropertiesUpdaterImpl.ourConcurrentlyFlag.set(canProceedConcurrently); - try { - PushedFilePropertiesUpdater.getInstance(myProject).pushAllPropertiesNow(); - } finally { - PushedFilePropertiesUpdaterImpl.ourConcurrentlyFlag.set(null); - } + PushedFilePropertiesUpdater.getInstance(myProject).pushAllPropertiesNow(); LOG.info("Pushed properties in " + (System.currentTimeMillis() - started) + " ms"); @@ -78,12 +71,7 @@ public class UnindexedFilesUpdater extends DumbModeTask { CollectingContentIterator finder = myIndex.createContentIterator(indicator); long l = System.currentTimeMillis(); - FileBasedIndexImpl.ourConcurrentlyFlag.set(canProceedConcurrently); - try { - myIndex.iterateIndexableFiles(finder, myProject, indicator); - } finally { - FileBasedIndexImpl.ourConcurrentlyFlag.set(null); - } + myIndex.iterateIndexableFilesConcurrently(finder, myProject, indicator); myIndex.filesUpdateEnumerationFinished();