Minor refactoring in ContentRoots, JvmContentRoots and usages

This commit is contained in:
Alexander Udalov
2017-05-30 12:45:33 +03:00
parent 227c2d2c23
commit 5042bbe4a1
4 changed files with 30 additions and 25 deletions
@@ -30,9 +30,9 @@ import org.jetbrains.kotlin.cli.jvm.compiler.CompileEnvironmentUtil
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
import org.jetbrains.kotlin.cli.jvm.config.addJavaSourceRoot
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
import org.jetbrains.kotlin.cli.jvm.repl.ReplFromTerminal
import org.jetbrains.kotlin.codegen.CompilationException
import org.jetbrains.kotlin.compiler.plugin.CliOptionProcessingException
@@ -412,7 +412,7 @@ class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
configuration: CompilerConfiguration,
messageCollector: MessageCollector,
scriptResolverEnv: HashMap<String, Any?>) {
val classpath = configuration.getList(JVMConfigurationKeys.CONTENT_ROOTS).filterIsInstance(JvmClasspathRoot::class.java).mapNotNull { it.file }
val classpath = configuration.jvmClasspathRoots
// TODO: consider using escaping to allow kotlin escaped names in class names
if (scriptTemplates != null && scriptTemplates.isNotEmpty()) {
val classloader = URLClassLoader(classpath.map { it.toURI().toURL() }.toTypedArray(), Thread.currentThread().contextClassLoader)
@@ -22,35 +22,40 @@ import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.config.KotlinSourceRoot
import java.io.File
data class JvmClasspathRoot(override val file: File): JvmContentRoot
data class JavaSourceRoot(override val file: File, val packagePrefix: String?): JvmContentRoot
interface JvmContentRoot : ContentRoot {
val file: File
}
data class JvmClasspathRoot(override val file: File) : JvmContentRoot
data class JavaSourceRoot(override val file: File, val packagePrefix: String?) : JvmContentRoot
fun CompilerConfiguration.addJvmClasspathRoot(file: File) {
add(JVMConfigurationKeys.CONTENT_ROOTS, JvmClasspathRoot(file))
}
fun CompilerConfiguration.addJvmClasspathRoots(files: List<File>): Unit = files.forEach { addJvmClasspathRoot(it) }
fun CompilerConfiguration.addJvmClasspathRoots(files: List<File>) {
files.forEach(this::addJvmClasspathRoot)
}
val CompilerConfiguration.jvmClasspathRoots: List<File>
get() {
return get(JVMConfigurationKeys.CONTENT_ROOTS)?.filterIsInstance<JvmClasspathRoot>()?.map { it.file } ?: emptyList()
}
get() = getList(JVMConfigurationKeys.CONTENT_ROOTS).filterIsInstance<JvmClasspathRoot>().map(JvmContentRoot::file)
@JvmOverloads fun CompilerConfiguration.addJavaSourceRoot(file: File, packagePrefix: String? = null) {
@JvmOverloads
fun CompilerConfiguration.addJavaSourceRoot(file: File, packagePrefix: String? = null) {
add(JVMConfigurationKeys.CONTENT_ROOTS, JavaSourceRoot(file, packagePrefix))
}
@JvmOverloads fun CompilerConfiguration.addJavaSourceRoots(files: List<File>, packagePrefix: String? = null): Unit =
files.forEach { addJavaSourceRoot(it, packagePrefix) }
@JvmOverloads
fun CompilerConfiguration.addJavaSourceRoots(files: List<File>, packagePrefix: String? = null) {
files.forEach { addJavaSourceRoot(it, packagePrefix) }
}
val CompilerConfiguration.javaSourceRoots: Set<String>
get() = get(JVMConfigurationKeys.CONTENT_ROOTS)
?.mapNotNullTo(hashSetOf<String>()) {
(it as? KotlinSourceRoot)?.path ?: (it as? JavaSourceRoot)?.file?.path
get() = getList(JVMConfigurationKeys.CONTENT_ROOTS).mapNotNullTo(linkedSetOf<String>()) { root ->
when (root) {
is KotlinSourceRoot -> root.path
is JavaSourceRoot -> root.file.path
else -> null
}
}
.orEmpty()