[Gradle] resolveCInteropDependencies (for ide): Handle non-existing files gracefully
During import, cinterop generation is lenient (as there might be good reasons why certain hosts can't generate some cinterop klibs). In this case, the resolution for IDE should be lenient too. When a cinterop file is resolved, that is not present on disk, we just send a 'IdeaKotlinUnresolvedBinaryDependency' instead. KT-56337
This commit is contained in:
committed by
Space Team
parent
f16eecb012
commit
bc98c47caa
+1
-1
@@ -27,7 +27,7 @@ internal object IdeCInteropMetadataDependencyClasspathResolver : IdeDependencyRe
|
||||
project.locateDependencyTask(sourceSet) ?: return emptySet()
|
||||
|
||||
val cinteropFiles = project.createCInteropMetadataDependencyClasspathForIde(sourceSet)
|
||||
return project.resolveCinteropDependencies(cinteropFiles)
|
||||
return project.resolveCInteropDependencies(cinteropFiles)
|
||||
}
|
||||
|
||||
override fun dependencies(project: Project): Iterable<Any> {
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ internal object IdeCommonizedCinteropDependencyResolver : IdeDependencyResolver,
|
||||
|
||||
val project = sourceSet.project
|
||||
val cinteropFiles = project.cinteropCommonizerDependencies(sourceSet)
|
||||
return project.resolveCinteropDependencies(cinteropFiles)
|
||||
return project.resolveCInteropDependencies(cinteropFiles)
|
||||
}
|
||||
|
||||
override fun dependencies(project: Project): Iterable<Any> {
|
||||
|
||||
+1
-1
@@ -18,6 +18,6 @@ internal object IdePlatformCinteropDependencyResolver : IdeDependencyResolver {
|
||||
|
||||
val cinteropFiles = project.getPlatformCinteropDependenciesOrEmpty(sourceSet)
|
||||
|
||||
return project.resolveCinteropDependencies(cinteropFiles)
|
||||
return project.resolveCInteropDependencies(cinteropFiles)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -32,6 +32,6 @@ internal object IdeProjectToProjectCInteropDependencyResolver : IdeDependencyRes
|
||||
it.componentFilter { identifier -> identifier is ProjectComponentIdentifier }
|
||||
}.files
|
||||
|
||||
return project.resolveCinteropDependencies(cinteropFiles)
|
||||
return project.resolveCInteropDependencies(cinteropFiles)
|
||||
}
|
||||
}
|
||||
|
||||
+12
-6
@@ -13,22 +13,28 @@ import org.jetbrains.kotlin.gradle.plugin.ide.KlibExtra
|
||||
import org.jetbrains.kotlin.konan.file.File
|
||||
import org.jetbrains.kotlin.library.*
|
||||
|
||||
internal fun Project.resolveCinteropDependencies(cinteropFiles: FileCollection): Set<IdeaKotlinDependency> {
|
||||
internal fun Project.resolveCInteropDependencies(cinteropFiles: FileCollection): Set<IdeaKotlinDependency> {
|
||||
return cinteropFiles.files
|
||||
.filter { it.isDirectory || it.extension == KLIB_FILE_EXTENSION }
|
||||
.mapNotNullTo(mutableSetOf()) { libraryFile ->
|
||||
createCinteropLibraryDependency(this, libraryFile)
|
||||
}
|
||||
.mapNotNull { libraryFile -> this.createCinteropLibraryDependency(libraryFile) }
|
||||
.toSet()
|
||||
}
|
||||
|
||||
private fun createCinteropLibraryDependency(project: Project, libraryFile: java.io.File): IdeaKotlinResolvedBinaryDependency? {
|
||||
private fun Project.createCinteropLibraryDependency(libraryFile: java.io.File): IdeaKotlinBinaryDependency? {
|
||||
if (!libraryFile.exists()) {
|
||||
return IdeaKotlinUnresolvedBinaryDependency(
|
||||
cause = "cinterop file: ${libraryFile.path} does not exist",
|
||||
coordinates = null
|
||||
)
|
||||
}
|
||||
|
||||
val library = try {
|
||||
resolveSingleFileKlib(
|
||||
libraryFile = File(libraryFile.absolutePath),
|
||||
strategy = ToolingSingleFileKlibResolveStrategy
|
||||
)
|
||||
} catch (error: Throwable) {
|
||||
project.logger.error("Failed to resolve library ${libraryFile.path}", error)
|
||||
logger.error("Failed to resolve library ${libraryFile.path}", error)
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user