Refactor KotlinPaths - make it easier to extend and keep track of supported entities

This commit is contained in:
Ilya Chernikov
2019-02-07 12:28:44 +01:00
parent b0c86647ed
commit 4c751cdd52
3 changed files with 87 additions and 54 deletions
@@ -23,32 +23,103 @@ interface KotlinPaths {
val libPath: File
// TODO: uncomment deprecation and fix usages in the whole project
// @Deprecated("Obsolete API", ReplaceWith("jar(KotlinPaths.Jars.StdLib)"))
val stdlibPath: File
get() = jar(Jar.StdLib)
// @Deprecated("Obsolete API", ReplaceWith("jar(KotlinPaths.Jars.reflect)"))
val reflectPath: File
get() = jar(Jar.Reflect)
// @Deprecated("Obsolete API", ReplaceWith("jar(KotlinPaths.Jars.scriptRuntime)"))
val scriptRuntimePath: File
get() = jar(Jar.ScriptRuntime)
// @Deprecated("Obsolete API", ReplaceWith("jar(KotlinPaths.Jars.kotlinTest)"))
val kotlinTestPath: File
get() = jar(Jar.KotlinTest)
// @Deprecated("Obsolete API", ReplaceWith("sourcesJar(KotlinPaths.Jars.stdLib)!!"))
val stdlibSourcesPath: File
get() = sourcesJar(Jar.StdLib)!!
// @Deprecated("Obsolete API", ReplaceWith("jar(KotlinPaths.Jars.jsStdLib)"))
val jsStdLibJarPath: File
get() = jar(Jar.JsStdLib)
// @Deprecated("Obsolete API", ReplaceWith("sourcesJar(KotlinPaths.Jars.JsStdLib)!!"))
val jsStdLibSrcJarPath: File
get() = sourcesJar(Jar.JsStdLib)!!
// @Deprecated("Obsolete API", ReplaceWith("jar(KotlinPaths.Jars.jsKotlinTest)"))
val jsKotlinTestJarPath: File
get() = jar(Jar.JsKotlinTest)
// @Deprecated("Obsolete API", ReplaceWith("jar(KotlinPaths.Jars.allOpenPlugin)"))
val allOpenPluginJarPath: File
get() = jar(Jar.AllOpenPlugin)
// @Deprecated("Obsolete API", ReplaceWith("jar(KotlinPaths.Jars.noArgPlugin)"))
val noArgPluginJarPath: File
get() = jar(Jar.NoArgPlugin)
// @Deprecated("Obsolete API", ReplaceWith("jar(KotlinPaths.Jars.samWithReceiver)"))
val samWithReceiverJarPath: File
get() = jar(Jar.SamWithReceiver)
// @Deprecated("Obsolete API", ReplaceWith("jar(KotlinPaths.Jars.trove4j)"))
val trove4jJarPath: File
get() = jar(Jar.Trove4j)
// @Deprecated("Obsolete API", ReplaceWith("classPath(KotlinPaths.ClassPaths.Compiler)"))
val compilerClasspath: List<File>
get() = classPath(ClassPaths.Compiler)
// @Deprecated("Obsolete API", ReplaceWith("jar(KotlinPaths.Jars.compiler)"))
val compilerPath: File
get() = jar(Jar.Compiler)
enum class Jar(val baseName: String) {
StdLib(PathUtil.KOTLIN_JAVA_STDLIB_NAME),
Reflect(PathUtil.KOTLIN_JAVA_REFLECT_NAME),
ScriptRuntime(PathUtil.KOTLIN_JAVA_SCRIPT_RUNTIME_NAME),
KotlinTest(PathUtil.KOTLIN_TEST_NAME),
JsStdLib(PathUtil.JS_LIB_NAME),
JsKotlinTest(PathUtil.KOTLIN_TEST_JS_NAME),
AllOpenPlugin(PathUtil.ALLOPEN_PLUGIN_NAME),
NoArgPlugin(PathUtil.NOARG_PLUGIN_NAME),
SamWithReceiver(PathUtil.SAM_WITH_RECEIVER_PLUGIN_NAME),
Trove4j(PathUtil.TROVE4J_NAME),
Compiler(PathUtil.KOTLIN_COMPILER_NAME),
}
enum class ClassPaths(val contents: List<Jar> = emptyList()) {
Empty(),
Compiler(Jars.Compiler, Jars.StdLib, Jars.Reflect, Jars.ScriptRuntime, Jars.Trove4j),
;
constructor(vararg jars: Jar) : this(jars.asList())
constructor(baseClassPath: ClassPaths, vararg jars: Jar) : this(baseClassPath.contents + jars)
}
fun jar(jar: Jar): File
fun sourcesJar(jar: Jar): File?
fun classPath(jars: Sequence<Jar>): List<File> = jars.map(this::jar).toList()
fun classPath(base: ClassPaths, vararg additionalJars: Jar): List<File> = classPath(base.contents.asSequence() + additionalJars)
fun classPath(vararg jars: Jar): List<File> = classPath(jars.asSequence())
}
abstract class KotlinPathsFromBaseDirectory(val basePath: File) : KotlinPaths {
override val libPath: File
get() = basePath
override fun jar(jar: KotlinPaths.Jar): File = basePath.resolve(jar.baseName + ".jar")
override fun sourcesJar(jar: KotlinPaths.Jar): File? = basePath.resolve(jar.baseName + "-sources.jar")
}
@@ -22,54 +22,10 @@ import java.io.File
class KotlinPathsFromHomeDir(
override val homePath: File // kotlinc directory
) : KotlinPaths {
) : KotlinPathsFromBaseDirectory(File(homePath, "lib")) {
override val libPath: File
get() = File(homePath, "lib")
// TODO: extend when needed
val libsWithSources = setOf(KotlinPaths.Jar.StdLib, KotlinPaths.Jar.JsStdLib)
override val stdlibPath: File
get() = getLibraryFile(PathUtil.KOTLIN_JAVA_STDLIB_JAR)
override val reflectPath: File
get() = getLibraryFile(PathUtil.KOTLIN_JAVA_REFLECT_JAR)
override val scriptRuntimePath: File
get() = getLibraryFile(PathUtil.KOTLIN_JAVA_SCRIPT_RUNTIME_JAR)
override val kotlinTestPath: File
get() = getLibraryFile(PathUtil.KOTLIN_TEST_JAR)
override val stdlibSourcesPath: File
get() = getLibraryFile(PathUtil.KOTLIN_JAVA_STDLIB_SRC_JAR)
override val jsStdLibJarPath: File
get() = getLibraryFile(PathUtil.JS_LIB_JAR_NAME)
override val jsStdLibSrcJarPath: File
get() = getLibraryFile(PathUtil.JS_LIB_SRC_JAR_NAME)
override val jsKotlinTestJarPath: File
get() = getLibraryFile(PathUtil.KOTLIN_TEST_JS_JAR)
override val allOpenPluginJarPath: File
get() = getLibraryFile(PathUtil.ALLOPEN_PLUGIN_JAR_NAME)
override val noArgPluginJarPath: File
get() = getLibraryFile(PathUtil.NOARG_PLUGIN_JAR_NAME)
override val samWithReceiverJarPath: File
get() = getLibraryFile(PathUtil.SAM_WITH_RECEIVER_PLUGIN_JAR_NAME)
override val trove4jJarPath: File
get() = getLibraryFile(PathUtil.TROVE4J_NAME)
override val compilerClasspath: List<File>
get() = listOf(stdlibPath, reflectPath, scriptRuntimePath, trove4jJarPath)
override val compilerPath: File
get() = getLibraryFile(PathUtil.KOTLIN_COMPILER_JAR)
private fun getLibraryFile(fileName: String): File {
return File(libPath, fileName)
}
override fun sourcesJar(jar: KotlinPaths.Jar): File? = if (jar in libsWithSources) super.sourcesJar(jar) else null
}
@@ -27,9 +27,12 @@ object PathUtil {
const val JS_LIB_JAR_NAME = "$JS_LIB_NAME.jar"
const val JS_LIB_10_JAR_NAME = "kotlin-jslib.jar"
const val ALLOPEN_PLUGIN_JAR_NAME = "allopen-compiler-plugin.jar"
const val NOARG_PLUGIN_JAR_NAME = "noarg-compiler-plugin.jar"
const val SAM_WITH_RECEIVER_PLUGIN_JAR_NAME = "sam-with-receiver-compiler-plugin.jar"
const val ALLOPEN_PLUGIN_NAME = "allopen-compiler-plugin"
const val ALLOPEN_PLUGIN_JAR_NAME = "$ALLOPEN_PLUGIN_NAME.jar"
const val NOARG_PLUGIN_NAME = "noarg-compiler-plugin"
const val NOARG_PLUGIN_JAR_NAME = "$NOARG_PLUGIN_NAME.jar"
const val SAM_WITH_RECEIVER_PLUGIN_NAME = ".jar"
const val SAM_WITH_RECEIVER_PLUGIN_JAR_NAME = "$SAM_WITH_RECEIVER_PLUGIN_NAME.jar"
const val JS_LIB_SRC_JAR_NAME = "kotlin-stdlib-js-sources.jar"
const val KOTLIN_JAVA_RUNTIME_JRE7_NAME = "kotlin-stdlib-jre7"
@@ -56,9 +59,12 @@ object PathUtil {
const val KOTLIN_JAVA_REFLECT_JAR = "$KOTLIN_JAVA_REFLECT_NAME.jar"
const val KOTLIN_REFLECT_SRC_JAR = "$KOTLIN_JAVA_REFLECT_NAME-sources.jar"
const val KOTLIN_JAVA_SCRIPT_RUNTIME_JAR = "kotlin-script-runtime.jar"
const val KOTLIN_SCRIPTING_COMMON_JAR = "kotlin-scripting-common.jar"
const val KOTLIN_SCRIPTING_JVM_JAR = "kotlin-scripting-jvm.jar"
const val KOTLIN_JAVA_SCRIPT_RUNTIME_NAME = "kotlin-script-runtime"
const val KOTLIN_JAVA_SCRIPT_RUNTIME_JAR = "$KOTLIN_JAVA_SCRIPT_RUNTIME_NAME.jar"
const val KOTLIN_SCRIPTING_COMMON_NAME = "kotlin-scripting-common"
const val KOTLIN_SCRIPTING_COMMON_JAR = "$KOTLIN_SCRIPTING_COMMON_NAME.jar"
const val KOTLIN_SCRIPTING_JVM_NAME = "kotlin-scripting-jvm"
const val KOTLIN_SCRIPTING_JVM_JAR = "$KOTLIN_SCRIPTING_JVM_NAME.jar"
const val KOTLIN_SCRIPTING_COMPILER_PLUGIN_NAME = "kotlin-scripting-compiler"
const val KOTLIN_SCRIPTING_COMPILER_PLUGIN_JAR = "$KOTLIN_SCRIPTING_COMPILER_PLUGIN_NAME.jar"