MPP: Configure Kotlin facets for Android modules
#KT-26770 Fixed
This commit is contained in:
+2
@@ -23,6 +23,7 @@ import org.jetbrains.jps.model.java.JavaSourceRootType
|
|||||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
||||||
import org.jetbrains.kotlin.gradle.KotlinCompilation
|
import org.jetbrains.kotlin.gradle.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
||||||
|
import org.jetbrains.kotlin.idea.configuration.KotlinSourceSetDataService
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
||||||
@@ -58,6 +59,7 @@ class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<Modul
|
|||||||
rootModel.addModuleOrderEntry(sourceSetModule)
|
rootModel.addModuleOrderEntry(sourceSetModule)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
KotlinSourceSetDataService.configureFacet(moduleData, sourceSetInfo, nodeToImport, module, modelsProvider)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
@@ -21,6 +21,7 @@ import org.jetbrains.jps.model.java.JavaSourceRootType
|
|||||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
||||||
import org.jetbrains.kotlin.gradle.KotlinCompilation
|
import org.jetbrains.kotlin.gradle.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
||||||
|
import org.jetbrains.kotlin.idea.configuration.KotlinSourceSetDataService
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
||||||
@@ -56,6 +57,7 @@ class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<Modul
|
|||||||
rootModel.addModuleOrderEntry(sourceSetModule)
|
rootModel.addModuleOrderEntry(sourceSetModule)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
KotlinSourceSetDataService.configureFacet(moduleData, sourceSetInfo, nodeToImport, module, modelsProvider)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
@@ -23,6 +23,7 @@ import org.jetbrains.jps.model.java.JavaSourceRootType
|
|||||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
||||||
import org.jetbrains.kotlin.gradle.KotlinCompilation
|
import org.jetbrains.kotlin.gradle.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
||||||
|
import org.jetbrains.kotlin.idea.configuration.KotlinSourceSetDataService
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
||||||
@@ -58,6 +59,7 @@ class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<Modul
|
|||||||
rootModel.addModuleOrderEntry(sourceSetModule)
|
rootModel.addModuleOrderEntry(sourceSetModule)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
KotlinSourceSetDataService.configureFacet(moduleData, sourceSetInfo, nodeToImport, module, modelsProvider)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
@@ -26,6 +26,7 @@ import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
|||||||
import org.jetbrains.kotlin.gradle.KotlinCompilation
|
import org.jetbrains.kotlin.gradle.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
||||||
import org.jetbrains.kotlin.idea.configuration.kotlinSourceSet
|
import org.jetbrains.kotlin.idea.configuration.kotlinSourceSet
|
||||||
|
import org.jetbrains.kotlin.idea.configuration.KotlinSourceSetDataService
|
||||||
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
|
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@@ -71,6 +72,7 @@ class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<Modul
|
|||||||
rootModel.addModuleOrderEntry(sourceSetModule)
|
rootModel.addModuleOrderEntry(sourceSetModule)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
KotlinSourceSetDataService.configureFacet(moduleData, sourceSetInfo, nodeToImport, module, modelsProvider)
|
||||||
}
|
}
|
||||||
|
|
||||||
ContentRootDataService().importData(contentRootsToImport, projectData, project, modelsProvider)
|
ContentRootDataService().importData(contentRootsToImport, projectData, project, modelsProvider)
|
||||||
|
|||||||
+2
@@ -23,6 +23,7 @@ import org.jetbrains.jps.model.java.JavaSourceRootType
|
|||||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
||||||
import org.jetbrains.kotlin.gradle.KotlinCompilation
|
import org.jetbrains.kotlin.gradle.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
||||||
|
import org.jetbrains.kotlin.idea.configuration.KotlinSourceSetDataService
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
||||||
@@ -58,6 +59,7 @@ class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<Modul
|
|||||||
rootModel.addModuleOrderEntry(sourceSetModule)
|
rootModel.addModuleOrderEntry(sourceSetModule)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
KotlinSourceSetDataService.configureFacet(moduleData, sourceSetInfo, nodeToImport, module, modelsProvider)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+61
-59
@@ -62,74 +62,76 @@ class KotlinSourceSetDataService : AbstractProjectDataService<GradleSourceSetDat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val KotlinModule.kind
|
companion object {
|
||||||
get() = when (this) {
|
private val KotlinModule.kind
|
||||||
is KotlinCompilation -> KotlinModuleKind.COMPILATION_AND_SOURCE_SET_HOLDER
|
get() = when (this) {
|
||||||
is KotlinSourceSet -> KotlinModuleKind.SOURCE_SET_HOLDER
|
is KotlinCompilation -> KotlinModuleKind.COMPILATION_AND_SOURCE_SET_HOLDER
|
||||||
else -> KotlinModuleKind.DEFAULT
|
is KotlinSourceSet -> KotlinModuleKind.SOURCE_SET_HOLDER
|
||||||
}
|
else -> KotlinModuleKind.DEFAULT
|
||||||
|
|
||||||
private fun configureFacet(
|
|
||||||
sourceSetData: GradleSourceSetData,
|
|
||||||
kotlinSourceSet: KotlinSourceSetInfo,
|
|
||||||
mainModuleNode: DataNode<ModuleData>,
|
|
||||||
ideModule: Module,
|
|
||||||
modelsProvider: IdeModifiableModelsProvider
|
|
||||||
) {
|
|
||||||
val compilerVersion = mainModuleNode
|
|
||||||
.findAll(BuildScriptClasspathData.KEY)
|
|
||||||
.firstOrNull()
|
|
||||||
?.data
|
|
||||||
?.let { findKotlinPluginVersion(it) } ?: return
|
|
||||||
|
|
||||||
val platformKind = IdePlatformKindTooling.getTooling(kotlinSourceSet.platform).kind
|
|
||||||
val platform = when (platformKind) {
|
|
||||||
is JvmIdePlatformKind -> {
|
|
||||||
val target = JvmTarget.fromString(sourceSetData.targetCompatibility ?: "") ?: JvmTarget.DEFAULT
|
|
||||||
JvmIdePlatformKind.Platform(target)
|
|
||||||
}
|
}
|
||||||
else -> platformKind.defaultPlatform
|
|
||||||
}
|
|
||||||
|
|
||||||
val coroutinesProperty = CoroutineSupport.byCompilerArgument(
|
fun configureFacet(
|
||||||
mainModuleNode.coroutines ?: findKotlinCoroutinesProperty(ideModule.project)
|
moduleData: ModuleData,
|
||||||
)
|
kotlinSourceSet: KotlinSourceSetInfo,
|
||||||
|
mainModuleNode: DataNode<ModuleData>,
|
||||||
|
ideModule: Module,
|
||||||
|
modelsProvider: IdeModifiableModelsProvider
|
||||||
|
) {
|
||||||
|
val compilerVersion = mainModuleNode
|
||||||
|
.findAll(BuildScriptClasspathData.KEY)
|
||||||
|
.firstOrNull()
|
||||||
|
?.data
|
||||||
|
?.let { findKotlinPluginVersion(it) } ?: return
|
||||||
|
|
||||||
val kotlinFacet = ideModule.getOrCreateFacet(modelsProvider, false)
|
val platformKind = IdePlatformKindTooling.getTooling(kotlinSourceSet.platform).kind
|
||||||
kotlinFacet.configureFacet(compilerVersion, coroutinesProperty, platform, modelsProvider)
|
val platform = when (platformKind) {
|
||||||
|
is JvmIdePlatformKind -> {
|
||||||
|
val target = JvmTarget.fromString(moduleData.targetCompatibility ?: "") ?: JvmTarget.DEFAULT
|
||||||
|
JvmIdePlatformKind.Platform(target)
|
||||||
|
}
|
||||||
|
else -> platformKind.defaultPlatform
|
||||||
|
}
|
||||||
|
|
||||||
val compilerArguments = kotlinSourceSet.compilerArguments
|
val coroutinesProperty = CoroutineSupport.byCompilerArgument(
|
||||||
val defaultCompilerArguments = kotlinSourceSet.defaultCompilerArguments
|
mainModuleNode.coroutines ?: findKotlinCoroutinesProperty(ideModule.project)
|
||||||
if (compilerArguments != null) {
|
|
||||||
applyCompilerArgumentsToFacet(
|
|
||||||
compilerArguments,
|
|
||||||
defaultCompilerArguments,
|
|
||||||
kotlinFacet,
|
|
||||||
modelsProvider
|
|
||||||
)
|
)
|
||||||
}
|
|
||||||
|
|
||||||
adjustClasspath(kotlinFacet, kotlinSourceSet.dependencyClasspath)
|
val kotlinFacet = ideModule.getOrCreateFacet(modelsProvider, false)
|
||||||
|
kotlinFacet.configureFacet(compilerVersion, coroutinesProperty, platform, modelsProvider)
|
||||||
|
|
||||||
kotlinFacet.noVersionAutoAdvance()
|
val compilerArguments = kotlinSourceSet.compilerArguments
|
||||||
|
val defaultCompilerArguments = kotlinSourceSet.defaultCompilerArguments
|
||||||
with(kotlinFacet.configuration.settings) {
|
if (compilerArguments != null) {
|
||||||
kind = kotlinSourceSet.kotlinModule.kind
|
applyCompilerArgumentsToFacet(
|
||||||
|
compilerArguments,
|
||||||
isTestModule = kotlinSourceSet.isTestModule
|
defaultCompilerArguments,
|
||||||
|
kotlinFacet,
|
||||||
sourceSetNames = kotlinSourceSet.sourceSetIdsByName.values.mapNotNull { sourceSetId ->
|
modelsProvider
|
||||||
val node = mainModuleNode.findChildModuleById(sourceSetId) ?: return@mapNotNull null
|
)
|
||||||
val data = node.data as? ModuleData ?: return@mapNotNull null
|
|
||||||
modelsProvider.findIdeModule(data)?.name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kotlinSourceSet.isTestModule) {
|
adjustClasspath(kotlinFacet, kotlinSourceSet.dependencyClasspath)
|
||||||
testOutputPath = (kotlinSourceSet.compilerArguments as? K2JSCompilerArguments)?.outputFile
|
|
||||||
productionOutputPath = null
|
kotlinFacet.noVersionAutoAdvance()
|
||||||
} else {
|
|
||||||
productionOutputPath = (kotlinSourceSet.compilerArguments as? K2JSCompilerArguments)?.outputFile
|
with(kotlinFacet.configuration.settings) {
|
||||||
testOutputPath = null
|
kind = kotlinSourceSet.kotlinModule.kind
|
||||||
|
|
||||||
|
isTestModule = kotlinSourceSet.isTestModule
|
||||||
|
|
||||||
|
sourceSetNames = kotlinSourceSet.sourceSetIdsByName.values.mapNotNull { sourceSetId ->
|
||||||
|
val node = mainModuleNode.findChildModuleById(sourceSetId) ?: return@mapNotNull null
|
||||||
|
val data = node.data as? ModuleData ?: return@mapNotNull null
|
||||||
|
modelsProvider.findIdeModule(data)?.name
|
||||||
|
}
|
||||||
|
|
||||||
|
if (kotlinSourceSet.isTestModule) {
|
||||||
|
testOutputPath = (kotlinSourceSet.compilerArguments as? K2JSCompilerArguments)?.outputFile
|
||||||
|
productionOutputPath = null
|
||||||
|
} else {
|
||||||
|
productionOutputPath = (kotlinSourceSet.compilerArguments as? K2JSCompilerArguments)?.outputFile
|
||||||
|
testOutputPath = null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user