Add API to get locations of collected script annotations

#KT-38404 fixed

also:
- Add wrapper class for the location combined with the location id
- Add source code location parameters to external dependency resolvers
- Add tests for locations in annotations
- Add tests for order of annotation resolution for dependencies resolvers
This commit is contained in:
Mathias Quintero
2020-05-20 13:42:08 +02:00
committed by Ilya Chernikov
parent 1539128c3f
commit 83087291df
19 changed files with 550 additions and 85 deletions
@@ -9,6 +9,8 @@ import java.io.File
import kotlin.contracts.ExperimentalContracts
import kotlin.script.experimental.dependencies.*
import kotlin.script.experimental.api.ResultWithDiagnostics
import kotlin.script.experimental.api.SourceCode
import kotlin.script.experimental.api.asSuccess
import kotlin.script.experimental.dependencies.impl.makeResolveFailureResult
@ExperimentalContracts
@@ -83,14 +85,23 @@ class ResolversTest : ResolversTestBase() {
override fun acceptsArtifact(artifactCoordinates: String): Boolean = acceptsArt(artifactCoordinates)
override suspend fun resolve(artifactCoordinates: String): ResultWithDiagnostics<List<File>> {
override suspend fun resolve(
artifactCoordinates: String,
sourceCodeLocation: SourceCode.LocationWithId?
): ResultWithDiagnostics<List<File>> {
if (!acceptsArtifact(artifactCoordinates)) throw Exception("Path is invalid")
val file = doResolve(artifactCoordinates) ?: return makeResolveFailureResult("Failed to resolve '$artifactCoordinates'")
val file = doResolve(artifactCoordinates)
?: return makeResolveFailureResult("Failed to resolve '$artifactCoordinates'", sourceCodeLocation)
return ResultWithDiagnostics.Success(listOf(file))
}
override fun addRepository(repositoryCoordinates: RepositoryCoordinates) {
override fun addRepository(
repositoryCoordinates: RepositoryCoordinates,
sourceCodeLocation: SourceCode.LocationWithId?
): ResultWithDiagnostics<Boolean> {
if (!acceptsRepository(repositoryCoordinates)) return false.asSuccess()
addRepo(repositoryCoordinates.string)
return true.asSuccess()
}
override fun acceptsRepository(repositoryCoordinates: RepositoryCoordinates): Boolean {