Set correct library kind for transitive dependencies

This commit is contained in:
Dmitry Jemerov
2017-08-09 19:55:58 +02:00
parent 974dad571c
commit 022430cb59
2 changed files with 54 additions and 7 deletions
@@ -38,7 +38,6 @@ import org.jetbrains.kotlin.config.TargetPlatformKind
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.idea.facet.*
import org.jetbrains.kotlin.idea.framework.detectLibraryKind
import org.jetbrains.kotlin.idea.framework.libraryKind
import org.jetbrains.kotlin.idea.inspections.gradle.findAll
import org.jetbrains.kotlin.idea.inspections.gradle.findKotlinPluginVersion
import org.jetbrains.kotlin.idea.inspections.gradle.getResolvedKotlinStdlibVersionByModuleData
@@ -107,17 +106,18 @@ class KotlinGradleLibraryDataService : AbstractProjectDataService<LibraryData, V
project: Project,
modelsProvider: IdeModifiableModelsProvider
) {
for (libraryDataNode in toImport) {
val ideLibrary = modelsProvider.findIdeLibrary(libraryDataNode.data) ?: continue
if (toImport.isEmpty()) return
val projectDataNode = toImport.first().parent!! as DataNode<ProjectData>
val moduleDataNodes = projectDataNode.children.filter { it.data is ModuleData } as List<DataNode<ModuleData>>
if (moduleDataNodes.any { detectPlatformByPlugin(it) != null}) {
for (libraryDataNode in toImport) {
val ideLibrary = modelsProvider.findIdeLibrary(libraryDataNode.data) ?: continue
val projectDataNode = libraryDataNode.parent!! as DataNode<ProjectData>
val ownerModule = findOwnerModule(libraryDataNode.data, projectDataNode) ?: continue
val targetLibraryKind = detectPlatformByPlugin(ownerModule)?.libraryKind
if (targetLibraryKind != null) {
val modifiableModel = modelsProvider.getModifiableLibraryModel(ideLibrary) as LibraryEx.ModifiableModelEx
detectLibraryKind(modifiableModel.getFiles(OrderRootType.CLASSES))?.let { modifiableModel.kind = it }
}
}
}
}
@@ -490,6 +490,53 @@ compileTestKotlin {
assertAllModulesConfigured()
}
@Test
fun testJsImportTransitive() {
createProjectSubFile("build.gradle", """
group 'Again'
version '1.0-SNAPSHOT'
buildscript {
repositories {
mavenCentral()
maven {
url 'http://dl.bintray.com/kotlin/kotlin-eap-1.1'
}
}
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0")
}
}
apply plugin: 'kotlin2js'
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-test-js:1.1.0"
}
""")
importProject()
with (facetSettings) {
Assert.assertEquals("1.1", languageLevel!!.versionString)
Assert.assertEquals("1.1", apiLevel!!.versionString)
Assert.assertEquals(TargetPlatformKind.JavaScript, targetPlatformKind)
}
val rootManager = ModuleRootManager.getInstance(getModule("project_main"))
val stdlib = rootManager.orderEntries
.filterIsInstance<LibraryOrderEntry>()
.map { it.library as LibraryEx }
.first { "kotlin-stdlib-js" in it.name!! }
assertEquals(JSLibraryKind, stdlib.kind)
assertAllModulesConfigured()
}
@Test
fun testJsImportWithCustomSourceSets() {
createProjectSubFile("build.gradle", """