/*
- * Copyright 2000-2014 JetBrains s.r.o.
+ * Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import com.intellij.openapi.vfs.impl.local.LocalFileSystemImpl;
import com.intellij.openapi.vfs.newvfs.RefreshQueue;
import com.intellij.util.SmartList;
+import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.io.storage.HeavyProcessLatch;
import com.intellij.util.messages.MessageBusConnection;
import com.intellij.util.ui.UIUtil;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
public class StartupManagerImpl extends StartupManagerEx {
private static final Logger LOG = Logger.getInstance("#com.intellij.ide.startup.impl.StartupManagerImpl");
private final List<Runnable> myNotDumbAwarePostStartupActivities = Collections.synchronizedList(new LinkedList<Runnable>());
private boolean myPostStartupActivitiesPassed = false; // guarded by this
- private final List<CacheUpdater> myCacheUpdaters = new LinkedList<CacheUpdater>();
+ @SuppressWarnings("deprecation") private final List<CacheUpdater> myCacheUpdaters = ContainerUtil.newLinkedList();
+
private volatile boolean myPreStartupActivitiesPassed = false;
private volatile boolean myStartupActivitiesRunning = false;
private volatile boolean myStartupActivitiesPassed = false;
private final Project myProject;
+ private final AtomicBoolean myInitialRefreshStarted = new AtomicBoolean(false);
+
public StartupManagerImpl(Project project) {
myProject = project;
}
(DumbService.isDumbAware(runnable) ? myDumbAwarePostStartupActivities : myNotDumbAwarePostStartupActivities).add(runnable);
}
+ @SuppressWarnings("deprecation")
@Override
public void registerCacheUpdater(@NotNull CacheUpdater updater) {
LOG.assertTrue(!myStartupActivitiesPassed, CacheUpdater.class.getSimpleName() + " must be registered before startup activity finished");
// to avoid atomicity issues if runWhenProjectIsInitialized() is run at the same time
synchronized (StartupManagerImpl.this) {
myPreStartupActivitiesPassed = true;
-
myStartupActivitiesRunning = true;
}
synchronized (StartupManagerImpl.this) {
myStartupActivitiesRunning = false;
-
myStartupActivitiesPassed = true;
}
}
}
public void scheduleInitialVfsRefresh() {
+ if (myInitialRefreshStarted.getAndSet(true)) {
+ return;
+ }
+
UIUtil.invokeLaterIfNeeded(new Runnable() {
@Override
public void run() {
// only after these tasks pass does VFS refresh make sense
dumbService.queueTask(new DumbModeTask() {
@Override
- public void performInDumbMode(@NotNull final ProgressIndicator indicator) {
- UIUtil.invokeLaterIfNeeded(new Runnable() {
- @Override
- public void run() {
- if (!myProject.isDisposed()) {
- scheduleInitialVfsRefresh();
- }
- }
- });
+ public void performInDumbMode(@NotNull ProgressIndicator indicator) {
+ scheduleInitialVfsRefresh();
}
@Override