From 0a85c2709aa6148b0e39bef65b2baf2a69513cda Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Wed, 1 Apr 2015 14:42:39 +0200 Subject: [PATCH] state will be null if file deleted we must create empty (initial) state to reinit component --- .../components/impl/stores/ComponentStoreImpl.java | 10 ++++++++-- .../components/impl/stores/FileBasedStorage.java | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/ComponentStoreImpl.java b/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/ComponentStoreImpl.java index d8c2820093dc..8b143e67369f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/ComponentStoreImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/ComponentStoreImpl.java @@ -298,7 +298,7 @@ public abstract class ComponentStoreImpl implements IComponentStore.Reloadable { } Class stateClass = ComponentSerializationUtil.getStateClass(component.getClass()); - if (LOG.isDebugEnabled()) { + if (LOG.isDebugEnabled() && getDefaultState(component, name, stateClass) != null) { LOG.error(name + " has default state, but not marked to load it"); } @@ -312,9 +312,15 @@ public abstract class ComponentStoreImpl implements IComponentStore.Reloadable { } StateStorage stateStorage = getStateStorageManager().getStateStorage(storageSpec); + boolean forcedState = false; if (stateStorage != null && (stateStorage.hasState(component, name, stateClass, reloadData) || - (changedStorages != null && changedStorages.contains(stateStorage)))) { + (forcedState = changedStorages != null && changedStorages.contains(stateStorage)))) { state = stateStorage.getState(component, name, stateClass, state); + if (state == null && forcedState) { + // state will be null if file deleted + // we must create empty (initial) state to reinit component + state = DefaultStateSerializer.deserializeState(new Element("state"), stateClass, null); + } break; } } 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 4f637a56e776..8b7d7ef718b4 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 @@ -70,11 +70,13 @@ public class FileBasedStorage extends XmlElementStorage { @Override public void fileDeleted(@NotNull VirtualFileEvent event) { myCachedVirtualFile = null; + listener.storageFileChanged(event, FileBasedStorage.this); } @Override public void fileCreated(@NotNull VirtualFileEvent event) { myCachedVirtualFile = event.getFile(); + listener.storageFileChanged(event, FileBasedStorage.this); } @Override