MPP: Support Android platform in new model import
This commit is contained in:
+2
-1
@@ -22,6 +22,7 @@ import org.jetbrains.jps.model.java.JavaResourceRootType
|
||||
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 java.io.File
|
||||
|
||||
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
||||
@@ -43,7 +44,7 @@ class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<Modul
|
||||
val compilation = sourceSetInfo.kotlinModule as? KotlinCompilation ?: continue
|
||||
val rootModel = modelsProvider.getModifiableRootModel(module)
|
||||
for (sourceSet in compilation.sourceSets) {
|
||||
if (sourceSet.isAndroid) {
|
||||
if (sourceSet.platform == KotlinPlatform.ANDROID) {
|
||||
val sourceType = if (sourceSet.isTestModule) JavaSourceRootType.TEST_SOURCE else JavaSourceRootType.SOURCE
|
||||
val resourceType = if (sourceSet.isTestModule) JavaResourceRootType.TEST_RESOURCE else JavaResourceRootType.RESOURCE
|
||||
sourceSet.sourceDirs.forEach { addSourceRoot(it, sourceType, rootModel) }
|
||||
|
||||
+2
-1
@@ -20,6 +20,7 @@ import org.jetbrains.jps.model.java.JavaResourceRootType
|
||||
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 java.io.File
|
||||
|
||||
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
||||
@@ -41,7 +42,7 @@ class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<Modul
|
||||
val compilation = sourceSetInfo.kotlinModule as? KotlinCompilation ?: continue
|
||||
val rootModel = modelsProvider.getModifiableRootModel(module)
|
||||
for (sourceSet in compilation.sourceSets) {
|
||||
if (sourceSet.isAndroid) {
|
||||
if (sourceSet.platform == KotlinPlatform.ANDROID) {
|
||||
val sourceType = if (sourceSet.isTestModule) JavaSourceRootType.TEST_SOURCE else JavaSourceRootType.SOURCE
|
||||
val resourceType = if (sourceSet.isTestModule) JavaResourceRootType.TEST_RESOURCE else JavaResourceRootType.RESOURCE
|
||||
sourceSet.sourceDirs.forEach { addSourceRoot(it, sourceType, rootModel) }
|
||||
|
||||
+2
-1
@@ -22,6 +22,7 @@ import org.jetbrains.jps.model.java.JavaResourceRootType
|
||||
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 java.io.File
|
||||
|
||||
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
||||
@@ -43,7 +44,7 @@ class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<Modul
|
||||
val compilation = sourceSetInfo.kotlinModule as? KotlinCompilation ?: continue
|
||||
val rootModel = modelsProvider.getModifiableRootModel(module)
|
||||
for (sourceSet in compilation.sourceSets) {
|
||||
if (sourceSet.isAndroid) {
|
||||
if (sourceSet.platform == KotlinPlatform.ANDROID) {
|
||||
val sourceType = if (sourceSet.isTestModule) JavaSourceRootType.TEST_SOURCE else JavaSourceRootType.SOURCE
|
||||
val resourceType = if (sourceSet.isTestModule) JavaResourceRootType.TEST_RESOURCE else JavaResourceRootType.RESOURCE
|
||||
sourceSet.sourceDirs.forEach { addSourceRoot(it, sourceType, rootModel) }
|
||||
|
||||
+2
-1
@@ -22,6 +22,7 @@ import org.jetbrains.jps.model.java.JavaResourceRootType
|
||||
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 java.io.File
|
||||
|
||||
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
||||
@@ -43,7 +44,7 @@ class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<Modul
|
||||
val compilation = sourceSetInfo.kotlinModule as? KotlinCompilation ?: continue
|
||||
val rootModel = modelsProvider.getModifiableRootModel(module)
|
||||
for (sourceSet in compilation.sourceSets) {
|
||||
if (sourceSet.isAndroid) {
|
||||
if (sourceSet.platform == KotlinPlatform.ANDROID) {
|
||||
val sourceType = if (sourceSet.isTestModule) JavaSourceRootType.TEST_SOURCE else JavaSourceRootType.SOURCE
|
||||
val resourceType = if (sourceSet.isTestModule) JavaResourceRootType.TEST_RESOURCE else JavaResourceRootType.RESOURCE
|
||||
sourceSet.sourceDirs.forEach { addSourceRoot(it, sourceType, rootModel) }
|
||||
|
||||
+2
-1
@@ -22,6 +22,7 @@ import org.jetbrains.jps.model.java.JavaResourceRootType
|
||||
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 java.io.File
|
||||
|
||||
class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<ModuleData, Void>() {
|
||||
@@ -43,7 +44,7 @@ class KotlinAndroidGradleMPPModuleDataService : AbstractProjectDataService<Modul
|
||||
val compilation = sourceSetInfo.kotlinModule as? KotlinCompilation ?: continue
|
||||
val rootModel = modelsProvider.getModifiableRootModel(module)
|
||||
for (sourceSet in compilation.sourceSets) {
|
||||
if (sourceSet.isAndroid) {
|
||||
if (sourceSet.platform == KotlinPlatform.ANDROID) {
|
||||
val sourceType = if (sourceSet.isTestModule) JavaSourceRootType.TEST_SOURCE else JavaSourceRootType.SOURCE
|
||||
val resourceType = if (sourceSet.isTestModule) JavaResourceRootType.TEST_RESOURCE else JavaResourceRootType.RESOURCE
|
||||
sourceSet.sourceDirs.forEach { addSourceRoot(it, sourceType, rootModel) }
|
||||
|
||||
+2
-1
@@ -19,6 +19,7 @@ import com.intellij.openapi.util.Key
|
||||
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.KotlinMPPGradleProjectResolver
|
||||
import org.jetbrains.kotlin.idea.configuration.KotlinSourceSetInfo
|
||||
import org.jetbrains.kotlin.idea.configuration.kotlinSourceSet
|
||||
@@ -88,7 +89,7 @@ class KotlinAndroidMPPGradleProjectResolver : AbstractProjectResolverExtension()
|
||||
.targets
|
||||
.asSequence()
|
||||
.flatMap { it.compilations.asSequence() }
|
||||
.filter { it.isAndroid }
|
||||
.filter { it.platform == KotlinPlatform.ANDROID }
|
||||
.map { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) }
|
||||
.toList()
|
||||
}
|
||||
|
||||
+6
-6
@@ -166,7 +166,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
||||
|
||||
val sourceSetToCompilationData = LinkedHashMap<KotlinSourceSet, MutableSet<GradleSourceSetData>>()
|
||||
for (target in mppModel.targets) {
|
||||
if (target.isAndroid) continue
|
||||
if (target.platform == KotlinPlatform.ANDROID) continue
|
||||
val targetData = KotlinTargetData(target.name).also {
|
||||
it.archiveFile = target.jar?.archiveFile
|
||||
}
|
||||
@@ -210,7 +210,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
||||
|
||||
val kotlinSourceSet = createSourceSetInfo(compilation, gradleModule, resolverCtx)
|
||||
|
||||
if (compilation.platform == KotlinPlatform.JVM) {
|
||||
if (compilation.platform == KotlinPlatform.JVM || compilation.platform == KotlinPlatform.ANDROID) {
|
||||
compilationData.targetCompatibility = (kotlinSourceSet.compilerArguments as? K2JVMCompilerArguments)?.jvmTarget
|
||||
}
|
||||
|
||||
@@ -232,7 +232,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
||||
}
|
||||
|
||||
for (sourceSet in mppModel.sourceSets.values) {
|
||||
if (sourceSet.isAndroid) continue
|
||||
if (sourceSet.platform == KotlinPlatform.ANDROID) continue
|
||||
val moduleId = getKotlinModuleId(gradleModule, sourceSet, resolverCtx)
|
||||
val existingSourceSetDataNode = sourceSetMap[moduleId]?.first
|
||||
if (existingSourceSetDataNode?.kotlinSourceSet != null) continue
|
||||
@@ -455,7 +455,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
||||
}
|
||||
}
|
||||
for (sourceSet in mppModel.sourceSets.values) {
|
||||
if (sourceSet.isAndroid) continue
|
||||
if (sourceSet.platform == KotlinPlatform.ANDROID) continue
|
||||
val moduleId = getKotlinModuleId(gradleModule, sourceSet, resolverCtx)
|
||||
val moduleDataNode = sourceSetsMap[moduleId] ?: continue
|
||||
processor(moduleDataNode, sourceSet)
|
||||
@@ -476,7 +476,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
||||
}
|
||||
}
|
||||
for (target in mppModel.targets) {
|
||||
if (target.isAndroid) continue
|
||||
if (target.platform == KotlinPlatform.ANDROID) continue
|
||||
for (compilation in target.compilations) {
|
||||
val moduleId = getKotlinModuleId(gradleModule, compilation, resolverCtx)
|
||||
val moduleDataNode = sourceSetsMap[moduleId] ?: continue
|
||||
@@ -610,7 +610,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
||||
private fun createCompilerArguments(args: List<String>, platform: KotlinPlatform): CommonCompilerArguments {
|
||||
return when (platform) {
|
||||
KotlinPlatform.COMMON -> K2MetadataCompilerArguments()
|
||||
KotlinPlatform.JVM -> K2JVMCompilerArguments()
|
||||
KotlinPlatform.JVM, KotlinPlatform.ANDROID -> K2JVMCompilerArguments()
|
||||
KotlinPlatform.JS -> K2JSCompilerArguments()
|
||||
}.also {
|
||||
parseCommandLineArguments(args, it)
|
||||
|
||||
+2
-2
@@ -53,7 +53,7 @@ class KotlinSourceSetDataService : AbstractProjectDataService<GradleSourceSetDat
|
||||
val platform = kotlinSourceSet.platform
|
||||
val rootModel = modelsProvider.getModifiableRootModel(ideModule)
|
||||
|
||||
if (platform != KotlinPlatform.JVM) {
|
||||
if (platform != KotlinPlatform.JVM && platform != KotlinPlatform.ANDROID) {
|
||||
migrateNonJvmSourceFolders(rootModel)
|
||||
}
|
||||
|
||||
@@ -81,7 +81,7 @@ class KotlinSourceSetDataService : AbstractProjectDataService<GradleSourceSetDat
|
||||
?.data
|
||||
?.let { findKotlinPluginVersion(it) } ?: return
|
||||
val platformKind = when (kotlinSourceSet.platform) {
|
||||
KotlinPlatform.JVM -> TargetPlatformKind.Jvm[JvmTarget.fromString(
|
||||
KotlinPlatform.JVM, KotlinPlatform.ANDROID -> TargetPlatformKind.Jvm[JvmTarget.fromString(
|
||||
sourceSetData.targetCompatibility ?: ""
|
||||
) ?: JvmTarget.DEFAULT]
|
||||
KotlinPlatform.JS -> TargetPlatformKind.JavaScript
|
||||
|
||||
@@ -12,7 +12,6 @@ import java.io.Serializable
|
||||
typealias KotlinDependency = ExternalDependency
|
||||
|
||||
interface KotlinModule : Serializable {
|
||||
val isAndroid: Boolean
|
||||
val name: String
|
||||
val platform: KotlinPlatform
|
||||
val dependencies: Set<KotlinDependency>
|
||||
@@ -52,7 +51,8 @@ interface KotlinCompilation : KotlinModule {
|
||||
enum class KotlinPlatform(val id: String) {
|
||||
COMMON("common"),
|
||||
JVM("jvm"),
|
||||
JS("js");
|
||||
JS("js"),
|
||||
ANDROID("androidJvm");
|
||||
|
||||
companion object {
|
||||
fun byId(id: String) = values().firstOrNull { it.id == id }
|
||||
@@ -64,7 +64,6 @@ interface KotlinTargetJar : Serializable {
|
||||
}
|
||||
|
||||
interface KotlinTarget : Serializable {
|
||||
val isAndroid: Boolean
|
||||
val name: String
|
||||
val disambiguationClassifier: String?
|
||||
val platform: KotlinPlatform
|
||||
|
||||
@@ -144,13 +144,12 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService {
|
||||
val platformId = (getPlatformType.invoke(gradleTarget) as? Named)?.name ?: return null
|
||||
val platform = KotlinPlatform.byId(platformId) ?: return null
|
||||
val disambiguationClassifier = getDisambiguationClassifier(gradleTarget) as? String
|
||||
val isAndroid = targetClass.name == KOTLIN_ANDROID_TARGET_CLASS_NAME
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val gradleCompilations =
|
||||
(getCompilations.invoke(gradleTarget) as? NamedDomainObjectContainer<Named>)?.asMap?.values ?: emptyList<Named>()
|
||||
val compilations = gradleCompilations.mapNotNull { buildCompilation(it, sourceSetMap, dependencyResolver, isAndroid, project) }
|
||||
val compilations = gradleCompilations.mapNotNull { buildCompilation(it, sourceSetMap, dependencyResolver, project) }
|
||||
val jar = buildTargetJar(gradleTarget, project)
|
||||
val target = KotlinTargetImpl(isAndroid, gradleTarget.name, disambiguationClassifier, platform, compilations, jar)
|
||||
val target = KotlinTargetImpl(gradleTarget.name, disambiguationClassifier, platform, compilations, jar)
|
||||
compilations.forEach { it.target = target }
|
||||
return target
|
||||
}
|
||||
@@ -170,7 +169,6 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService {
|
||||
gradleCompilation: Named,
|
||||
sourceSetMap: Map<String, KotlinSourceSet>,
|
||||
dependencyResolver: DependencyResolver,
|
||||
isAndroid: Boolean,
|
||||
project: Project
|
||||
): KotlinCompilationImpl? {
|
||||
val compilationClass = gradleCompilation.javaClass
|
||||
@@ -186,7 +184,7 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService {
|
||||
val arguments = buildCompilationArguments(compileKotlinTask) ?: return null
|
||||
val dependencyClasspath = buildDependencyClasspath(compileKotlinTask)
|
||||
val dependencies = buildCompilationDependencies(gradleCompilation, dependencyResolver, project)
|
||||
return KotlinCompilationImpl(isAndroid, gradleCompilation.name, kotlinSourceSets, dependencies, output, arguments, dependencyClasspath)
|
||||
return KotlinCompilationImpl(gradleCompilation.name, kotlinSourceSets, dependencies, output, arguments, dependencyClasspath)
|
||||
}
|
||||
|
||||
private fun buildCompilationDependencies(
|
||||
@@ -280,15 +278,10 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService {
|
||||
if (compilations != null) {
|
||||
sourceSet.platform = compilations.map { it.platform }.distinct().singleOrNull() ?: KotlinPlatform.COMMON
|
||||
sourceSet.isTestModule = compilations.all { it.isTestModule }
|
||||
sourceSet.isAndroid = compilations.all { it.isAndroid }
|
||||
} else {
|
||||
// TODO: change me after design about it
|
||||
sourceSet.isTestModule = "Test" in sourceSet.name
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val KOTLIN_ANDROID_TARGET_CLASS_NAME = "org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget"
|
||||
}
|
||||
}
|
||||
@@ -144,13 +144,12 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService {
|
||||
val platformId = (getPlatformType.invoke(gradleTarget) as? Named)?.name ?: return null
|
||||
val platform = KotlinPlatform.byId(platformId) ?: return null
|
||||
val disambiguationClassifier = getDisambiguationClassifier(gradleTarget) as? String
|
||||
val isAndroid = targetClass.name == KOTLIN_ANDROID_TARGET_CLASS_NAME
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val gradleCompilations =
|
||||
(getCompilations.invoke(gradleTarget) as? NamedDomainObjectContainer<Named>)?.asMap?.values ?: emptyList<Named>()
|
||||
val compilations = gradleCompilations.mapNotNull { buildCompilation(it, sourceSetMap, dependencyResolver, isAndroid, project) }
|
||||
val compilations = gradleCompilations.mapNotNull { buildCompilation(it, sourceSetMap, dependencyResolver, project) }
|
||||
val jar = buildTargetJar(gradleTarget, project)
|
||||
val target = KotlinTargetImpl(isAndroid, gradleTarget.name, disambiguationClassifier, platform, compilations, jar)
|
||||
val target = KotlinTargetImpl(gradleTarget.name, disambiguationClassifier, platform, compilations, jar)
|
||||
compilations.forEach { it.target = target }
|
||||
return target
|
||||
}
|
||||
@@ -170,7 +169,6 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService {
|
||||
gradleCompilation: Named,
|
||||
sourceSetMap: Map<String, KotlinSourceSet>,
|
||||
dependencyResolver: DependencyResolver,
|
||||
isAndroid: Boolean,
|
||||
project: Project
|
||||
): KotlinCompilationImpl? {
|
||||
val compilationClass = gradleCompilation.javaClass
|
||||
@@ -186,7 +184,7 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService {
|
||||
val arguments = buildCompilationArguments(compileKotlinTask) ?: return null
|
||||
val dependencyClasspath = buildDependencyClasspath(compileKotlinTask)
|
||||
val dependencies = buildCompilationDependencies(gradleCompilation, dependencyResolver, project)
|
||||
return KotlinCompilationImpl(isAndroid, gradleCompilation.name, kotlinSourceSets, dependencies, output, arguments, dependencyClasspath)
|
||||
return KotlinCompilationImpl(gradleCompilation.name, kotlinSourceSets, dependencies, output, arguments, dependencyClasspath)
|
||||
}
|
||||
|
||||
private fun buildCompilationDependencies(
|
||||
@@ -280,15 +278,10 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService {
|
||||
if (compilations != null) {
|
||||
sourceSet.platform = compilations.map { it.platform }.distinct().singleOrNull() ?: KotlinPlatform.COMMON
|
||||
sourceSet.isTestModule = compilations.all { it.isTestModule }
|
||||
sourceSet.isAndroid = compilations.all { it.isAndroid }
|
||||
} else {
|
||||
// TODO: change me after design about it
|
||||
sourceSet.isTestModule = "Test" in sourceSet.name
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val KOTLIN_ANDROID_TARGET_CLASS_NAME = "org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget"
|
||||
}
|
||||
}
|
||||
@@ -14,9 +14,6 @@ class KotlinSourceSetImpl(
|
||||
override val dependencies: Set<KotlinDependency>,
|
||||
override val dependsOnSourceSets: Set<String>
|
||||
) : KotlinSourceSet {
|
||||
override var isAndroid: Boolean = false
|
||||
internal set
|
||||
|
||||
override var platform: KotlinPlatform = KotlinPlatform.COMMON
|
||||
internal set
|
||||
|
||||
@@ -38,7 +35,6 @@ class KotlinCompilationArgumentsImpl(
|
||||
) : KotlinCompilationArguments
|
||||
|
||||
class KotlinCompilationImpl(
|
||||
override val isAndroid: Boolean,
|
||||
override val name: String,
|
||||
override val sourceSets: Collection<KotlinSourceSet>,
|
||||
override val dependencies: Set<KotlinDependency>,
|
||||
@@ -63,7 +59,6 @@ class KotlinTargetJarImpl(
|
||||
) : KotlinTargetJar
|
||||
|
||||
class KotlinTargetImpl(
|
||||
override val isAndroid: Boolean,
|
||||
override val name: String,
|
||||
override val disambiguationClassifier: String?,
|
||||
override val platform: KotlinPlatform,
|
||||
|
||||
Reference in New Issue
Block a user