diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt index fd466bb6334..e71fd230cdc 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt @@ -82,7 +82,7 @@ enum class CoroutineSupport( } fun byCompilerArgument(argument: String): CoroutineSupport { - return CoroutineSupport.values().find { it.compilerArgument == argument } ?: DEFAULT + return CoroutineSupport.values().find { it.compilerArgument.equals(argument, ignoreCase = true) } ?: DEFAULT } } } diff --git a/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt b/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt index ff1e15f588a..dec12c0ec14 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt +++ b/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt @@ -26,11 +26,13 @@ import java.lang.Exception interface KotlinGradleModel : Serializable { val implements: String? val serializedCompilerArguments: List? + val coroutines: String? } class KotlinGradleModelImpl( override val implements: String?, - override val serializedCompilerArguments: List? + override val serializedCompilerArguments: List?, + override val coroutines: String? ) : KotlinGradleModel class KotlinGradleModelBuilder : ModelBuilderService { @@ -65,6 +67,23 @@ class KotlinGradleModelBuilder : ModelBuilderService { } } + private fun getCoroutines(project: Project): String? { + val kotlinExtension = project.extensions.findByName("kotlin") ?: return null + val experimentalExtension = try { + kotlinExtension.javaClass.getMethod("getExperimental").invoke(kotlinExtension) + } + catch(e: NoSuchMethodException) { + return null + } + + return try { + experimentalExtension.javaClass.getMethod("getCoroutines").invoke(experimentalExtension)?.toString() + } + catch(e: NoSuchMethodException) { + null + } + } + override fun buildAll(modelName: String?, project: Project) = - KotlinGradleModelImpl(getImplements(project), getCompilerArguments(project)) + KotlinGradleModelImpl(getImplements(project), getCompilerArguments(project), getCoroutines(project)) } diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt index da15f493226..fc92b555526 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt @@ -34,6 +34,7 @@ import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExten import org.jetbrains.plugins.gradle.service.project.GradleProjectResolverUtil.getModuleId var DataNode.serializedCompilerArguments by UserDataProperty(Key.create>("SERIALIZED_COMPILER_ARGUMENTS")) +var DataNode.coroutines by UserDataProperty(Key.create("KOTLIN_COROUTINES")) class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension() { override fun getToolingExtensionsClasses(): Set> { @@ -60,6 +61,7 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension() } ideModule.serializedCompilerArguments = gradleModel.serializedCompilerArguments + ideModule.coroutines = gradleModel.coroutines super.populateModuleDependencies(gradleModule, ideModule, ideProject) } diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt index 719dcd54e34..61b43a2bf79 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt @@ -115,7 +115,8 @@ private fun configureFacetByGradleModule( ?: return null val platformKind = detectPlatformByPlugin(moduleNode) ?: detectPlatformByLibrary(moduleNode) - val coroutinesProperty = findKotlinCoroutinesProperty(ideModule.project) + val coroutinesProperty = CoroutineSupport.byCompilerArgument( + moduleNode.coroutines ?: findKotlinCoroutinesProperty(ideModule.project)) val kotlinFacet = ideModule.getOrCreateFacet(modelsProvider, false) kotlinFacet.configureFacet(compilerVersion, coroutinesProperty, platformKind, modelsProvider) @@ -127,14 +128,13 @@ private fun configureFacetByGradleModule( private val gradlePropertyFiles = listOf("local.properties", "gradle.properties") -private fun findKotlinCoroutinesProperty(project: Project): CoroutineSupport { +private fun findKotlinCoroutinesProperty(project: Project): String { for (propertyFileName in gradlePropertyFiles) { val propertyFile = project.baseDir.findChild(propertyFileName) ?: continue val properties = Properties() properties.load(propertyFile.inputStream) - val coroutinesProperty = properties.getProperty("kotlin.coroutines") ?: continue - return CoroutineSupport.byCompilerArgument(coroutinesProperty) + properties.getProperty("kotlin.coroutines")?.let { return it } } - return CoroutineSupport.DEFAULT + return CoroutineSupport.DEFAULT.compilerArgument } \ No newline at end of file