From 96efc15c36d3066e7f512f63016b328989f9750e Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Thu, 31 Jul 2025 17:08:50 +0200 Subject: [PATCH] fix local dependencies not resolving properly --- .../kotlin/runner/FileDependenciesResolver.kt | 6 ++--- .../scripting/kotlin/runner/ScriptRunner.kt | 1 + .../core/scripting/kotlin/runner/Utils.kt | 24 ++++++++++++++++--- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/FileDependenciesResolver.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/FileDependenciesResolver.kt index e49952fda..82cfdba21 100644 --- a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/FileDependenciesResolver.kt +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/FileDependenciesResolver.kt @@ -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(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 -} +} \ No newline at end of file diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/ScriptRunner.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/ScriptRunner.kt index 644c96bf1..887d346b4 100644 --- a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/ScriptRunner.kt +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/ScriptRunner.kt @@ -49,6 +49,7 @@ class ScriptRunner( type ) { dependencyResolver(resolver) + packDirectory(baseDir) if (SimpleScript::class.java.isAssignableFrom(type.java)) return@createCompilationConfigurationFromTemplate diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/Utils.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/Utils.kt index cd93e56d8..dd329b6dd 100644 --- a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/Utils.kt +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/Utils.kt @@ -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 { @@ -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 ResultWithDiagnostics.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) \ No newline at end of file +val ScriptCompilationConfigurationKeys.dependencyResolver by PropertiesCollection.key(resolver) +val ScriptCompilationConfigurationKeys.packDirectory by PropertiesCollection.key() \ No newline at end of file