From 9faf91f55d887f97066562e3a07b42d4e30ff58e Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 27 Oct 2020 17:49:02 +0900 Subject: [PATCH] Fix Parcelize settings serialization (KT-42958) --- idea/resources/META-INF/parcelize.xml | 4 +++ .../parcelize/parcelize-ide/build.gradle.kts | 1 + .../parcelize/ide/ParcelizeAvailability.kt | 2 +- .../ide/ParcelizeProjectResolverExtension.kt | 25 ++++++++++++++----- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/idea/resources/META-INF/parcelize.xml b/idea/resources/META-INF/parcelize.xml index 9e47ccce9c9..17927db032c 100644 --- a/idea/resources/META-INF/parcelize.xml +++ b/idea/resources/META-INF/parcelize.xml @@ -10,6 +10,10 @@ + + + + diff --git a/plugins/parcelize/parcelize-ide/build.gradle.kts b/plugins/parcelize/parcelize-ide/build.gradle.kts index eab842eaefe..7db699163ff 100644 --- a/plugins/parcelize/parcelize-ide/build.gradle.kts +++ b/plugins/parcelize/parcelize-ide/build.gradle.kts @@ -12,6 +12,7 @@ dependencies { compile(project(":compiler:frontend.java")) compile(project(":compiler:light-classes")) compile(project(":idea")) + compile(project(":idea:idea-gradle")) compile(project(":plugins:parcelize:parcelize-compiler")) compile(project(":plugins:parcelize:parcelize-runtime")) diff --git a/plugins/parcelize/parcelize-ide/src/org/jetbrains/kotlin/parcelize/ide/ParcelizeAvailability.kt b/plugins/parcelize/parcelize-ide/src/org/jetbrains/kotlin/parcelize/ide/ParcelizeAvailability.kt index aeada03a410..6cba9bbdd1e 100644 --- a/plugins/parcelize/parcelize-ide/src/org/jetbrains/kotlin/parcelize/ide/ParcelizeAvailability.kt +++ b/plugins/parcelize/parcelize-ide/src/org/jetbrains/kotlin/parcelize/ide/ParcelizeAvailability.kt @@ -32,6 +32,6 @@ object ParcelizeAvailability { val path = ExternalSystemApiUtil.getExternalProjectPath(module) ?: return false val externalProjectInfo = ExternalSystemUtil.getExternalProjectInfo(module.project, GradleConstants.SYSTEM_ID, path) ?: return false val moduleData = GradleProjectResolverUtil.findModule(externalProjectInfo.externalProjectStructure, path) ?: return false - return moduleData.getCopyableUserData(ParcelizeProjectResolverExtension.KEY)?.isEnabled ?: false + return ExternalSystemApiUtil.find(moduleData, ParcelizeIdeModel.KEY)?.data?.isEnabled ?: false } } \ No newline at end of file diff --git a/plugins/parcelize/parcelize-ide/src/org/jetbrains/kotlin/parcelize/ide/ParcelizeProjectResolverExtension.kt b/plugins/parcelize/parcelize-ide/src/org/jetbrains/kotlin/parcelize/ide/ParcelizeProjectResolverExtension.kt index 9a7f0aaa272..fe2ce61898e 100644 --- a/plugins/parcelize/parcelize-ide/src/org/jetbrains/kotlin/parcelize/ide/ParcelizeProjectResolverExtension.kt +++ b/plugins/parcelize/parcelize-ide/src/org/jetbrains/kotlin/parcelize/ide/ParcelizeProjectResolverExtension.kt @@ -6,17 +6,30 @@ package org.jetbrains.kotlin.parcelize.ide import com.intellij.openapi.externalSystem.model.DataNode +import com.intellij.openapi.externalSystem.model.Key +import com.intellij.openapi.externalSystem.model.ProjectKeys +import com.intellij.openapi.externalSystem.model.project.AbstractExternalEntityData import com.intellij.openapi.externalSystem.model.project.ModuleData -import com.intellij.openapi.util.Key +import com.intellij.openapi.externalSystem.service.project.manage.AbstractProjectDataService +import com.intellij.serialization.PropertyMapping import org.gradle.tooling.model.idea.IdeaModule import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension +import org.jetbrains.plugins.gradle.util.GradleConstants + +class ParcelizeIdeModel @PropertyMapping("isEnabled") constructor( + val isEnabled: Boolean +) : AbstractExternalEntityData(GradleConstants.SYSTEM_ID) { + companion object { + val KEY = Key.create(ParcelizeIdeModel::class.java, ProjectKeys.CONTENT_ROOT.processingWeight + 1) + } +} + +class ParcelizeIdeModelDataService : AbstractProjectDataService() { + override fun getTargetDataKey() = ParcelizeIdeModel.KEY +} @Suppress("unused") class ParcelizeProjectResolverExtension : AbstractProjectResolverExtension() { - companion object { - val KEY = Key("ParcelizeModel") - } - override fun getExtraProjectModelClasses() = setOf(ParcelizeGradleModel::class.java) override fun getToolingExtensionsClasses() = setOf(ParcelizeModelBuilderService::class.java, Unit::class.java) @@ -24,7 +37,7 @@ class ParcelizeProjectResolverExtension : AbstractProjectResolverExtension() { val parcelizeModel = resolverCtx.getExtraProject(gradleModule, ParcelizeGradleModel::class.java) if (parcelizeModel != null && parcelizeModel.isEnabled) { - ideModule.putCopyableUserData(KEY, ParcelizeGradleModelImpl(isEnabled = parcelizeModel.isEnabled)) + ideModule.createChild(ParcelizeIdeModel.KEY, ParcelizeIdeModel(isEnabled = parcelizeModel.isEnabled)) } super.populateModuleExtraModels(gradleModule, ideModule)