diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/Freezable.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/Freezable.kt index 885d8be5d04..9d085335364 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/Freezable.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/Freezable.kt @@ -16,11 +16,12 @@ package org.jetbrains.kotlin.cli.common.arguments +import java.io.Serializable import kotlin.properties.ReadWriteProperty import kotlin.reflect.KProperty abstract class Freezable { - protected open inner class FreezableVar(private var value: T) : ReadWriteProperty { + protected open inner class FreezableVar(private var value: T) : ReadWriteProperty, Serializable { override fun getValue(thisRef: Any, property: KProperty<*>) = value override fun setValue(thisRef: Any, property: KProperty<*>, value: T) { diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt index 35b51c04e84..d772cb73f90 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt @@ -20,8 +20,8 @@ import org.gradle.tooling.model.idea.IdeaModule import org.jetbrains.kotlin.gradle.KotlinMPPGradleModel import org.jetbrains.kotlin.gradle.KotlinMPPGradleModelBuilder 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.kotlinAndroidSourceSets import org.jetbrains.kotlin.idea.configuration.kotlinSourceSet import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension @@ -81,12 +81,13 @@ class KotlinAndroidMPPGradleProjectResolver : AbstractProjectResolverExtension() val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) ?: return - mainModuleData.kotlinAndroidSourceSets = mppModel + val androidSourceSets = mppModel .targets .asSequence() .flatMap { it.compilations.asSequence() } .filter { it.platform == KotlinPlatform.ANDROID } .map { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) } .toList() + mainModuleData.createChild(KotlinAndroidSourceSetData.KEY, KotlinAndroidSourceSetData(androidSourceSets)) } } \ No newline at end of file diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt.173 b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt.173 index bcc9c02566b..6e7889de743 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt.173 +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt.173 @@ -20,8 +20,8 @@ import org.gradle.tooling.model.idea.IdeaModule import org.jetbrains.kotlin.gradle.KotlinMPPGradleModel import org.jetbrains.kotlin.gradle.KotlinMPPGradleModelBuilder 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.kotlinAndroidSourceSets import org.jetbrains.kotlin.idea.configuration.kotlinSourceSet import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension @@ -81,12 +81,13 @@ class KotlinAndroidMPPGradleProjectResolver : AbstractProjectResolverExtension() val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) ?: return - mainModuleData.kotlinAndroidSourceSets = mppModel + val androidSourceSets = mppModel .targets .asSequence() .flatMap { it.compilations.asSequence() } .filter { it.platform == KotlinPlatform.ANDROID } .map { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) } .toList() + mainModuleData.createChild(KotlinAndroidSourceSetData.KEY, KotlinAndroidSourceSetData(androidSourceSets)) } } \ No newline at end of file diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt.as31 b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt.as31 index 35b51c04e84..d772cb73f90 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt.as31 +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt.as31 @@ -20,8 +20,8 @@ import org.gradle.tooling.model.idea.IdeaModule import org.jetbrains.kotlin.gradle.KotlinMPPGradleModel import org.jetbrains.kotlin.gradle.KotlinMPPGradleModelBuilder 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.kotlinAndroidSourceSets import org.jetbrains.kotlin.idea.configuration.kotlinSourceSet import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension @@ -81,12 +81,13 @@ class KotlinAndroidMPPGradleProjectResolver : AbstractProjectResolverExtension() val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) ?: return - mainModuleData.kotlinAndroidSourceSets = mppModel + val androidSourceSets = mppModel .targets .asSequence() .flatMap { it.compilations.asSequence() } .filter { it.platform == KotlinPlatform.ANDROID } .map { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) } .toList() + mainModuleData.createChild(KotlinAndroidSourceSetData.KEY, KotlinAndroidSourceSetData(androidSourceSets)) } } \ No newline at end of file diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPDataNodes.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPDataNodes.kt index 5b0839e32d2..b26e5389f6c 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPDataNodes.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPDataNodes.kt @@ -7,8 +7,10 @@ package org.jetbrains.kotlin.idea.configuration import com.intellij.openapi.externalSystem.model.DataNode 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.ModuleData +import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil import com.intellij.openapi.util.Key import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments 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.plugins.gradle.util.GradleConstants import java.io.File +import java.io.Serializable import com.intellij.openapi.externalSystem.model.Key as ExternalKey var DataNode.kotlinSourceSet: KotlinSourceSetInfo? @@ -24,10 +27,10 @@ var DataNode.kotlinSourceSet: KotlinSourceSetInfo? var DataNode.kotlinTargetDataNode: DataNode? by CopyableDataNodeUserDataProperty(Key.create("KOTLIN_TARGET_DATA_NODE")) -var DataNode.kotlinAndroidSourceSets: List? - by CopyableDataNodeUserDataProperty(Key.create("ANDROID_COMPILATIONS")) +val DataNode.kotlinAndroidSourceSets: List? + 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 gradleModuleId: String = "" var platform: KotlinPlatform = KotlinPlatform.COMMON @@ -38,6 +41,14 @@ class KotlinSourceSetInfo(val kotlinModule: KotlinModule) { var sourceSetIdsByName: MutableMap = LinkedHashMap() } +class KotlinAndroidSourceSetData( + val sourceSetInfos: List +) : 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) { var moduleIds: Set = emptySet() var archiveFile: File? = null