Skip to content

Commit

Permalink
Pick Kotlin stdlib based on compiled Kotlin version
Browse files Browse the repository at this point in the history
- Ignore path when comparing versions
- Pick the local Kotlin stdlib version based on the compiled version.
  This prevents potential issues in case there are multiple Kotlin
  versions used on the same machine.
  • Loading branch information
omar25h committed Oct 1, 2022
1 parent 86fd15d commit 46f0db4
Showing 1 changed file with 7 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@ package org.javacs.kt.classpath
import java.io.File
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
import java.nio.file.attribute.BasicFileAttributes
import java.util.function.BiPredicate
import org.javacs.kt.util.tryResolving
import kotlin.math.min
import org.javacs.kt.util.findCommandOnPath
import java.nio.file.Paths
import org.javacs.kt.util.tryResolving

/** Backup classpath that find Kotlin in the user's Maven/Gradle home or kotlinc's libraries folder. */
object BackupClassPathResolver : ClassPathResolver {
Expand All @@ -27,24 +28,13 @@ private fun findLocalArtifact(group: String, artifact: String) =
private fun tryFindingLocalArtifactUsing(@Suppress("UNUSED_PARAMETER") group: String, artifact: String, artifactDirResolution: LocalArtifactDirectoryResolution): Path? {
val isCorrectArtifact = BiPredicate<Path, BasicFileAttributes> { file, _ ->
val name = file.fileName.toString()
when (artifactDirResolution.buildTool) {
"Maven" -> {
val version = file.parent.fileName.toString()
val expected = "${artifact}-${version}.jar"
name == expected
}
else -> name.startsWith(artifact) && name.endsWith(".jar")
}
name == "$artifact-${KotlinVersion.CURRENT}.jar"
}
return Files.list(artifactDirResolution.artifactDir)
.sorted(::compareVersions)
.findFirst()
.orElse(null)
?.let {
Files.find(artifactDirResolution.artifactDir, 3, isCorrectArtifact)
.findFirst()
.orElse(null)
}
?.let { Files.find(artifactDirResolution.artifactDir, 3, isCorrectArtifact).findFirst().orElse(null) }
}

private data class LocalArtifactDirectoryResolution(val artifactDir: Path?, val buildTool: String)
Expand Down Expand Up @@ -105,7 +95,7 @@ private fun compareVersions(left: Path, right: Path): Int {
val leftVersion = extractVersion(left)
val rightVersion = extractVersion(right)

for (i in 0 until Math.min(leftVersion.size, rightVersion.size)) {
for (i in 0 until min(leftVersion.size, rightVersion.size)) {
val leftRev = leftVersion[i].reversed()
val rightRev = rightVersion[i].reversed()
val compare = leftRev.compareTo(rightRev)
Expand All @@ -116,6 +106,6 @@ private fun compareVersions(left: Path, right: Path): Int {
return -leftVersion.size.compareTo(rightVersion.size)
}
private fun extractVersion(artifactVersionDir: Path): List<String> {
return artifactVersionDir.toString().split(".")
return artifactVersionDir.toString().split("/").last().split(".")
}

0 comments on commit 46f0db4

Please sign in to comment.