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,
val compilerArgument: String
) : DescriptionAware {
ENABLED("Enabled", "enabled"),
ENABLED_WITH_WARNING("Enabled with warning", "warning"),
DISABLED("Disabled", "disabled");
ENABLED("Enabled", "enable"),
ENABLED_WITH_WARNING("Enabled with warning", "warn"),
DISABLED("Disabled", "error");
companion object {
val DEFAULT = ENABLED_WITH_WARNING
@@ -79,6 +79,10 @@ enum class CoroutineSupport(
arguments.coroutinesError -> DISABLED
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.jps.model.java.JavaSourceRootType
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
import org.jetbrains.kotlin.config.CoroutineSupport
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.idea.facet.KotlinFacet
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
?: return
val kotlinFacet = module.getOrCreateFacet(modifiableModelsProvider)
kotlinFacet.configureFacet(compilerVersion, modifiableModelsProvider)
kotlinFacet.configureFacet(compilerVersion, CoroutineSupport.DEFAULT, modifiableModelsProvider)
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.util.ExternalSystemApiUtil
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.config.CoroutineSupport
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.idea.facet.KotlinFacet
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.plugins.gradle.model.data.BuildScriptClasspathData
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
import java.util.*
interface GradleProjectImportHandler {
companion object : ProjectExtensionDescriptor<GradleProjectImportHandler>(
@@ -58,9 +60,21 @@ class KotlinGradleProjectDataService : AbstractProjectDataService<GradleSourceSe
val compilerVersion = moduleNode?.findAll(BuildScriptClasspathData.KEY)?.firstOrNull()?.data?.let(::findKotlinPluginVersion)
?: continue
val coroutinesProperty = findKotlinCoroutinesProperty(project)
val kotlinFacet = ideModule.getOrCreateFacet(modelsProvider)
kotlinFacet.configureFacet(compilerVersion, modelsProvider)
kotlinFacet.configureFacet(compilerVersion, coroutinesProperty, modelsProvider)
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.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.ModuleRootManager
import com.intellij.openapi.roots.ModuleRootModel
import com.intellij.openapi.roots.OrderRootType
import com.intellij.util.text.VersionComparatorUtil
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.LanguageVersion
import org.jetbrains.kotlin.config.TargetPlatformKind
@@ -146,7 +144,7 @@ fun Module.getOrCreateFacet(modelsProvider: IdeModifiableModelsProvider): Kotlin
return facet
}
fun KotlinFacet.configureFacet(compilerVersion: String, modelsProvider: IdeModifiableModelsProvider) {
fun KotlinFacet.configureFacet(compilerVersion: String, coroutineSupport: CoroutineSupport, modelsProvider: IdeModifiableModelsProvider) {
val module = module
with(configuration.settings) {
versionInfo.targetPlatformKind = null
@@ -159,5 +157,6 @@ fun KotlinFacet.configureFacet(compilerVersion: String, modelsProvider: IdeModif
apiLevel = languageLevel
}
}
compilerInfo.coroutineSupport = coroutineSupport
}
}