From dd3f8fc6a9e8e33b46f6290b38829f0e28ffd4cd Mon Sep 17 00:00:00 2001 From: Alex Plate Date: Wed, 26 May 2021 17:24:34 +0300 Subject: [PATCH] [Workspace Model] Correctly serialize and deserialize arrays with classes from plugins GitOrigin-RevId: d6658f355e40a8e2a7948c4e05b13f21c4dabe52 --- .../workspaceModel/ide/impl/WorkspaceModelCacheImpl.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/workspaceModel/ide/impl/WorkspaceModelCacheImpl.kt b/platform/platform-impl/src/com/intellij/workspaceModel/ide/impl/WorkspaceModelCacheImpl.kt index a752d8a6d1b6..90fa7aeda2f9 100644 --- a/platform/platform-impl/src/com/intellij/workspaceModel/ide/impl/WorkspaceModelCacheImpl.kt +++ b/platform/platform-impl/src/com/intellij/workspaceModel/ide/impl/WorkspaceModelCacheImpl.kt @@ -166,7 +166,13 @@ class WorkspaceModelCacheImpl(private val project: Project, parentDisposable: Di } object PluginAwareEntityTypesResolver : EntityTypesResolver { - override fun getPluginId(clazz: Class<*>): String? = PluginManager.getInstance().getPluginOrPlatformByClassName(clazz.name)?.idString + override fun getPluginId(clazz: Class<*>): String? { + val className = clazz.name + if (className.startsWith("[")) { + return PluginManager.getInstance().getPluginOrPlatformByClassName(clazz.componentType.name)?.idString + } + return PluginManager.getInstance().getPluginOrPlatformByClassName(className)?.idString + } override fun resolveClass(name: String, pluginId: String?): Class<*> { val id = pluginId?.let { PluginId.getId(it) } @@ -178,7 +184,7 @@ class WorkspaceModelCacheImpl(private val project: Project, parentDisposable: Di plugin.pluginClassLoader ?: ApplicationManager::class.java.classLoader } - if (name.startsWith("[")) return Class.forName(name) + if (name.startsWith("[")) return Class.forName(name, true, classloader) return classloader.loadClass(name) } }