From 022430cb5932e9ba952fb1480f5c123decedca19 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 9 Aug 2017 19:55:58 +0200 Subject: [PATCH] Set correct library kind for transitive dependencies --- .../KotlinGradleSourceSetDataService.kt | 14 +++--- .../gradle/GradleFacetImportTest.kt | 47 +++++++++++++++++++ 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt index b6cb6769dbd..777113309dc 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt @@ -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 + val moduleDataNodes = projectDataNode.children.filter { it.data is ModuleData } as List> + if (moduleDataNodes.any { detectPlatformByPlugin(it) != null}) { + for (libraryDataNode in toImport) { + val ideLibrary = modelsProvider.findIdeLibrary(libraryDataNode.data) ?: continue - val projectDataNode = libraryDataNode.parent!! as DataNode - 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 } } } + } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt index a10367aa23a..5e8515ec67e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt @@ -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() + .map { it.library as LibraryEx } + .first { "kotlin-stdlib-js" in it.name!! } + assertEquals(JSLibraryKind, stdlib.kind) + + assertAllModulesConfigured() + } + @Test fun testJsImportWithCustomSourceSets() { createProjectSubFile("build.gradle", """