Set correct library kind for transitive dependencies
This commit is contained in:
+7
-7
@@ -38,7 +38,6 @@ 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.detectLibraryKind
|
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.findAll
|
||||||
import org.jetbrains.kotlin.idea.inspections.gradle.findKotlinPluginVersion
|
import org.jetbrains.kotlin.idea.inspections.gradle.findKotlinPluginVersion
|
||||||
import org.jetbrains.kotlin.idea.inspections.gradle.getResolvedKotlinStdlibVersionByModuleData
|
import org.jetbrains.kotlin.idea.inspections.gradle.getResolvedKotlinStdlibVersionByModuleData
|
||||||
@@ -107,17 +106,18 @@ class KotlinGradleLibraryDataService : AbstractProjectDataService<LibraryData, V
|
|||||||
project: Project,
|
project: Project,
|
||||||
modelsProvider: IdeModifiableModelsProvider
|
modelsProvider: IdeModifiableModelsProvider
|
||||||
) {
|
) {
|
||||||
for (libraryDataNode in toImport) {
|
if (toImport.isEmpty()) return
|
||||||
val ideLibrary = modelsProvider.findIdeLibrary(libraryDataNode.data) ?: continue
|
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
|
val modifiableModel = modelsProvider.getModifiableLibraryModel(ideLibrary) as LibraryEx.ModifiableModelEx
|
||||||
detectLibraryKind(modifiableModel.getFiles(OrderRootType.CLASSES))?.let { modifiableModel.kind = it }
|
detectLibraryKind(modifiableModel.getFiles(OrderRootType.CLASSES))?.let { modifiableModel.kind = it }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -490,6 +490,53 @@ compileTestKotlin {
|
|||||||
assertAllModulesConfigured()
|
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
|
@Test
|
||||||
fun testJsImportWithCustomSourceSets() {
|
fun testJsImportWithCustomSourceSets() {
|
||||||
createProjectSubFile("build.gradle", """
|
createProjectSubFile("build.gradle", """
|
||||||
|
|||||||
Reference in New Issue
Block a user