mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-08-16 08:15:50 +00:00
fix local dependencies not resolving properly
This commit is contained in:
parent
67f456cf53
commit
96efc15c36
@ -1,7 +1,7 @@
|
||||
package com.volmit.iris.core.scripting.kotlin.runner
|
||||
|
||||
import java.io.File
|
||||
import java.util.Collections.synchronizedList
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import kotlin.script.experimental.api.ResultWithDiagnostics
|
||||
import kotlin.script.experimental.api.SourceCode
|
||||
import kotlin.script.experimental.api.asSuccess
|
||||
@ -13,7 +13,7 @@ import kotlin.script.experimental.dependencies.impl.toRepositoryUrlOrNull
|
||||
class FileDependenciesResolver(
|
||||
private val baseDir: File,
|
||||
) : ExternalDependenciesResolver {
|
||||
private val localRepos = synchronizedList(arrayListOf(baseDir))
|
||||
private val localRepos = ConcurrentHashMap.newKeySet<File>(1).also { it.add(baseDir) }
|
||||
|
||||
private fun String.toRepositoryFileOrNull(): File? =
|
||||
File(baseDir, this).takeIf { it.exists() && it.isDirectory }
|
||||
@ -62,4 +62,4 @@ class FileDependenciesResolver(
|
||||
|
||||
override fun acceptsRepository(repositoryCoordinates: RepositoryCoordinates): Boolean = repositoryCoordinates.toFilePath() != null
|
||||
|
||||
}
|
||||
}
|
@ -49,6 +49,7 @@ class ScriptRunner(
|
||||
type
|
||||
) {
|
||||
dependencyResolver(resolver)
|
||||
packDirectory(baseDir)
|
||||
|
||||
if (SimpleScript::class.java.isAssignableFrom(type.java))
|
||||
return@createCompilationConfigurationFromTemplate
|
||||
|
@ -4,7 +4,7 @@ import kotlinx.coroutines.runBlocking
|
||||
import java.io.File
|
||||
import kotlin.script.experimental.api.*
|
||||
import kotlin.script.experimental.dependencies.CompoundDependenciesResolver
|
||||
import kotlin.script.experimental.dependencies.FileSystemDependenciesResolver
|
||||
import kotlin.script.experimental.dependencies.addRepository
|
||||
import kotlin.script.experimental.dependencies.maven.MavenDependenciesResolver
|
||||
import kotlin.script.experimental.dependencies.resolveFromScriptSourceAnnotations
|
||||
import kotlin.script.experimental.jvm.updateClasspath
|
||||
@ -23,7 +23,8 @@ internal fun ResultValue.valueOrNull(): Any? =
|
||||
else -> null
|
||||
}
|
||||
|
||||
internal fun createResolver(baseDir: File = File(".").normalize()) = CompoundDependenciesResolver(FileDependenciesResolver(baseDir), MavenDependenciesResolver())
|
||||
private val workDir = File(".").normalize()
|
||||
internal fun createResolver(baseDir: File = workDir) = CompoundDependenciesResolver(FileDependenciesResolver(baseDir), MavenDependenciesResolver())
|
||||
|
||||
private val resolver = createResolver()
|
||||
internal fun configureMavenDepsOnAnnotations(context: ScriptConfigurationRefinementContext): ResultWithDiagnostics<ScriptCompilationConfiguration> {
|
||||
@ -31,7 +32,23 @@ internal fun configureMavenDepsOnAnnotations(context: ScriptConfigurationRefinem
|
||||
?: return context.compilationConfiguration.asSuccess()
|
||||
|
||||
val resolver = context.compilationConfiguration[ScriptCompilationConfiguration.dependencyResolver] ?: resolver
|
||||
val packDirectory = context.compilationConfiguration[ScriptCompilationConfiguration.packDirectory] ?: context.script.locationId?.let(::File)?.takeIf { it.exists() }?.run {
|
||||
val parts = normalize().absolutePath.split(File.separatorChar)
|
||||
|
||||
var packDir: File? = null
|
||||
for (i in parts.size - 1 downTo 1) {
|
||||
if (parts[i] != "scripts") continue
|
||||
val pack = File(parts.subList(0, i).joinToString(File.separator))
|
||||
if (!File(pack, "dimensions${File.separator}${parts[i - 1]}.json").exists())
|
||||
continue
|
||||
packDir = pack
|
||||
break
|
||||
}
|
||||
packDir
|
||||
} ?: workDir
|
||||
|
||||
return runBlocking {
|
||||
resolver.addRepository(packDirectory.toURI().toURL().toString())
|
||||
resolver.resolveFromScriptSourceAnnotations(annotations)
|
||||
}.onSuccess {
|
||||
context.compilationConfiguration.with {
|
||||
@ -46,4 +63,5 @@ fun <R> ResultWithDiagnostics<R>.valueOrThrow(message: CharSequence): R = valueO
|
||||
throw RuntimeException(it.reports.joinToString("\n", "$message\n") { r -> r.render(withStackTrace = true) })
|
||||
}
|
||||
|
||||
val ScriptCompilationConfigurationKeys.dependencyResolver by PropertiesCollection.key(resolver)
|
||||
val ScriptCompilationConfigurationKeys.dependencyResolver by PropertiesCollection.key(resolver)
|
||||
val ScriptCompilationConfigurationKeys.packDirectory by PropertiesCollection.key<File>()
|
Loading…
x
Reference in New Issue
Block a user