mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-08-16 16:26:12 +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
|
package com.volmit.iris.core.scripting.kotlin.runner
|
||||||
|
|
||||||
import java.io.File
|
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.ResultWithDiagnostics
|
||||||
import kotlin.script.experimental.api.SourceCode
|
import kotlin.script.experimental.api.SourceCode
|
||||||
import kotlin.script.experimental.api.asSuccess
|
import kotlin.script.experimental.api.asSuccess
|
||||||
@ -13,7 +13,7 @@ import kotlin.script.experimental.dependencies.impl.toRepositoryUrlOrNull
|
|||||||
class FileDependenciesResolver(
|
class FileDependenciesResolver(
|
||||||
private val baseDir: File,
|
private val baseDir: File,
|
||||||
) : ExternalDependenciesResolver {
|
) : ExternalDependenciesResolver {
|
||||||
private val localRepos = synchronizedList(arrayListOf(baseDir))
|
private val localRepos = ConcurrentHashMap.newKeySet<File>(1).also { it.add(baseDir) }
|
||||||
|
|
||||||
private fun String.toRepositoryFileOrNull(): File? =
|
private fun String.toRepositoryFileOrNull(): File? =
|
||||||
File(baseDir, this).takeIf { it.exists() && it.isDirectory }
|
File(baseDir, this).takeIf { it.exists() && it.isDirectory }
|
||||||
@ -62,4 +62,4 @@ class FileDependenciesResolver(
|
|||||||
|
|
||||||
override fun acceptsRepository(repositoryCoordinates: RepositoryCoordinates): Boolean = repositoryCoordinates.toFilePath() != null
|
override fun acceptsRepository(repositoryCoordinates: RepositoryCoordinates): Boolean = repositoryCoordinates.toFilePath() != null
|
||||||
|
|
||||||
}
|
}
|
@ -49,6 +49,7 @@ class ScriptRunner(
|
|||||||
type
|
type
|
||||||
) {
|
) {
|
||||||
dependencyResolver(resolver)
|
dependencyResolver(resolver)
|
||||||
|
packDirectory(baseDir)
|
||||||
|
|
||||||
if (SimpleScript::class.java.isAssignableFrom(type.java))
|
if (SimpleScript::class.java.isAssignableFrom(type.java))
|
||||||
return@createCompilationConfigurationFromTemplate
|
return@createCompilationConfigurationFromTemplate
|
||||||
|
@ -4,7 +4,7 @@ import kotlinx.coroutines.runBlocking
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
import kotlin.script.experimental.api.*
|
import kotlin.script.experimental.api.*
|
||||||
import kotlin.script.experimental.dependencies.CompoundDependenciesResolver
|
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.maven.MavenDependenciesResolver
|
||||||
import kotlin.script.experimental.dependencies.resolveFromScriptSourceAnnotations
|
import kotlin.script.experimental.dependencies.resolveFromScriptSourceAnnotations
|
||||||
import kotlin.script.experimental.jvm.updateClasspath
|
import kotlin.script.experimental.jvm.updateClasspath
|
||||||
@ -23,7 +23,8 @@ internal fun ResultValue.valueOrNull(): Any? =
|
|||||||
else -> null
|
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()
|
private val resolver = createResolver()
|
||||||
internal fun configureMavenDepsOnAnnotations(context: ScriptConfigurationRefinementContext): ResultWithDiagnostics<ScriptCompilationConfiguration> {
|
internal fun configureMavenDepsOnAnnotations(context: ScriptConfigurationRefinementContext): ResultWithDiagnostics<ScriptCompilationConfiguration> {
|
||||||
@ -31,7 +32,23 @@ internal fun configureMavenDepsOnAnnotations(context: ScriptConfigurationRefinem
|
|||||||
?: return context.compilationConfiguration.asSuccess()
|
?: return context.compilationConfiguration.asSuccess()
|
||||||
|
|
||||||
val resolver = context.compilationConfiguration[ScriptCompilationConfiguration.dependencyResolver] ?: resolver
|
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 {
|
return runBlocking {
|
||||||
|
resolver.addRepository(packDirectory.toURI().toURL().toString())
|
||||||
resolver.resolveFromScriptSourceAnnotations(annotations)
|
resolver.resolveFromScriptSourceAnnotations(annotations)
|
||||||
}.onSuccess {
|
}.onSuccess {
|
||||||
context.compilationConfiguration.with {
|
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) })
|
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