Set library kind when importing projects from Maven
This commit is contained in:
@@ -24,6 +24,7 @@ import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsPr
|
|||||||
import com.intellij.openapi.module.Module
|
import com.intellij.openapi.module.Module
|
||||||
import com.intellij.openapi.roots.OrderEnumerator
|
import com.intellij.openapi.roots.OrderEnumerator
|
||||||
import com.intellij.openapi.roots.OrderRootType
|
import com.intellij.openapi.roots.OrderRootType
|
||||||
|
import com.intellij.openapi.roots.impl.libraries.LibraryEx
|
||||||
import com.intellij.openapi.roots.libraries.Library
|
import com.intellij.openapi.roots.libraries.Library
|
||||||
import com.intellij.openapi.util.AsyncResult
|
import com.intellij.openapi.util.AsyncResult
|
||||||
import org.jdom.Element
|
import org.jdom.Element
|
||||||
@@ -38,9 +39,13 @@ import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
|||||||
import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
|
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
|
||||||
import org.jetbrains.kotlin.compilerRunner.ArgumentUtils
|
import org.jetbrains.kotlin.compilerRunner.ArgumentUtils
|
||||||
import org.jetbrains.kotlin.config.*
|
import org.jetbrains.kotlin.config.JvmTarget
|
||||||
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
|
import org.jetbrains.kotlin.config.LanguageVersion
|
||||||
|
import org.jetbrains.kotlin.config.TargetPlatformKind
|
||||||
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
|
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
|
||||||
import org.jetbrains.kotlin.idea.facet.*
|
import org.jetbrains.kotlin.idea.facet.*
|
||||||
|
import org.jetbrains.kotlin.idea.framework.JSLibraryKind
|
||||||
import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator
|
import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -83,27 +88,42 @@ class KotlinMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_
|
|||||||
super.postProcess(module, mavenProject, changes, modifiableModelsProvider)
|
super.postProcess(module, mavenProject, changes, modifiableModelsProvider)
|
||||||
|
|
||||||
if (changes.dependencies) {
|
if (changes.dependencies) {
|
||||||
// TODO: here we have to process all kotlin libraries but for now we only handle standard libraries
|
scheduleDownloadStdlibSources(mavenProject, module)
|
||||||
val artifacts = mavenProject.dependencyArtifactIndex.data[KOTLIN_PLUGIN_GROUP_ID]?.values?.flatMap { it.filter { it.isResolved } } ?: emptyList()
|
|
||||||
|
|
||||||
val librariesWithNoSources = ArrayList<Library>()
|
val platform = detectPlatformByExecutions(mavenProject)
|
||||||
OrderEnumerator.orderEntries(module).forEachLibrary { library ->
|
if (platform == TargetPlatformKind.JavaScript) {
|
||||||
if (library.modifiableModel.getFiles(OrderRootType.SOURCES).isEmpty()) {
|
modifiableModelsProvider.getModifiableRootModel(module).orderEntries().forEachLibrary { library ->
|
||||||
librariesWithNoSources.add(library)
|
if ((library as LibraryEx).kind == null) {
|
||||||
|
val model = modifiableModelsProvider.getModifiableLibraryModel(library) as LibraryEx.ModifiableModelEx
|
||||||
|
model.kind = JSLibraryKind
|
||||||
|
}
|
||||||
|
true
|
||||||
}
|
}
|
||||||
true
|
|
||||||
}
|
|
||||||
val libraryNames = librariesWithNoSources.mapTo(HashSet()) { it.name }
|
|
||||||
val toBeDownloaded = artifacts.filter { it.libraryName in libraryNames }
|
|
||||||
|
|
||||||
if (toBeDownloaded.isNotEmpty()) {
|
|
||||||
MavenProjectsManager.getInstance(module.project).scheduleArtifactsDownloading(listOf(mavenProject), toBeDownloaded, true, false, AsyncResult())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
configureFacet(mavenProject, modifiableModelsProvider, module)
|
configureFacet(mavenProject, modifiableModelsProvider, module)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun scheduleDownloadStdlibSources(mavenProject: MavenProject, module: Module) {
|
||||||
|
// TODO: here we have to process all kotlin libraries but for now we only handle standard libraries
|
||||||
|
val artifacts = mavenProject.dependencyArtifactIndex.data[KOTLIN_PLUGIN_GROUP_ID]?.values?.flatMap { it.filter { it.isResolved } } ?: emptyList()
|
||||||
|
|
||||||
|
val librariesWithNoSources = ArrayList<Library>()
|
||||||
|
OrderEnumerator.orderEntries(module).forEachLibrary { library ->
|
||||||
|
if (library.modifiableModel.getFiles(OrderRootType.SOURCES).isEmpty()) {
|
||||||
|
librariesWithNoSources.add(library)
|
||||||
|
}
|
||||||
|
true
|
||||||
|
}
|
||||||
|
val libraryNames = librariesWithNoSources.mapTo(HashSet()) { it.name }
|
||||||
|
val toBeDownloaded = artifacts.filter { it.libraryName in libraryNames }
|
||||||
|
|
||||||
|
if (toBeDownloaded.isNotEmpty()) {
|
||||||
|
MavenProjectsManager.getInstance(module.project).scheduleArtifactsDownloading(listOf(mavenProject), toBeDownloaded, true, false, AsyncResult())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun getCompilerArgumentsByConfigurationElement(mavenProject: MavenProject,
|
private fun getCompilerArgumentsByConfigurationElement(mavenProject: MavenProject,
|
||||||
configuration: Element?,
|
configuration: Element?,
|
||||||
platform: TargetPlatformKind<*>): List<String> {
|
platform: TargetPlatformKind<*>): List<String> {
|
||||||
|
|||||||
@@ -20,16 +20,20 @@ import com.intellij.openapi.application.Result
|
|||||||
import com.intellij.openapi.application.WriteAction
|
import com.intellij.openapi.application.WriteAction
|
||||||
import com.intellij.openapi.projectRoots.JavaSdk
|
import com.intellij.openapi.projectRoots.JavaSdk
|
||||||
import com.intellij.openapi.projectRoots.ProjectJdkTable
|
import com.intellij.openapi.projectRoots.ProjectJdkTable
|
||||||
|
import com.intellij.openapi.roots.LibraryOrderEntry
|
||||||
import com.intellij.openapi.roots.ModuleRootManager
|
import com.intellij.openapi.roots.ModuleRootManager
|
||||||
|
import com.intellij.openapi.roots.impl.libraries.LibraryEx
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
||||||
import org.jetbrains.kotlin.config.*
|
import org.jetbrains.kotlin.config.*
|
||||||
|
import org.jetbrains.kotlin.idea.codeInsight.gradle.GradleImportingTestCase
|
||||||
import org.jetbrains.kotlin.idea.facet.KotlinFacet
|
import org.jetbrains.kotlin.idea.facet.KotlinFacet
|
||||||
|
import org.jetbrains.kotlin.idea.framework.JSLibraryKind
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class KotlinMavenImporterTest : MavenImportingTestCase() {
|
class KotlinMavenImporterTest : MavenImportingTestCase() {
|
||||||
private val kotlinVersion = "1.0.0-beta-2423"
|
private val kotlinVersion = "1.1.3"
|
||||||
|
|
||||||
override fun setUp() {
|
override fun setUp() {
|
||||||
super.setUp()
|
super.setUp()
|
||||||
@@ -529,7 +533,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
|
|||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jetbrains.kotlin</groupId>
|
<groupId>org.jetbrains.kotlin</groupId>
|
||||||
<artifactId>kotlin-stdlib</artifactId>
|
<artifactId>kotlin-stdlib-js</artifactId>
|
||||||
<version>$kotlinVersion</version>
|
<version>$kotlinVersion</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
@@ -587,6 +591,10 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
|
|||||||
Assert.assertEquals("-output test.js -meta-info -Xmulti-platform",
|
Assert.assertEquals("-output test.js -meta-info -Xmulti-platform",
|
||||||
compilerSettings!!.additionalArguments)
|
compilerSettings!!.additionalArguments)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val rootManager = ModuleRootManager.getInstance(getModule("project"))
|
||||||
|
val stdlib = rootManager.orderEntries.filterIsInstance<LibraryOrderEntry>().single().library
|
||||||
|
GradleImportingTestCase.assertEquals(JSLibraryKind, (stdlib as LibraryEx).kind)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testFacetSplitConfiguration() {
|
fun testFacetSplitConfiguration() {
|
||||||
|
|||||||
Reference in New Issue
Block a user