Skip to content

Commit c5ee28d

Browse files
committed
Kotlin Facet: Detect module platform by gradle plugin
#KT-16703 Fixed #KT-16342 Fixed
1 parent 26537cd commit c5ee28d

File tree

4 files changed

+104
-12
lines changed

4 files changed

+104
-12
lines changed

idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,22 @@ interface KotlinGradleModel : Serializable {
3333
val currentCompilerArgumentsBySourceSet: CompilerArgumentsBySourceSet
3434
val defaultCompilerArgumentsBySourceSet: CompilerArgumentsBySourceSet
3535
val coroutines: String?
36+
val platformPluginId: String?
3637
}
3738

3839
class KotlinGradleModelImpl(
3940
override val implements: String?,
4041
override val currentCompilerArgumentsBySourceSet: CompilerArgumentsBySourceSet,
4142
override val defaultCompilerArgumentsBySourceSet: CompilerArgumentsBySourceSet,
42-
override val coroutines: String?
43+
override val coroutines: String?,
44+
override val platformPluginId: String?
4345
) : KotlinGradleModel
4446

4547
class KotlinGradleModelBuilder : ModelBuilderService {
4648
companion object {
4749
val kotlinCompileTaskClasses = listOf("org.jetbrains.kotlin.gradle.tasks.KotlinCompile_Decorated",
4850
"org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile_Decorated")
51+
val platformPluginIds = listOf("kotlin-platform-jvm", "kotlin-platform-js", "kotlin-platform-common")
4952
}
5053

5154
override fun getErrorMessageBuilder(project: Project, e: Exception): ErrorMessageBuilder {
@@ -127,7 +130,8 @@ class KotlinGradleModelBuilder : ModelBuilderService {
127130
getImplements(project),
128131
currentCompilerArgumentsBySourceSet,
129132
defaultCompilerArgumentsBySourceSet,
130-
getCoroutines(project)
133+
getCoroutines(project),
134+
platformPluginIds.singleOrNull { project.plugins.findPlugin(it) != null }
131135
)
132136
}
133137
}

idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ var DataNode<ModuleData>.defaultCompilerArgumentsBySourceSet
4040
by UserDataProperty(Key.create<CompilerArgumentsBySourceSet>("DEFAULT_COMPILER_ARGUMENTS"))
4141
var DataNode<ModuleData>.coroutines
4242
by UserDataProperty(Key.create<String>("KOTLIN_COROUTINES"))
43+
var DataNode<ModuleData>.platformPluginId
44+
by UserDataProperty(Key.create<String>("PLATFORM_PLUGIN_ID"))
4345

