mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-04-04 08:31:30 +00:00
Kotlin Facet: Configure facet automatically on Maven project import
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
package org.jetbrains.kotlin.config
|
||||
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.util.text.VersionComparatorUtil
|
||||
import org.jetbrains.kotlin.config.LanguageVersion.KOTLIN_1_1
|
||||
import org.jetbrains.kotlin.utils.DescriptionAware
|
||||
|
||||
@@ -59,6 +60,9 @@ enum class LanguageVersion(val versionString: String) : DescriptionAware {
|
||||
@JvmStatic
|
||||
fun fromVersionString(str: String) = values().find { it.versionString == str }
|
||||
|
||||
@JvmStatic
|
||||
fun fromFullVersionString(str: String) = str.split(".", "-").let { if (it.size >= 2) fromVersionString("${it[0]}.${it[1]}") else null }
|
||||
|
||||
@JvmField
|
||||
val LATEST = values().last()
|
||||
}
|
||||
|
||||
@@ -33,6 +33,12 @@ 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.LanguageVersion
|
||||
import org.jetbrains.kotlin.config.TargetPlatformKind
|
||||
import org.jetbrains.kotlin.idea.facet.getOrCreateFacet
|
||||
import org.jetbrains.kotlin.idea.facet.initializeIfNeeded
|
||||
import org.jetbrains.kotlin.idea.facet.mavenLibraryId
|
||||
import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
@@ -79,6 +85,27 @@ class KotlinMavenImporter : MavenImporter(KotlinPluginGroupId, KotlinPluginArtif
|
||||
MavenProjectsManager.getInstance(module.project).scheduleArtifactsDownloading(listOf(mavenProject), toBeDownloaded, true, false, AsyncResult())
|
||||
}
|
||||
}
|
||||
|
||||
configureFacet(mavenProject, modifiableModelsProvider, module)
|
||||
}
|
||||
|
||||
private fun configureFacet(mavenProject: MavenProject, modifiableModelsProvider: IdeModifiableModelsProvider, module: Module) {
|
||||
val compilerVersion = mavenProject.findPlugin(KotlinMavenConfigurator.GROUP_ID, KotlinMavenConfigurator.MAVEN_PLUGIN_ID)?.version ?: return
|
||||
val artifacts = mavenProject.dependencyArtifactIndex.data[KotlinPluginGroupId]?.values?.flatMap { it.filter { it.isResolved } }
|
||||
val expectedLibraryIds = TargetPlatformKind.ALL_PLATFORMS.map { it.mavenLibraryId }
|
||||
val stdlibArtifact = artifacts?.firstOrNull { it.artifactId in expectedLibraryIds }
|
||||
|
||||
val facet = module.getOrCreateFacet(modifiableModelsProvider)
|
||||
with(facet.configuration.settings.versionInfo) {
|
||||
targetPlatformKind = null
|
||||
apiLevel = null
|
||||
facet.configuration.settings.initializeIfNeeded(module, modifiableModelsProvider.getModifiableRootModel(module))
|
||||
languageLevel = LanguageVersion.fromFullVersionString(compilerVersion)
|
||||
// Both apiLevel and languageLevel should be initialized in the lines above
|
||||
if (apiLevel!! > languageLevel!!) {
|
||||
apiLevel = languageLevel
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO in theory it should work like this but it doesn't as it couldn't unmark source roots that are not roots anymore.
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
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
|
||||
@@ -98,7 +99,7 @@ internal fun getLibraryLanguageLevel(
|
||||
return getDefaultLanguageLevel(module, minVersion)
|
||||
}
|
||||
|
||||
internal fun KotlinFacetSettings.initializeIfNeeded(module: Module, rootModel: ModuleRootModel?) {
|
||||
fun KotlinFacetSettings.initializeIfNeeded(module: Module, rootModel: ModuleRootModel?) {
|
||||
val project = module.project
|
||||
|
||||
with(versionInfo) {
|
||||
@@ -135,3 +136,13 @@ val TargetPlatformKind<*>.mavenLibraryId: String
|
||||
is TargetPlatformKind.Jvm -> MAVEN_STDLIB_ID
|
||||
is TargetPlatformKind.JavaScript -> MAVEN_JS_STDLIB_ID
|
||||
}
|
||||
|
||||
fun Module.getOrCreateFacet(modelsProvider: IdeModifiableModelsProvider): KotlinFacet {
|
||||
val facetModel = modelsProvider.getModifiableFacetModel(this)
|
||||
|
||||
facetModel.findFacet(KotlinFacetType.TYPE_ID, KotlinFacetType.INSTANCE.defaultFacetName)?.let { return it }
|
||||
|
||||
val facet = with(KotlinFacetType.INSTANCE) { createFacet(this@getOrCreateFacet, defaultFacetName, createDefaultConfiguration(), null) }
|
||||
facetModel.addFacet(facet)
|
||||
return facet
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user