From f3a12fdcecbede7987b767569ebfdb65f68368fb Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Tue, 7 Oct 2014 14:13:25 +0200 Subject: [PATCH] rename to XmlElementStorageSaveSession --- .../impl/stores/DefaultProjectStoreImpl.java | 4 +- .../impl/stores/FileBasedStorage.java | 16 ++++--- .../impl/stores/XmlElementStorage.java | 43 ++++++++++++++----- .../impl/XmlElementStorageTest.java | 4 +- 4 files changed, 48 insertions(+), 19 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/DefaultProjectStoreImpl.java b/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/DefaultProjectStoreImpl.java index 05d2bb7a4fde..3c1bf6f964ce 100644 --- a/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/DefaultProjectStoreImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/DefaultProjectStoreImpl.java @@ -71,8 +71,8 @@ public class DefaultProjectStoreImpl extends ProjectStoreImpl { } @Override - protected MySaveSession createSaveSession(@NotNull StorageData storageData) { - return new MySaveSession(storageData) { + protected XmlElementStorageSaveSession createSaveSession(@NotNull StorageData storageData) { + return new XmlElementStorageSaveSession(storageData) { @Override protected void doSave(@Nullable Element element) { // we must set empty element instead of null as indicator - ProjectManager state is ready to save diff --git a/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/FileBasedStorage.java b/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/FileBasedStorage.java index 287ffb90841f..1b12e4db75d6 100644 --- a/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/FileBasedStorage.java +++ b/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/FileBasedStorage.java @@ -21,7 +21,6 @@ import com.intellij.notification.Notifications; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.*; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.JDOMUtil; import com.intellij.openapi.util.io.BufferExposingByteArrayOutputStream; import com.intellij.openapi.util.io.FileUtil; @@ -43,8 +42,6 @@ import java.util.Collections; import java.util.Set; public class FileBasedStorage extends XmlElementStorage { - private static final Logger LOG = Logger.getInstance(FileBasedStorage.class); - private final String myFilePath; private final File myFile; private volatile VirtualFile myCachedVirtualFile; @@ -104,11 +101,11 @@ public class FileBasedStorage extends XmlElementStorage { } @Override - protected MySaveSession createSaveSession(@NotNull StorageData storageData) { + protected XmlElementStorageSaveSession createSaveSession(@NotNull StorageData storageData) { return new FileSaveSession(storageData); } - private class FileSaveSession extends MySaveSession { + private class FileSaveSession extends XmlElementStorageSaveSession { protected FileSaveSession(@NotNull StorageData storageData) { super(storageData); } @@ -134,6 +131,10 @@ public class FileBasedStorage extends XmlElementStorage { LOG.error(e); } + if (LOG.isDebugEnabled() && myFileSpec.equals(StoragePathMacros.MODULE_FILE)) { + LOG.debug("doSave " + getFilePath()); + } + if (content == null) { StorageUtil.deleteFile(myFile, this, getVirtualFile()); myCachedVirtualFile = null; @@ -306,4 +307,9 @@ public class FileBasedStorage extends XmlElementStorage { FileUtil.writeToFile(file, out.getInternalBuffer(), 0, out.size()); return file; } + + @Override + public String toString() { + return getFilePath(); + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/XmlElementStorage.java b/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/XmlElementStorage.java index 5263a1358d7b..6267af2dc4d3 100644 --- a/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/XmlElementStorage.java +++ b/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/XmlElementStorage.java @@ -19,12 +19,10 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.components.*; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.options.CurrentUserHolder; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.JDOMUtil; -import com.intellij.openapi.util.Pair; -import com.intellij.openapi.util.WriteExternalException; +import com.intellij.openapi.util.*; import com.intellij.openapi.util.io.BufferExposingByteArrayOutputStream; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashMap; import gnu.trove.TObjectLongHashMap; import org.jdom.Document; @@ -40,7 +38,7 @@ import java.io.InputStream; import java.util.*; public abstract class XmlElementStorage implements StateStorage, Disposable { - private static final Logger LOG = Logger.getInstance(XmlElementStorage.class); + protected static final Logger LOG = Logger.getInstance(XmlElementStorage.class); private final static RoamingElementFilter DISABLED_ROAMING_ELEMENT_FILTER = new RoamingElementFilter(RoamingType.DISABLED); @@ -174,6 +172,9 @@ public abstract class XmlElementStorage implements StateStorage, Disposable { @Override @Nullable public final ExternalizationSession startExternalization() { + if (LOG.isDebugEnabled() && myFileSpec.equals(StoragePathMacros.MODULE_FILE)) { + LOG.debug("startExternalization: mySavingDisabled " + mySavingDisabled + " for " + toString()); + } return mySavingDisabled ? null : createSaveSession(getStorageData()); } @@ -181,21 +182,33 @@ public abstract class XmlElementStorage implements StateStorage, Disposable { @Override public SaveSession startSave(@NotNull ExternalizationSession externalizationSession) { if (mySavingDisabled) { + if (LOG.isDebugEnabled() && myFileSpec.equals(StoragePathMacros.MODULE_FILE)) { + LOG.debug("startSave: saving disabled for " + toString()); + } return null; } else { - MySaveSession session = (MySaveSession)externalizationSession; + XmlElementStorageSaveSession session = (XmlElementStorageSaveSession)externalizationSession; + if (LOG.isDebugEnabled() && myFileSpec.equals(StoragePathMacros.MODULE_FILE)) { + LOG.debug("startSave: session " + session.myCopiedStorageData + " for " + toString()); + } return session.myCopiedStorageData == null ? null : session; } } - protected abstract MySaveSession createSaveSession(@NotNull StorageData storageData); + protected abstract XmlElementStorageSaveSession createSaveSession(@NotNull StorageData storageData); public void disableSaving() { + if (LOG.isDebugEnabled()) { + LOG.debug("Saving disabled for " + toString()); + } mySavingDisabled = true; } public void enableSaving() { + if (LOG.isDebugEnabled()) { + LOG.debug("Saving enabled for " + toString()); + } mySavingDisabled = false; } @@ -223,23 +236,29 @@ public abstract class XmlElementStorage implements StateStorage, Disposable { StorageData oldData = myLoadedData; StorageData newData = getStorageData(true); if (oldData == null) { + if (LOG.isDebugEnabled()) { + LOG.debug("analyzeExternalChangesAndUpdateIfNeed: old data null, load new for " + toString()); + } result.addAll(newData.getComponentNames()); } else { Set changedComponentNames = oldData.getChangedComponentNames(newData, myPathMacroSubstitutor); - if (changedComponentNames != null) { + if (LOG.isDebugEnabled()) { + LOG.debug("analyzeExternalChangesAndUpdateIfNeed: changedComponentNames + " + changedComponentNames + " for " + toString()); + } + if (!ContainerUtil.isEmpty(changedComponentNames)) { result.addAll(changedComponentNames); } } } - protected abstract class MySaveSession implements SaveSession, ExternalizationSession { + protected abstract class XmlElementStorageSaveSession implements SaveSession, ExternalizationSession { private final StorageData myOriginalStorageData; private StorageData myCopiedStorageData; private final Map myNewLiveStates = new THashMap(); - public MySaveSession(@NotNull StorageData storageData) { + public XmlElementStorageSaveSession(@NotNull StorageData storageData) { myOriginalStorageData = storageData; } @@ -247,6 +266,10 @@ public abstract class XmlElementStorage implements StateStorage, Disposable { public final void setState(@NotNull Object component, @NotNull String componentName, @NotNull Object state, @Nullable Storage storageSpec) { Element element; try { + //noinspection deprecation + if (LOG.isDebugEnabled() && state instanceof JDOMExternalizable && componentName.endsWith("ApplicationInfo")) { + return; + } element = DefaultStateSerializer.serializeState(state, storageSpec); } catch (WriteExternalException e) { diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/components/impl/XmlElementStorageTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/components/impl/XmlElementStorageTest.java index 1f2c31c6a207..bf2eaefa2340 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/components/impl/XmlElementStorageTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/components/impl/XmlElementStorageTest.java @@ -97,8 +97,8 @@ public class XmlElementStorageTest extends LightPlatformLangTestCase { } @Override - protected MySaveSession createSaveSession(@NotNull StorageData storageData) { - return new MySaveSession(storageData) { + protected XmlElementStorageSaveSession createSaveSession(@NotNull StorageData storageData) { + return new XmlElementStorageSaveSession(storageData) { @Override protected void doSave(@Nullable Element element) { mySavedElement = element == null ? null : element.clone();