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.kotlin.gradle.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
||||
import org.jetbrains.kotlin.idea.configuration.KotlinSourceSetDataService
|
||||
import java.io.File
|
||||
|
||||
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
||||
@@ -58,6 +59,7 @@ class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<Modul
|
||||
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.kotlin.gradle.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
||||
import org.jetbrains.kotlin.idea.configuration.KotlinSourceSetDataService
|
||||
import java.io.File
|
||||
|
||||
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
||||
@@ -56,6 +57,7 @@ class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<Modul
|
||||
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.kotlin.gradle.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
||||
import org.jetbrains.kotlin.idea.configuration.KotlinSourceSetDataService
|
||||
import java.io.File
|
||||
|
||||
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
||||
@@ -58,6 +59,7 @@ class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<Modul
|
||||
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.KotlinPlatform
|
||||
import org.jetbrains.kotlin.idea.configuration.kotlinSourceSet
|
||||
import org.jetbrains.kotlin.idea.configuration.KotlinSourceSetDataService
|
||||
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
|
||||
import java.io.File
|
||||
|
||||
@@ -71,6 +72,7 @@ class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<Modul
|
||||
rootModel.addModuleOrderEntry(sourceSetModule)
|
||||
}
|
||||
}
|
||||
KotlinSourceSetDataService.configureFacet(moduleData, sourceSetInfo, nodeToImport, module, 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.kotlin.gradle.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.KotlinPlatform
|
||||
import org.jetbrains.kotlin.idea.configuration.KotlinSourceSetDataService
|
||||
import java.io.File
|
||||
|
||||
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
||||
@@ -58,6 +59,7 @@ class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<Modul
|
||||
rootModel.addModuleOrderEntry(sourceSetModule)
|
||||
}
|
||||
}
|
||||
KotlinSourceSetDataService.configureFacet(moduleData, sourceSetInfo, nodeToImport, module, modelsProvider)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+61
-59
@@ -62,74 +62,76 @@ class KotlinSourceSetDataService : AbstractProjectDataService<GradleSourceSetDat
|
||||
}
|
||||
}
|
||||
|
||||
private val KotlinModule.kind
|
||||
get() = when (this) {
|
||||
is KotlinCompilation -> KotlinModuleKind.COMPILATION_AND_SOURCE_SET_HOLDER
|
||||
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)
|
||||
companion object {
|
||||
private val KotlinModule.kind
|
||||
get() = when (this) {
|
||||
is KotlinCompilation -> KotlinModuleKind.COMPILATION_AND_SOURCE_SET_HOLDER
|
||||
is KotlinSourceSet -> KotlinModuleKind.SOURCE_SET_HOLDER
|
||||
else -> KotlinModuleKind.DEFAULT
|
||||
}
|
||||
else -> platformKind.defaultPlatform
|
||||
}
|
||||
|
||||
val coroutinesProperty = CoroutineSupport.byCompilerArgument(
|
||||
mainModuleNode.coroutines ?: findKotlinCoroutinesProperty(ideModule.project)
|
||||
)
|
||||
fun configureFacet(
|
||||
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)
|
||||
kotlinFacet.configureFacet(compilerVersion, coroutinesProperty, platform, modelsProvider)
|
||||
val platformKind = IdePlatformKindTooling.getTooling(kotlinSourceSet.platform).kind
|
||||
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 defaultCompilerArguments = kotlinSourceSet.defaultCompilerArguments
|
||||
if (compilerArguments != null) {
|
||||
applyCompilerArgumentsToFacet(
|
||||
compilerArguments,
|
||||
defaultCompilerArguments,
|
||||
kotlinFacet,
|
||||
modelsProvider
|
||||
val coroutinesProperty = CoroutineSupport.byCompilerArgument(
|
||||
mainModuleNode.coroutines ?: findKotlinCoroutinesProperty(ideModule.project)
|
||||
)
|
||||
}
|
||||
|
||||
adjustClasspath(kotlinFacet, kotlinSourceSet.dependencyClasspath)
|
||||
val kotlinFacet = ideModule.getOrCreateFacet(modelsProvider, false)
|
||||
kotlinFacet.configureFacet(compilerVersion, coroutinesProperty, platform, modelsProvider)
|
||||
|
||||
kotlinFacet.noVersionAutoAdvance()
|
||||
|
||||
with(kotlinFacet.configuration.settings) {
|
||||
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
|
||||
val compilerArguments = kotlinSourceSet.compilerArguments
|
||||
val defaultCompilerArguments = kotlinSourceSet.defaultCompilerArguments
|
||||
if (compilerArguments != null) {
|
||||
applyCompilerArgumentsToFacet(
|
||||
compilerArguments,
|
||||
defaultCompilerArguments,
|
||||
kotlinFacet,
|
||||
modelsProvider
|
||||
)
|
||||
}
|
||||
|
||||
if (kotlinSourceSet.isTestModule) {
|
||||
testOutputPath = (kotlinSourceSet.compilerArguments as? K2JSCompilerArguments)?.outputFile
|
||||
productionOutputPath = null
|
||||
} else {
|
||||
productionOutputPath = (kotlinSourceSet.compilerArguments as? K2JSCompilerArguments)?.outputFile
|
||||
testOutputPath = null
|
||||
adjustClasspath(kotlinFacet, kotlinSourceSet.dependencyClasspath)
|
||||
|
||||
kotlinFacet.noVersionAutoAdvance()
|
||||
|
||||
with(kotlinFacet.configuration.settings) {
|
||||
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