in src/main/scala/kotlin/KotlinCompile.scala [150:179]
def fromClasspath(cp: Classpath): KotlinReflection = {
val cl = ClasspathUtil.toLoader(cp.map(_.data))
val compilerClass = cl.loadClass("org.jetbrains.kotlin.cli.jvm.K2JVMCompiler")
val servicesClass = cl.loadClass("org.jetbrains.kotlin.config.Services")
val messageCollectorClass = cl.loadClass("org.jetbrains.kotlin.cli.common.messages.MessageCollector")
val commonCompilerArgsClass = cl.loadClass("org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments")
val compilerExec = Try(
compilerClass.getMethod("exec",
messageCollectorClass, servicesClass, commonCompilerArgsClass)
).toOption.getOrElse {
val commonToolArguments = cl.loadClass(
"org.jetbrains.kotlin.cli.common.arguments.CommonToolArguments")
val clitool = cl.loadClass(
"org.jetbrains.kotlin.cli.common.CLITool")
clitool.getMethod("exec",
messageCollectorClass, servicesClass, commonToolArguments)
}
KotlinReflection(
cl,
servicesClass,
compilerClass,
cl.loadClass("org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments"),
messageCollectorClass,
commonCompilerArgsClass,
compilerExec,
servicesClass.getDeclaredField("EMPTY"))
}