Fix Parcelize settings serialization (KT-42958)

This commit is contained in:
Yan Zhulanow
2020-10-27 17:49:02 +09:00
parent 3386b93009
commit 9faf91f55d
4 changed files with 25 additions and 7 deletions
+4
View File
@@ -10,6 +10,10 @@
<quickFixContributor implementation="org.jetbrains.kotlin.parcelize.ide.quickfixes.ParcelizeQuickFixContributor"/>
</extensions>
<extensions defaultExtensionNs="com.intellij">
<externalProjectDataService implementation="org.jetbrains.kotlin.parcelize.ide.ParcelizeIdeModelDataService"/>
</extensions>
<extensions defaultExtensionNs="org.jetbrains.plugins.gradle">
<projectResolve implementation="org.jetbrains.kotlin.parcelize.ide.ParcelizeProjectResolverExtension" order="last"/>
</extensions>
@@ -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"))
@@ -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
}
}
@@ -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<ParcelizeIdeModel, Void>() {
override fun getTargetDataKey() = ParcelizeIdeModel.KEY
}
@Suppress("unused")
class ParcelizeProjectResolverExtension : AbstractProjectResolverExtension() {
companion object {
val KEY = Key<ParcelizeGradleModel>("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)