diff --git a/platform/object-serializer/src/xml/xmlSerializer.kt b/platform/object-serializer/src/xml/xmlSerializer.kt index c256a5330fc9..dadf499162cc 100644 --- a/platform/object-serializer/src/xml/xmlSerializer.kt +++ b/platform/object-serializer/src/xml/xmlSerializer.kt @@ -97,6 +97,10 @@ internal class JdomSerializerImpl : JdomSerializer { } } + override fun clearSerializationCaches() { + clearBindingCache() + } + override fun deserializeInto(obj: Any, element: Element) { try { (serializer.getRootBinding(obj.javaClass) as BeanBinding).deserializeInto(obj, element) diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt b/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt index 66b8b09005f1..f8e86517a64d 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt @@ -1,6 +1,7 @@ // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.ide.plugins +import com.intellij.configurationStore.jdomSerializer import com.intellij.ide.ui.UIThemeProvider import com.intellij.notification.NotificationDisplayType import com.intellij.notification.NotificationGroup @@ -22,6 +23,7 @@ import com.intellij.util.MemoryDumpHelper import com.intellij.util.ReflectionUtil import com.intellij.util.SystemProperties import com.intellij.util.messages.Topic +import com.intellij.util.xmlb.BeanBinding import java.text.SimpleDateFormat import java.util.* @@ -153,6 +155,9 @@ object DynamicPlugins { } } + jdomSerializer.clearSerializationCaches() + BeanBinding.clearSerializationCaches() + val classLoaderUnloaded = loadedPluginDescriptor.unloadClassLoader() if (!classLoaderUnloaded && Registry.`is`("ide.plugins.snapshot.on.unload.fail") && MemoryDumpHelper.memoryDumpAvailable()) { val snapshotFolder = System.getProperty("snapshots.path", SystemProperties.getUserHome()) diff --git a/platform/projectModel-api/src/com/intellij/configurationStore/xmlSerializer.kt b/platform/projectModel-api/src/com/intellij/configurationStore/xmlSerializer.kt index 00f12e69e2b3..d18dfd86374c 100644 --- a/platform/projectModel-api/src/com/intellij/configurationStore/xmlSerializer.kt +++ b/platform/projectModel-api/src/com/intellij/configurationStore/xmlSerializer.kt @@ -56,4 +56,6 @@ interface JdomSerializer { @ApiStatus.Internal fun getDefaultSerializationFilter(): SkipDefaultsSerializationFilter + + fun clearSerializationCaches() } \ No newline at end of file diff --git a/platform/util/src/com/intellij/serialization/PropertyCollector.java b/platform/util/src/com/intellij/serialization/PropertyCollector.java index 30a720edf53e..0210afb282fc 100644 --- a/platform/util/src/com/intellij/serialization/PropertyCollector.java +++ b/platform/util/src/com/intellij/serialization/PropertyCollector.java @@ -169,6 +169,10 @@ public class PropertyCollector { return candidates; } + protected void clearSerializationCaches() { + classToOwnFields.clear(); + } + @Nullable private static NameAndIsSetter getPropertyData(@NotNull String methodName) { String part = ""; diff --git a/platform/util/src/com/intellij/util/xmlb/BeanBinding.java b/platform/util/src/com/intellij/util/xmlb/BeanBinding.java index c08efd48cfa4..92f48cde5527 100644 --- a/platform/util/src/com/intellij/util/xmlb/BeanBinding.java +++ b/platform/util/src/com/intellij/util/xmlb/BeanBinding.java @@ -23,7 +23,7 @@ import java.lang.reflect.Type; import java.util.*; public class BeanBinding extends NotNullDeserializeBinding { - private static final PropertyCollector PROPERTY_COLLECTOR = new XmlSerializerPropertyCollector(); + private static final XmlSerializerPropertyCollector PROPERTY_COLLECTOR = new XmlSerializerPropertyCollector(); private final String myTagName; @SuppressWarnings("FieldAccessedSynchronizedAndUnsynchronized") @@ -331,6 +331,12 @@ public class BeanBinding extends NotNullDeserializeBinding { element.isAnnotationPresent(XCollection.class) || element.isAnnotationPresent(AbstractCollection.class); } + + @Override + public void clearSerializationCaches() { + super.clearSerializationCaches(); + accessorCache.clear(); + } } public String toString() { @@ -403,4 +409,8 @@ public class BeanBinding extends NotNullDeserializeBinding { } return new OptionTagBinding(accessor, optionTag); } + + public static void clearSerializationCaches() { + PROPERTY_COLLECTOR.clearSerializationCaches(); + } }