Use binary path instead of name to locate libraries from Android deps
This commit is contained in:
+10
-1
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.android.configure
|
|||||||
|
|
||||||
import com.android.tools.idea.gradle.project.model.JavaModuleModel
|
import com.android.tools.idea.gradle.project.model.JavaModuleModel
|
||||||
import com.android.tools.idea.gradle.project.sync.idea.data.service.AndroidProjectKeys
|
import com.android.tools.idea.gradle.project.sync.idea.data.service.AndroidProjectKeys
|
||||||
|
import com.android.tools.idea.gradle.util.FilePaths
|
||||||
import com.intellij.openapi.externalSystem.model.DataNode
|
import com.intellij.openapi.externalSystem.model.DataNode
|
||||||
import com.intellij.openapi.externalSystem.model.project.ModuleData
|
import com.intellij.openapi.externalSystem.model.project.ModuleData
|
||||||
import com.intellij.openapi.externalSystem.model.project.ProjectData
|
import com.intellij.openapi.externalSystem.model.project.ProjectData
|
||||||
@@ -26,9 +27,11 @@ import com.intellij.openapi.externalSystem.service.project.manage.AbstractProjec
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
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.impl.libraries.LibraryEx
|
||||||
|
import com.intellij.openapi.roots.libraries.Library
|
||||||
import org.jetbrains.kotlin.idea.configuration.detectPlatformByPlugin
|
import org.jetbrains.kotlin.idea.configuration.detectPlatformByPlugin
|
||||||
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.framework.libraryKind
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
class KotlinAndroidGradleLibraryDataService : AbstractProjectDataService<JavaModuleModel, Void>() {
|
class KotlinAndroidGradleLibraryDataService : AbstractProjectDataService<JavaModuleModel, Void>() {
|
||||||
override fun getTargetDataKey() = AndroidProjectKeys.JAVA_MODULE_MODEL
|
override fun getTargetDataKey() = AndroidProjectKeys.JAVA_MODULE_MODEL
|
||||||
@@ -43,7 +46,7 @@ class KotlinAndroidGradleLibraryDataService : AbstractProjectDataService<JavaMod
|
|||||||
val targetLibraryKind = detectPlatformByPlugin(dataNode.parent as DataNode<ModuleData>)?.libraryKind
|
val targetLibraryKind = detectPlatformByPlugin(dataNode.parent as DataNode<ModuleData>)?.libraryKind
|
||||||
if (targetLibraryKind != null) {
|
if (targetLibraryKind != null) {
|
||||||
for (dep in dataNode.data.jarLibraryDependencies) {
|
for (dep in dataNode.data.jarLibraryDependencies) {
|
||||||
val library = modelsProvider.getLibraryByName(dep.name) as LibraryEx? ?: continue
|
val library = modelsProvider.findLibraryByBinaryPath(dep.binaryPath) as LibraryEx? ?: continue
|
||||||
if (library.kind == null) {
|
if (library.kind == null) {
|
||||||
val model = modelsProvider.getModifiableLibraryModel(library) as LibraryEx.ModifiableModelEx
|
val model = modelsProvider.getModifiableLibraryModel(library) as LibraryEx.ModifiableModelEx
|
||||||
detectLibraryKind(model.getFiles(OrderRootType.CLASSES))?.let { model.kind = it }
|
detectLibraryKind(model.getFiles(OrderRootType.CLASSES))?.let { model.kind = it }
|
||||||
@@ -52,4 +55,10 @@ class KotlinAndroidGradleLibraryDataService : AbstractProjectDataService<JavaMod
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun IdeModifiableModelsProvider.findLibraryByBinaryPath(path: File?): Library? {
|
||||||
|
if (path == null) return null
|
||||||
|
val url = FilePaths.pathToIdeaUrl(path)
|
||||||
|
return allLibraries.firstOrNull { url in getModifiableLibraryModel(it).getUrls(OrderRootType.CLASSES) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-1
@@ -23,6 +23,7 @@ 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.LibraryOrderEntry
|
||||||
import com.intellij.openapi.roots.ModuleRootManager
|
import com.intellij.openapi.roots.ModuleRootManager
|
||||||
|
import com.intellij.openapi.roots.OrderRootType
|
||||||
import com.intellij.openapi.roots.impl.libraries.LibraryEx
|
import com.intellij.openapi.roots.impl.libraries.LibraryEx
|
||||||
import com.intellij.openapi.util.text.StringUtil
|
import com.intellij.openapi.util.text.StringUtil
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
||||||
@@ -486,6 +487,7 @@ compileTestKotlin {
|
|||||||
val rootManager = ModuleRootManager.getInstance(getModule("project_main"))
|
val rootManager = ModuleRootManager.getInstance(getModule("project_main"))
|
||||||
val stdlib = rootManager.orderEntries.filterIsInstance<LibraryOrderEntry>().single().library
|
val stdlib = rootManager.orderEntries.filterIsInstance<LibraryOrderEntry>().single().library
|
||||||
assertEquals(JSLibraryKind, (stdlib as LibraryEx).kind)
|
assertEquals(JSLibraryKind, (stdlib as LibraryEx).kind)
|
||||||
|
assertTrue(stdlib.getFiles(OrderRootType.CLASSES).isNotEmpty())
|
||||||
|
|
||||||
assertAllModulesConfigured()
|
assertAllModulesConfigured()
|
||||||
}
|
}
|
||||||
@@ -1062,7 +1064,8 @@ compileTestKotlin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val rootManager = ModuleRootManager.getInstance(getModule("js-module"))
|
val rootManager = ModuleRootManager.getInstance(getModule("js-module"))
|
||||||
val stdlib = rootManager.orderEntries.filterIsInstance<LibraryOrderEntry>().single().library
|
val stdlib = rootManager.orderEntries.filterIsInstance<LibraryOrderEntry>().single().library!!
|
||||||
|
assertTrue(stdlib.getFiles(OrderRootType.CLASSES).isNotEmpty())
|
||||||
assertEquals(JSLibraryKind, (stdlib as LibraryEx).kind)
|
assertEquals(JSLibraryKind, (stdlib as LibraryEx).kind)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user