From 68ca4a5dba6ddb694900b0b314b1f95b355859ad Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Wed, 26 Aug 2015 20:04:22 +0300 Subject: [PATCH] EA-72132 - PEBCE: PersistentEnumeratorBase. --- .../intellij/execution/TestStateStorage.java | 52 +++++++++++++------ .../src/META-INF/LangExtensions.xml | 1 + .../src/componentSets/Lang.xml | 3 -- 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/TestStateStorage.java b/platform/lang-impl/src/com/intellij/execution/TestStateStorage.java index ac42d6c0f5bd..78e8a3bc8952 100644 --- a/platform/lang-impl/src/com/intellij/execution/TestStateStorage.java +++ b/platform/lang-impl/src/com/intellij/execution/TestStateStorage.java @@ -15,13 +15,16 @@ */ package com.intellij.execution; +import com.intellij.openapi.Disposable; import com.intellij.openapi.application.PathManager; -import com.intellij.openapi.components.AbstractProjectComponent; +import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.io.FileUtilRt; import com.intellij.util.io.DataExternalizer; import com.intellij.util.io.EnumeratorStringDescriptor; +import com.intellij.util.io.PersistentEnumeratorBase; import com.intellij.util.io.PersistentHashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -35,7 +38,7 @@ import java.util.Date; /** * @author Dmitry Avdeev */ -public class TestStateStorage extends AbstractProjectComponent{ +public class TestStateStorage implements Disposable { private static final File TEST_HISTORY_PATH = new File(PathManager.getSystemPath(), "testHistory"); public static File getTestHistoryRoot(Project project) { @@ -56,31 +59,46 @@ public class TestStateStorage extends AbstractProjectComponent{ private PersistentHashMap myMap; public static TestStateStorage getInstance(@NotNull Project project) { - return project.getComponent(TestStateStorage.class); + return ServiceManager.getService(project, TestStateStorage.class); } public TestStateStorage(Project project) { - super(project); File file = new File(getTestHistoryRoot(project).getPath() + "/testStateMap"); FileUtilRt.createParentDirs(file); try { - myMap = new PersistentHashMap(file, new EnumeratorStringDescriptor(), new DataExternalizer() { - @Override - public void save(@NotNull DataOutput out, Record value) throws IOException { - out.writeInt(value.magnitude); - out.writeLong(value.date.getTime()); - } - - @Override - public Record read(@NotNull DataInput in) throws IOException { - return new Record(in.readInt(), new Date(in.readLong())); - } - }); + myMap = create(file); + } + catch (PersistentEnumeratorBase.CorruptedException e) { + PersistentHashMap.deleteFilesStartingWith(file); + try { + myMap = create(file); + } + catch (IOException e1) { + LOG.error(e1); + } } catch (IOException e) { LOG.error(e); } + + Disposer.register(project, this); + } + + @NotNull + protected PersistentHashMap create(File file) throws IOException { + return new PersistentHashMap(file, new EnumeratorStringDescriptor(), new DataExternalizer() { + @Override + public void save(@NotNull DataOutput out, Record value) throws IOException { + out.writeInt(value.magnitude); + out.writeLong(value.date.getTime()); + } + + @Override + public Record read(@NotNull DataInput in) throws IOException { + return new Record(in.readInt(), new Date(in.readLong())); + } + }); } @Nullable @@ -105,7 +123,7 @@ public class TestStateStorage extends AbstractProjectComponent{ } @Override - public void disposeComponent() { + public void dispose() { try { myMap.close(); } diff --git a/platform/platform-resources/src/META-INF/LangExtensions.xml b/platform/platform-resources/src/META-INF/LangExtensions.xml index a0eca29d9115..8e71d430fc29 100644 --- a/platform/platform-resources/src/META-INF/LangExtensions.xml +++ b/platform/platform-resources/src/META-INF/LangExtensions.xml @@ -936,6 +936,7 @@ + diff --git a/platform/platform-resources/src/componentSets/Lang.xml b/platform/platform-resources/src/componentSets/Lang.xml index 2d29f65957aa..7f5469e1d960 100644 --- a/platform/platform-resources/src/componentSets/Lang.xml +++ b/platform/platform-resources/src/componentSets/Lang.xml @@ -225,9 +225,6 @@ com.intellij.ide.GeneratedSourceFileChangeTracker com.intellij.ide.GeneratedSourceFileChangeTrackerImpl - - com.intellij.execution.TestStateStorage -