4446
class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension() {
4547
override fun getToolingExtensionsClasses(): Set<Class<out Any>> {
@@ -68,6 +70,7 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension()
6870
ideModule.currentCompilerArgumentsBySourceSet = gradleModel.currentCompilerArgumentsBySourceSet
6971
ideModule.defaultCompilerArgumentsBySourceSet = gradleModel.defaultCompilerArgumentsBySourceSet
7072
ideModule.coroutines = gradleModel.coroutines
73+
ideModule.platformPluginId = gradleModel.platformPluginId
7174

7275
super.populateModuleDependencies(gradleModule, ideModule, ideProject)
7376
}

idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import org.jetbrains.kotlin.idea.inspections.gradle.findKotlinPluginVersion
3535
import org.jetbrains.kotlin.idea.inspections.gradle.getResolvedKotlinStdlibVersionByModuleData
3636
import org.jetbrains.plugins.gradle.model.data.BuildScriptClasspathData
3737
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
38-
import org.jetbrains.plugins.gradle.service.project.data.ExternalProjectDataService
3938
import java.util.*
4039

4140
interface GradleProjectImportHandler {
@@ -90,15 +89,11 @@ class KotlinGradleProjectDataService : AbstractProjectDataService<ModuleData, Vo
9089
}
9190

9291
private fun detectPlatformByPlugin(moduleNode: DataNode<ModuleData>): TargetPlatformKind<*>? {
93-
val projectNode = ExternalSystemApiUtil.findParent(moduleNode, ProjectKeys.PROJECT)
94-
val externalProjectNode = ExternalSystemApiUtil.find(projectNode as DataNode<*>, ExternalProjectDataService.KEY)
95-
return externalProjectNode?.let {
96-
when (it.data.plugins.values.map { it.id }.firstOrNull { it.startsWith("kotlin-platform-") }) {
97-
"kotlin-platform-jvm" -> TargetPlatformKind.Jvm[JvmTarget.JVM_1_6]
98-
"kotlin-platform-js" -> TargetPlatformKind.JavaScript
99-
"kotlin-platform-common" -> TargetPlatformKind.Common
100-
else -> null
101-
}
92+
return when (moduleNode.platformPluginId) {
93+
"kotlin-platform-jvm" -> TargetPlatformKind.Jvm[JvmTarget.JVM_1_6]
94+
"kotlin-platform-js" -> TargetPlatformKind.JavaScript
95+
"kotlin-platform-common" -> TargetPlatformKind.Common
96+
else -> null
10297
}
10398
}
10499

idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,4 +481,94 @@ class GradleFacetImportTest : GradleImportingTestCase() {
481481
Assert.assertEquals(TargetPlatformKind.Common, targetPlatformKind)
482482
}
483483
}
484+
485+
@Test
486+
fun testJvmImportByPlatformPlugin() {
487+
createProjectSubFile("build.gradle", """
488+
group 'Again'
489+
version '1.0-SNAPSHOT'
490+
491+
buildscript {
492+
repositories {
493+
mavenCentral()
494+
maven {
495+
url 'http://dl.bintray.com/kotlin/kotlin-eap-1.1'
496+
}
497+
}
498+
499+
dependencies {
500+
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0")
501+
}
502+
}
503+
504+
apply plugin: 'kotlin-platform-jvm'
505+
""")
506+
importProject()
507+
508+
with (facetSettings) {
509+
Assert.assertEquals("1.1", languageLevel!!.versionString)
510+
Assert.assertEquals("1.1", apiLevel!!.versionString)
511+
Assert.assertEquals(TargetPlatformKind.Jvm[JvmTarget.JVM_1_6], targetPlatformKind)
512+
}
513+
}
514+
515+
@Test
516+
fun testJsImportByPlatformPlugin() {
517+
createProjectSubFile("build.gradle", """
518+
group 'Again'
519+
version '1.0-SNAPSHOT'
520+
521+
buildscript {
522+
repositories {
523+
mavenCentral()
524+
maven {
525+
url 'http://dl.bintray.com/kotlin/kotlin-eap-1.1'
526+
}
527+
}
528+
529+
dependencies {
530+
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0")
531+
}
532+
}
533+
534+
apply plugin: 'kotlin-platform-js'
535+
""")
536+
importProject()
537+
538+
with (facetSettings) {
539+
Assert.assertEquals("1.1", languageLevel!!.versionString)
540+
Assert.assertEquals("1.1", apiLevel!!.versionString)
541+
Assert.assertEquals(TargetPlatformKind.JavaScript, targetPlatformKind)
542+
}
543+
}
544+
545+
@Test
546+
fun testCommonImportByPlatformPlugin() {
547+
createProjectSubFile("build.gradle", """
548+
group 'Again'
549+
version '1.0-SNAPSHOT'
550+
551+
buildscript {
552+
repositories {
553+
mavenCentral()
554+
maven {
555+
url 'http://dl.bintray.com/kotlin/kotlin-eap-1.1'
556+
}
557+
}
558+
559+
dependencies {
560+
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0")
561+
}
562+
}
563+
564+
apply plugin: 'kotlin-platform-common'
565+
""")
566+
importProject()
567+
568+
with (facetSettings) {
569+
Assert.assertEquals("1.1", languageLevel!!.versionString)
570+
Assert.assertEquals("1.1", apiLevel!!.versionString)
571+
Assert.assertEquals(TargetPlatformKind.Common, targetPlatformKind)
572+
}
573+
}
484574
}

0 commit comments

Comments
 (0)