From a0b8140278b458fa546e4e6eb146f034f0856efd Mon Sep 17 00:00:00 2001 From: Andrey Uskov Date: Tue, 26 Mar 2019 00:16:18 +0300 Subject: [PATCH] Fix creation of Android source roots #KT-30464 Fixed --- .../KotlinGradleProjectResolverExtension.kt | 2 +- .../KotlinMPPGradleProjectResolver.kt | 10 +++--- .../src/KotlinMPPGradleModelImpl.kt | 31 ++++++++++++++++--- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt index 0c04c130ed3..0e0c6588443 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt @@ -196,7 +196,7 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension() if (LOG.isDebugEnabled) { LOG.debug("Start populate module dependencies. Gradle module: [$gradleModule], Ide module: [$ideModule], Ide project: [$ideProject]") } - val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) + val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java)?.let { KotlinMPPGradleModelImpl(it) } if (mppModel != null) { mppModel.targets.forEach { target -> KotlinStatisticsTrigger.trigger( diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt index 276b1dc43b5..e4947eb9270 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt @@ -83,7 +83,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { super.populateModuleCompileOutputSettings(gradleModule, ideModule) } - val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) ?: return + val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java)?.let { KotlinMPPGradleModelImpl(it) } ?: return val ideaOutDir = File(ideModule.data.linkedExternalProjectPath, "out") val projectDataNode = ideModule.getDataNode(ProjectKeys.PROJECT)!! val moduleOutputsMap = projectDataNode.getUserData(MODULES_OUTPUTS)!! @@ -164,7 +164,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { val mainModuleFileDirectoryPath = mainModuleData.moduleFileDirectoryPath val externalProject = resolverCtx.getExtraProject(gradleModule, ExternalProject::class.java) - val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) + val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java)?.let { KotlinMPPGradleModelImpl(it) } if (mppModel == null || externalProject == null) return val jdkName = gradleModule.jdkNameIfAny @@ -311,7 +311,8 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { ideModule: DataNode, resolverCtx: ProjectResolverContext ) { - val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) ?: return + val mppModel = + resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java)?.let { KotlinMPPGradleModelImpl(it) } ?: return if (resolverCtx.getExtraProject(gradleModule, ExternalProject::class.java) == null) return processSourceSets(gradleModule, mppModel, ideModule, resolverCtx) { dataNode, sourceSet -> if (dataNode == null || sourceSet.platform == KotlinPlatform.ANDROID) return@processSourceSets @@ -338,7 +339,8 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { ideModule: DataNode, resolverCtx: ProjectResolverContext ) { - val mppModel = resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java) ?: return + val mppModel = + resolverCtx.getExtraProject(gradleModule, KotlinMPPGradleModel::class.java)?.let { KotlinMPPGradleModelImpl(it) } ?: return val sourceSetMap = ideProject.getUserData(GradleProjectResolver.RESOLVED_SOURCE_SETS) ?: return val artifactsMap = ideProject.getUserData(CONFIGURATION_ARTIFACTS) ?: return val substitutor = KotlinNativeLibrariesDependencySubstitutor(mppModel, gradleModule, resolverCtx) diff --git a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelImpl.kt b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelImpl.kt index f852b6d8320..c47c59cf1ca 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelImpl.kt +++ b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelImpl.kt @@ -13,7 +13,9 @@ data class KotlinSourceSetImpl( override val sourceDirs: Set, override val resourceDirs: Set, override val dependencies: Set, - override val dependsOnSourceSets: Set + override val dependsOnSourceSets: Set, + val defaultPlatform: KotlinPlatform = KotlinPlatform.COMMON, + val defaultIsTestModule: Boolean = false ) : KotlinSourceSet { constructor(kotlinSourceSet: KotlinSourceSet) : this( @@ -22,13 +24,15 @@ data class KotlinSourceSetImpl( HashSet(kotlinSourceSet.sourceDirs), HashSet(kotlinSourceSet.resourceDirs), kotlinSourceSet.dependencies.map { it.deepCopy() }.toSet(), - HashSet(kotlinSourceSet.dependsOnSourceSets) + HashSet(kotlinSourceSet.dependsOnSourceSets), + kotlinSourceSet.platform, + kotlinSourceSet.isTestModule ) - override var platform: KotlinPlatform = KotlinPlatform.COMMON + override var platform: KotlinPlatform = defaultPlatform internal set - override var isTestModule: Boolean = false + override var isTestModule: Boolean = defaultIsTestModule internal set override fun toString() = name @@ -121,6 +125,15 @@ data class KotlinTargetImpl( override val jar: KotlinTargetJar? ) : KotlinTarget { override fun toString() = name + + constructor(target: KotlinTarget) : this( + target.name, + target.presetName, + target.disambiguationClassifier, + KotlinPlatform.byId(target.platform.id) ?: KotlinPlatform.COMMON, + target.compilations.map { KotlinCompilationImpl(it) }.toList(), + KotlinTargetJarImpl(target.jar?.archiveFile) + ) } data class ExtraFeaturesImpl( @@ -132,4 +145,12 @@ data class KotlinMPPGradleModelImpl( override val targets: Collection, override val extraFeatures: ExtraFeatures, override val kotlinNativeHome: String -) : KotlinMPPGradleModel \ No newline at end of file +) : KotlinMPPGradleModel { + + constructor(mppModel: KotlinMPPGradleModel) : this( + mppModel.sourceSets.mapValues { KotlinSourceSetImpl(it.value) }, + mppModel.targets.map { KotlinTargetImpl(it) }.toList(), + ExtraFeaturesImpl(mppModel.extraFeatures.coroutinesState), + mppModel.kotlinNativeHome + ) +} \ No newline at end of file