MPP: Retain KotlinSourceSetInfo for Android in data nodes
User data is not serialized which leads to broken import on reopening #KT-27213 Fixed
This commit is contained in:
@@ -16,11 +16,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.cli.common.arguments
|
package org.jetbrains.kotlin.cli.common.arguments
|
||||||
|
|
||||||
|
import java.io.Serializable
|
||||||
import kotlin.properties.ReadWriteProperty
|
import kotlin.properties.ReadWriteProperty
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
abstract class Freezable {
|
abstract class Freezable {
|
||||||
protected open inner class FreezableVar<T>(private var value: T) : ReadWriteProperty<Any, T> {
|
protected open inner class FreezableVar<T>(private var value: T) : ReadWriteProperty<Any, T>, Serializable {
|
||||||
override fun getValue(thisRef: Any, property: KProperty<*>) = value
|
override fun getValue(thisRef: Any, property: KProperty<*>) = value
|
||||||
|
|
||||||
override fun setValue(thisRef: Any, property: KProperty<*>, value: T) {
|
override fun setValue(thisRef: Any, property: KProperty<*>, value: T) {
|
||||||
|
|||||||
+3
-2
@@ -20,8 +20,8 @@ import org.gradle.tooling.model.idea.IdeaModule
|
|||||||
import org.jetbrains.kotlin.gradle.KotlinMPPGradleModel
|
import org.jetbrains.kotlin.gradle.KotlinMPPGradleModel
|
||||||
import org.jetbrains.kotlin.gradle.KotlinMPPGradleModelBuilder
|
import org.jetbrains.kotlin.gradle.KotlinMPPGradleModelBuilder
|
||||||
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
||||||
|
import org.jetbrains.kotlin.idea.configuration.KotlinAndroidSourceSetData
|
||||||
import org.jetbrains.kotlin.idea.configuration.KotlinMPPGradleProjectResolver
|
import org.jetbrains.kotlin.idea.configuration.KotlinMPPGradleProjectResolver
|
||||||
import org.jetbrains.kotlin.idea.configuration.kotlinAndroidSourceSets
|
|
||||||
import org.jetbrains.kotlin.idea.configuration.kotlinSourceSet
|
import org.jetbrains.kotlin.idea.configuration.kotlinSourceSet
|
||||||
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
|
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
|
||||||
import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension
|
import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension
|
||||||
@@ -81,12 +81,13 @@ class KotlinAndroidMPPGradleProjectResolver : AbstractProjectResolverExtension()
|
|||||||
|
|
||||||
val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) ?: return
|
val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) ?: return
|
||||||
|
|
||||||
mainModuleData.kotlinAndroidSourceSets = mppModel
|
val androidSourceSets = mppModel
|
||||||
.targets
|
.targets
|
||||||
.asSequence()
|
.asSequence()
|
||||||
.flatMap { it.compilations.asSequence() }
|
.flatMap { it.compilations.asSequence() }
|
||||||
.filter { it.platform == KotlinPlatform.ANDROID }
|
.filter { it.platform == KotlinPlatform.ANDROID }
|
||||||
.map { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) }
|
.map { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) }
|
||||||
.toList()
|
.toList()
|
||||||
|
mainModuleData.createChild(KotlinAndroidSourceSetData.KEY, KotlinAndroidSourceSetData(androidSourceSets))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+3
-2
@@ -20,8 +20,8 @@ import org.gradle.tooling.model.idea.IdeaModule
|
|||||||
import org.jetbrains.kotlin.gradle.KotlinMPPGradleModel
|
import org.jetbrains.kotlin.gradle.KotlinMPPGradleModel
|
||||||
import org.jetbrains.kotlin.gradle.KotlinMPPGradleModelBuilder
|
import org.jetbrains.kotlin.gradle.KotlinMPPGradleModelBuilder
|
||||||
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
||||||
|
import org.jetbrains.kotlin.idea.configuration.KotlinAndroidSourceSetData
|
||||||
import org.jetbrains.kotlin.idea.configuration.KotlinMPPGradleProjectResolver
|
import org.jetbrains.kotlin.idea.configuration.KotlinMPPGradleProjectResolver
|
||||||
import org.jetbrains.kotlin.idea.configuration.kotlinAndroidSourceSets
|
|
||||||
import org.jetbrains.kotlin.idea.configuration.kotlinSourceSet
|
import org.jetbrains.kotlin.idea.configuration.kotlinSourceSet
|
||||||
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
|
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
|
||||||
import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension
|
import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension
|
||||||
@@ -81,12 +81,13 @@ class KotlinAndroidMPPGradleProjectResolver : AbstractProjectResolverExtension()
|
|||||||
|
|
||||||
val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) ?: return
|
val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) ?: return
|
||||||
|
|
||||||
mainModuleData.kotlinAndroidSourceSets = mppModel
|
val androidSourceSets = mppModel
|
||||||
.targets
|
.targets
|
||||||
.asSequence()
|
.asSequence()
|
||||||
.flatMap { it.compilations.asSequence() }
|
.flatMap { it.compilations.asSequence() }
|
||||||
.filter { it.platform == KotlinPlatform.ANDROID }
|
.filter { it.platform == KotlinPlatform.ANDROID }
|
||||||
.map { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) }
|
.map { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) }
|
||||||
.toList()
|
.toList()
|
||||||
|
mainModuleData.createChild(KotlinAndroidSourceSetData.KEY, KotlinAndroidSourceSetData(androidSourceSets))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+3
-2
@@ -20,8 +20,8 @@ import org.gradle.tooling.model.idea.IdeaModule
|
|||||||
import org.jetbrains.kotlin.gradle.KotlinMPPGradleModel
|
import org.jetbrains.kotlin.gradle.KotlinMPPGradleModel
|
||||||
import org.jetbrains.kotlin.gradle.KotlinMPPGradleModelBuilder
|
import org.jetbrains.kotlin.gradle.KotlinMPPGradleModelBuilder
|
||||||
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
||||||
|
import org.jetbrains.kotlin.idea.configuration.KotlinAndroidSourceSetData
|
||||||
import org.jetbrains.kotlin.idea.configuration.KotlinMPPGradleProjectResolver
|
import org.jetbrains.kotlin.idea.configuration.KotlinMPPGradleProjectResolver
|
||||||
import org.jetbrains.kotlin.idea.configuration.kotlinAndroidSourceSets
|
|
||||||
import org.jetbrains.kotlin.idea.configuration.kotlinSourceSet
|
import org.jetbrains.kotlin.idea.configuration.kotlinSourceSet
|
||||||
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
|
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
|
||||||
import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension
|
import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension
|
||||||
@@ -81,12 +81,13 @@ class KotlinAndroidMPPGradleProjectResolver : AbstractProjectResolverExtension()
|
|||||||
|
|
||||||
val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) ?: return
|
val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) ?: return
|
||||||
|
|
||||||
mainModuleData.kotlinAndroidSourceSets = mppModel
|
val androidSourceSets = mppModel
|
||||||
.targets
|
.targets
|
||||||
.asSequence()
|
.asSequence()
|
||||||
.flatMap { it.compilations.asSequence() }
|
.flatMap { it.compilations.asSequence() }
|
||||||
.filter { it.platform == KotlinPlatform.ANDROID }
|
.filter { it.platform == KotlinPlatform.ANDROID }
|
||||||
.map { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) }
|
.map { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) }
|
||||||
.toList()
|
.toList()
|
||||||
|
mainModuleData.createChild(KotlinAndroidSourceSetData.KEY, KotlinAndroidSourceSetData(androidSourceSets))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7,8 +7,10 @@ package org.jetbrains.kotlin.idea.configuration
|
|||||||
|
|
||||||
import com.intellij.openapi.externalSystem.model.DataNode
|
import com.intellij.openapi.externalSystem.model.DataNode
|
||||||
import com.intellij.openapi.externalSystem.model.ProjectKeys
|
import com.intellij.openapi.externalSystem.model.ProjectKeys
|
||||||
|
import com.intellij.openapi.externalSystem.model.project.AbstractExternalEntityData
|
||||||
import com.intellij.openapi.externalSystem.model.project.AbstractNamedData
|
import com.intellij.openapi.externalSystem.model.project.AbstractNamedData
|
||||||
import com.intellij.openapi.externalSystem.model.project.ModuleData
|
import com.intellij.openapi.externalSystem.model.project.ModuleData
|
||||||
|
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
|
||||||
import com.intellij.openapi.util.Key
|
import com.intellij.openapi.util.Key
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||||
import org.jetbrains.kotlin.gradle.KotlinModule
|
import org.jetbrains.kotlin.gradle.KotlinModule
|
||||||
@@ -16,6 +18,7 @@ import org.jetbrains.kotlin.gradle.KotlinPlatform
|
|||||||
import org.jetbrains.kotlin.idea.util.CopyableDataNodeUserDataProperty
|
import org.jetbrains.kotlin.idea.util.CopyableDataNodeUserDataProperty
|
||||||
import org.jetbrains.plugins.gradle.util.GradleConstants
|
import org.jetbrains.plugins.gradle.util.GradleConstants
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.io.Serializable
|
||||||
import com.intellij.openapi.externalSystem.model.Key as ExternalKey
|
import com.intellij.openapi.externalSystem.model.Key as ExternalKey
|
||||||
|
|
||||||
var DataNode<out ModuleData>.kotlinSourceSet: KotlinSourceSetInfo?
|
var DataNode<out ModuleData>.kotlinSourceSet: KotlinSourceSetInfo?
|
||||||
@@ -24,10 +27,10 @@ var DataNode<out ModuleData>.kotlinSourceSet: KotlinSourceSetInfo?
|
|||||||
var DataNode<out ModuleData>.kotlinTargetDataNode: DataNode<KotlinTargetData>?
|
var DataNode<out ModuleData>.kotlinTargetDataNode: DataNode<KotlinTargetData>?
|
||||||
by CopyableDataNodeUserDataProperty(Key.create("KOTLIN_TARGET_DATA_NODE"))
|
by CopyableDataNodeUserDataProperty(Key.create("KOTLIN_TARGET_DATA_NODE"))
|
||||||
|
|
||||||
var DataNode<ModuleData>.kotlinAndroidSourceSets: List<KotlinSourceSetInfo>?
|
val DataNode<ModuleData>.kotlinAndroidSourceSets: List<KotlinSourceSetInfo>?
|
||||||
by CopyableDataNodeUserDataProperty(Key.create("ANDROID_COMPILATIONS"))
|
get() = ExternalSystemApiUtil.getChildren(this, KotlinAndroidSourceSetData.KEY).firstOrNull()?.data?.sourceSetInfos
|
||||||
|
|
||||||
class KotlinSourceSetInfo(val kotlinModule: KotlinModule) {
|
class KotlinSourceSetInfo(val kotlinModule: KotlinModule) : Serializable {
|
||||||
var moduleId: String? = null
|
var moduleId: String? = null
|
||||||
var gradleModuleId: String = ""
|
var gradleModuleId: String = ""
|
||||||
var platform: KotlinPlatform = KotlinPlatform.COMMON
|
var platform: KotlinPlatform = KotlinPlatform.COMMON
|
||||||
@@ -38,6 +41,14 @@ class KotlinSourceSetInfo(val kotlinModule: KotlinModule) {
|
|||||||
var sourceSetIdsByName: MutableMap<String, String> = LinkedHashMap()
|
var sourceSetIdsByName: MutableMap<String, String> = LinkedHashMap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class KotlinAndroidSourceSetData(
|
||||||
|
val sourceSetInfos: List<KotlinSourceSetInfo>
|
||||||
|
) : AbstractExternalEntityData(GradleConstants.SYSTEM_ID) {
|
||||||
|
companion object {
|
||||||
|
val KEY = ExternalKey.create(KotlinAndroidSourceSetData::class.java, KotlinTargetData.KEY.processingWeight + 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class KotlinTargetData(name: String) : AbstractNamedData(GradleConstants.SYSTEM_ID, name) {
|
class KotlinTargetData(name: String) : AbstractNamedData(GradleConstants.SYSTEM_ID, name) {
|
||||||
var moduleIds: Set<String> = emptySet()
|
var moduleIds: Set<String> = emptySet()
|
||||||
var archiveFile: File? = null
|
var archiveFile: File? = null
|
||||||
|
|||||||
Reference in New Issue
Block a user