Skip to content

Commit

Permalink
Add support for Kotlin installed by Scoop
Browse files Browse the repository at this point in the history
  • Loading branch information
tats-u committed Aug 31, 2023
1 parent 394c6a3 commit 1397848
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import java.util.function.BiPredicate
import org.javacs.kt.util.tryResolving
import org.javacs.kt.util.findCommandOnPath
import org.javacs.kt.LOG
import org.javacs.kt.util.OSContext
import java.nio.file.Paths

/** Backup classpath that find Kotlin in the user's Maven/Gradle home or kotlinc's libraries folder. */
Expand Down Expand Up @@ -78,7 +79,7 @@ private fun findKotlinCliCompilerLibrary(name: String): Path? =
// alternative library locations like for snap
// (can probably just use elvis operator and multiple similar expressions for other install directories)
private fun findAlternativeLibraryLocation(name: String): Path? =
Paths.get("/snap/kotlin/current/lib/${name}.jar").existsOrNull()
OSContext.CURRENT_OS.candidateAlternativeLibraryLocations(name).firstNotNullOfOrNull { Paths.get(it).existsOrNull() }

private fun Path.existsOrNull() =
if (Files.exists(this)) this else null
Expand Down
27 changes: 27 additions & 0 deletions shared/src/main/kotlin/org/javacs/kt/util/OSContext.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.javacs.kt.util

/**
* Tasks that depends on user's OS
*/
interface OSContext {
/**
* Suggests the candidate locations of the given JAR
*
* @param name the name of the JAR
* @return the candidate full paths to the JAR
*/
fun candidateAlternativeLibraryLocations(name: String): Array<String>

companion object {
/**
* Gets the instance for the current OS
*/
val CURRENT_OS by lazy<OSContext> {
val osName = System.getProperty("os.name")!!.lowercase()
when {
osName.contains("windows") -> WindowsContext()
else -> UnixContext()
}
}
}
}
9 changes: 9 additions & 0 deletions shared/src/main/kotlin/org/javacs/kt/util/UnixContext.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.javacs.kt.util

/**
* Tasks for other than Windows
*/
class UnixContext : OSContext {
override fun candidateAlternativeLibraryLocations(name: String): Array<String> = // Snap (Linux)
arrayOf("/snap/kotlin/current/lib/${name}.jar")
}
20 changes: 20 additions & 0 deletions shared/src/main/kotlin/org/javacs/kt/util/WindowsContext.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.javacs.kt.util

/**
* Tasks only for Windows
*/
class WindowsContext : OSContext {
override fun candidateAlternativeLibraryLocations(name: String): Array<String> = // Scoop (https://scoop.sh)
CANDIDATE_PATHS.map {
"$it$name.jar"
}.toTypedArray()
companion object {
/**
* Absolute path to the user's profile folder (home directory)
*/
private val USERPROFILE = System.getenv("USERPROFILE")
private val CANDIDATE_PATHS = arrayOf(
"${USERPROFILE}\\scoop\\apps\\kotlin\\current\\lib\\",
)
}
}

0 comments on commit 1397848

Please sign in to comment.