init/shutdown SerializationManager for stubs before/after FileBasedIndex

This commit is contained in:
Eugene Zhuravlev
2011-03-08 17:57:19 +01:00
parent f0db1be49c
commit f15136acf2
3 changed files with 22 additions and 8 deletions
@@ -20,6 +20,7 @@ import com.intellij.openapi.components.ApplicationComponent;
import com.intellij.openapi.diagnostic.LogUtil;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.util.ShutDownTracker;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.IStubFileElementType;
@@ -51,6 +52,7 @@ public class SerializationManagerImpl extends SerializationManager implements Ap
private final AtomicBoolean myNameStorageCrashed = new AtomicBoolean(false);
private final File myFile = new File(PathManager.getIndexRoot(), "rep.names");
private boolean mySerializersLoaded = false;
private final AtomicBoolean myShutdownPerformed = new AtomicBoolean(false);
public SerializationManagerImpl() {
myFile.getParentFile().mkdirs();
@@ -63,7 +65,14 @@ public class SerializationManagerImpl extends SerializationManager implements Ap
repairNameStorage(); // need this in order for myNameStorage not to be null
myNameStorageCrashed.set(true);
}
registerSerializer(PsiFileStubImpl.TYPE);
finally {
registerSerializer(PsiFileStubImpl.TYPE);
ShutDownTracker.getInstance().registerShutdownTask(new Runnable() {
public void run() {
performShutdown();
}
});
}
}
public boolean isNameStorageCorrupted() {
@@ -230,8 +239,17 @@ public class SerializationManagerImpl extends SerializationManager implements Ap
}
public void disposeComponent() {
performShutdown();
}
private void performShutdown() {
if (!myShutdownPerformed.compareAndSet(false, true)) {
return; // already shut down
}
LOG.info("START StubSerializationManager SHUTDOWN");
try {
myNameStorage.close();
LOG.info("END StubSerializationManager SHUTDOWN");
}
catch (IOException e) {
LOG.error(e);
@@ -407,12 +407,7 @@ public class StubUpdatingIndex extends CustomImplementationFileBasedIndexExtensi
super.dispose();
}
finally {
try {
getStubIndex().dispose();
}
finally {
((SerializationManagerImpl)SerializationManager.getInstance()).disposeComponent();
}
getStubIndex().dispose();
}
}
}
@@ -57,6 +57,7 @@ import com.intellij.psi.impl.PsiDocumentTransactionListener;
import com.intellij.psi.impl.source.PsiFileImpl;
import com.intellij.psi.search.EverythingGlobalScope;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.stubs.SerializationManager;
import com.intellij.util.ArrayUtil;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
@@ -132,7 +133,7 @@ public class FileBasedIndex implements ApplicationComponent {
boolean acceptInput(VirtualFile file);
}
public FileBasedIndex(final VirtualFileManagerEx vfManager, FileDocumentManager fdm, MessageBus bus) throws IOException {
public FileBasedIndex(final VirtualFileManagerEx vfManager, FileDocumentManager fdm, MessageBus bus, SerializationManager sm /*need this parameter to ensure component dependency*/) throws IOException {
myVfManager = vfManager;
myFileDocumentManager = fdm;
myIsUnitTestMode = ApplicationManager.getApplication().isUnitTestMode();