Import kotlin.coroutines property from gradle to facet

This commit is contained in:
Mikhail Zarechenskiy
2016-12-15 12:31:26 +03:00
committed by Stanislav Erokhin
parent f19581dc4d
commit 2ff04f2bc5
4 changed files with 27 additions and 9 deletions
@@ -65,9 +65,9 @@ enum class CoroutineSupport(
override val description: String, override val description: String,
val compilerArgument: String val compilerArgument: String
) : DescriptionAware { ) : DescriptionAware {
ENABLED("Enabled", "enabled"), ENABLED("Enabled", "enable"),
ENABLED_WITH_WARNING("Enabled with warning", "warning"), ENABLED_WITH_WARNING("Enabled with warning", "warn"),
DISABLED("Disabled", "disabled"); DISABLED("Disabled", "error");
companion object { companion object {
val DEFAULT = ENABLED_WITH_WARNING val DEFAULT = ENABLED_WITH_WARNING
@@ -79,6 +79,10 @@ enum class CoroutineSupport(
arguments.coroutinesError -> DISABLED arguments.coroutinesError -> DISABLED
else -> DEFAULT else -> DEFAULT
} }
fun byCompilerArgument(argument: String): CoroutineSupport {
return CoroutineSupport.values().find { it.compilerArgument == argument } ?: DEFAULT
}
} }
} }
@@ -33,6 +33,7 @@ import org.jetbrains.idea.maven.model.MavenPlugin
import org.jetbrains.idea.maven.project.* import org.jetbrains.idea.maven.project.*
import org.jetbrains.jps.model.java.JavaSourceRootType import org.jetbrains.jps.model.java.JavaSourceRootType
import org.jetbrains.jps.model.module.JpsModuleSourceRootType import org.jetbrains.jps.model.module.JpsModuleSourceRootType
import org.jetbrains.kotlin.config.CoroutineSupport
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.idea.facet.KotlinFacet import org.jetbrains.kotlin.idea.facet.KotlinFacet
import org.jetbrains.kotlin.idea.facet.configureFacet import org.jetbrains.kotlin.idea.facet.configureFacet
@@ -104,7 +105,7 @@ class KotlinMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_
val compilerVersion = mavenProject.findPlugin(KotlinMavenConfigurator.GROUP_ID, KotlinMavenConfigurator.MAVEN_PLUGIN_ID)?.version val compilerVersion = mavenProject.findPlugin(KotlinMavenConfigurator.GROUP_ID, KotlinMavenConfigurator.MAVEN_PLUGIN_ID)?.version
?: return ?: return
val kotlinFacet = module.getOrCreateFacet(modifiableModelsProvider) val kotlinFacet = module.getOrCreateFacet(modifiableModelsProvider)
kotlinFacet.configureFacet(compilerVersion, modifiableModelsProvider) kotlinFacet.configureFacet(compilerVersion, CoroutineSupport.DEFAULT, modifiableModelsProvider)
MavenProjectImportHandler.getInstances(module.project).forEach { it(kotlinFacet, mavenProject) } MavenProjectImportHandler.getInstances(module.project).forEach { it(kotlinFacet, mavenProject) }
} }
@@ -23,6 +23,7 @@ import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsPr
import com.intellij.openapi.externalSystem.service.project.manage.AbstractProjectDataService import com.intellij.openapi.externalSystem.service.project.manage.AbstractProjectDataService
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.config.CoroutineSupport
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.idea.facet.KotlinFacet import org.jetbrains.kotlin.idea.facet.KotlinFacet
import org.jetbrains.kotlin.idea.facet.configureFacet import org.jetbrains.kotlin.idea.facet.configureFacet
@@ -31,6 +32,7 @@ import org.jetbrains.kotlin.idea.inspections.gradle.findAll
import org.jetbrains.kotlin.idea.inspections.gradle.findKotlinPluginVersion import org.jetbrains.kotlin.idea.inspections.gradle.findKotlinPluginVersion
import org.jetbrains.plugins.gradle.model.data.BuildScriptClasspathData import org.jetbrains.plugins.gradle.model.data.BuildScriptClasspathData
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
import java.util.*
interface GradleProjectImportHandler { interface GradleProjectImportHandler {
companion object : ProjectExtensionDescriptor<GradleProjectImportHandler>( companion object : ProjectExtensionDescriptor<GradleProjectImportHandler>(
@@ -58,9 +60,21 @@ class KotlinGradleProjectDataService : AbstractProjectDataService<GradleSourceSe
val compilerVersion = moduleNode?.findAll(BuildScriptClasspathData.KEY)?.firstOrNull()?.data?.let(::findKotlinPluginVersion) val compilerVersion = moduleNode?.findAll(BuildScriptClasspathData.KEY)?.firstOrNull()?.data?.let(::findKotlinPluginVersion)
?: continue ?: continue
val coroutinesProperty = findKotlinCoroutinesProperty(project)
val kotlinFacet = ideModule.getOrCreateFacet(modelsProvider) val kotlinFacet = ideModule.getOrCreateFacet(modelsProvider)
kotlinFacet.configureFacet(compilerVersion, modelsProvider) kotlinFacet.configureFacet(compilerVersion, coroutinesProperty, modelsProvider)
GradleProjectImportHandler.getInstances(project).forEach { it(kotlinFacet, sourceSetNode) } GradleProjectImportHandler.getInstances(project).forEach { it(kotlinFacet, sourceSetNode) }
} }
} }
}
private fun findKotlinCoroutinesProperty(project: Project): CoroutineSupport {
val localPropertiesFile = project.baseDir.findChild("local.properties") ?: return CoroutineSupport.DEFAULT
val properties = Properties()
properties.load(localPropertiesFile.inputStream)
val coroutinesProperty = properties.getProperty("kotlin.coroutines") ?: return CoroutineSupport.DEFAULT
return CoroutineSupport.byCompilerArgument(coroutinesProperty)
} }
@@ -18,15 +18,13 @@ package org.jetbrains.kotlin.idea.facet
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import com.intellij.openapi.projectRoots.JavaSdk
import com.intellij.openapi.projectRoots.JavaSdkVersion
import com.intellij.openapi.roots.LibraryOrderEntry import com.intellij.openapi.roots.LibraryOrderEntry
import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.roots.ModuleRootModel import com.intellij.openapi.roots.ModuleRootModel
import com.intellij.openapi.roots.OrderRootType import com.intellij.openapi.roots.OrderRootType
import com.intellij.util.text.VersionComparatorUtil import com.intellij.util.text.VersionComparatorUtil
import org.jetbrains.kotlin.cli.common.arguments.copyBean import org.jetbrains.kotlin.cli.common.arguments.copyBean
import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.CoroutineSupport
import org.jetbrains.kotlin.config.KotlinFacetSettings import org.jetbrains.kotlin.config.KotlinFacetSettings
import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.config.TargetPlatformKind import org.jetbrains.kotlin.config.TargetPlatformKind
@@ -146,7 +144,7 @@ fun Module.getOrCreateFacet(modelsProvider: IdeModifiableModelsProvider): Kotlin
return facet return facet
} }
fun KotlinFacet.configureFacet(compilerVersion: String, modelsProvider: IdeModifiableModelsProvider) { fun KotlinFacet.configureFacet(compilerVersion: String, coroutineSupport: CoroutineSupport, modelsProvider: IdeModifiableModelsProvider) {
val module = module val module = module
with(configuration.settings) { with(configuration.settings) {
versionInfo.targetPlatformKind = null versionInfo.targetPlatformKind = null
@@ -159,5 +157,6 @@ fun KotlinFacet.configureFacet(compilerVersion: String, modelsProvider: IdeModif
apiLevel = languageLevel apiLevel = languageLevel
} }
} }
compilerInfo.coroutineSupport = coroutineSupport
} }
} }