Kotlin Facet: Get rid of copy constructors for compiler arguments/settings and use reflection-based copying instead
Original commit: d0de9dd43c
This commit is contained in:
@@ -23,16 +23,6 @@ class CompilerSettings {
|
|||||||
var copyJsLibraryFiles: Boolean = true
|
var copyJsLibraryFiles: Boolean = true
|
||||||
var outputDirectoryForJsLibraryFiles: String = DEFAULT_OUTPUT_DIRECTORY
|
var outputDirectoryForJsLibraryFiles: String = DEFAULT_OUTPUT_DIRECTORY
|
||||||
|
|
||||||
constructor()
|
|
||||||
|
|
||||||
constructor(settings: CompilerSettings) {
|
|
||||||
additionalArguments = settings.additionalArguments
|
|
||||||
scriptTemplates = settings.scriptTemplates
|
|
||||||
scriptTemplatesClasspath = settings.scriptTemplatesClasspath
|
|
||||||
copyJsLibraryFiles = settings.copyJsLibraryFiles
|
|
||||||
outputDirectoryForJsLibraryFiles = settings.outputDirectoryForJsLibraryFiles
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val DEFAULT_ADDITIONAL_ARGUMENTS = "-version"
|
private val DEFAULT_ADDITIONAL_ARGUMENTS = "-version"
|
||||||
private val DEFAULT_OUTPUT_DIRECTORY = "lib"
|
private val DEFAULT_OUTPUT_DIRECTORY = "lib"
|
||||||
|
|||||||
@@ -16,33 +16,29 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.compilerRunner
|
package org.jetbrains.kotlin.compilerRunner
|
||||||
|
|
||||||
import com.intellij.util.xmlb.XmlSerializerUtil
|
|
||||||
import org.jetbrains.jps.api.GlobalOptions
|
import org.jetbrains.jps.api.GlobalOptions
|
||||||
import org.jetbrains.kotlin.cli.common.ExitCode
|
import org.jetbrains.kotlin.cli.common.ExitCode
|
||||||
import org.jetbrains.kotlin.cli.common.KOTLIN_COMPILER_ENVIRONMENT_KEEPALIVE_PROPERTY
|
import org.jetbrains.kotlin.cli.common.KOTLIN_COMPILER_ENVIRONMENT_KEEPALIVE_PROPERTY
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
||||||
|
import org.jetbrains.kotlin.cli.common.arguments.mergeBeans
|
||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
|
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
|
||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.ERROR
|
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.ERROR
|
||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.INFO
|
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.INFO
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollectorUtil
|
import org.jetbrains.kotlin.cli.common.messages.MessageCollectorUtil
|
||||||
|
import org.jetbrains.kotlin.config.CompilerSettings
|
||||||
import org.jetbrains.kotlin.daemon.client.CompilationServices
|
import org.jetbrains.kotlin.daemon.client.CompilationServices
|
||||||
import org.jetbrains.kotlin.daemon.client.DaemonReportMessage
|
import org.jetbrains.kotlin.daemon.client.DaemonReportMessage
|
||||||
import org.jetbrains.kotlin.daemon.client.DaemonReportingTargets
|
import org.jetbrains.kotlin.daemon.client.DaemonReportingTargets
|
||||||
import org.jetbrains.kotlin.daemon.client.KotlinCompilerClient
|
import org.jetbrains.kotlin.daemon.client.KotlinCompilerClient
|
||||||
import org.jetbrains.kotlin.config.CompilerSettings
|
|
||||||
import org.jetbrains.kotlin.daemon.common.*
|
import org.jetbrains.kotlin.daemon.common.*
|
||||||
import org.jetbrains.kotlin.jps.build.KotlinBuilder
|
import org.jetbrains.kotlin.jps.build.KotlinBuilder
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
||||||
import org.jetbrains.kotlin.progress.CompilationCanceledStatus
|
import org.jetbrains.kotlin.progress.CompilationCanceledStatus
|
||||||
import org.jetbrains.kotlin.utils.rethrow
|
|
||||||
import java.io.*
|
import java.io.*
|
||||||
import java.lang.reflect.Field
|
|
||||||
import java.lang.reflect.Modifier
|
|
||||||
import java.rmi.ConnectException
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
@@ -250,36 +246,6 @@ object KotlinCompilerRunner {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun <T : CommonCompilerArguments> mergeBeans(from: CommonCompilerArguments, to: T): T {
|
|
||||||
// TODO: rewrite when updated version of com.intellij.util.xmlb is available on TeamCity
|
|
||||||
val copy = XmlSerializerUtil.createCopy(to)
|
|
||||||
|
|
||||||
val fromFields = collectFieldsToCopy(from.javaClass)
|
|
||||||
for (fromField in fromFields) {
|
|
||||||
val toField = copy.javaClass.getField(fromField.name)
|
|
||||||
toField.set(copy, fromField.get(from))
|
|
||||||
}
|
|
||||||
|
|
||||||
return copy
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun collectFieldsToCopy(clazz: Class<*>): List<Field> {
|
|
||||||
val fromFields = ArrayList<Field>()
|
|
||||||
|
|
||||||
var currentClass: Class<*>? = clazz
|
|
||||||
while (currentClass != null) {
|
|
||||||
for (field in currentClass.declaredFields) {
|
|
||||||
val modifiers = field.modifiers
|
|
||||||
if (!Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers)) {
|
|
||||||
fromFields.add(field)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
currentClass = currentClass.superclass
|
|
||||||
}
|
|
||||||
|
|
||||||
return fromFields
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupK2JvmArguments(moduleFile: File, settings: K2JVMCompilerArguments) {
|
private fun setupK2JvmArguments(moduleFile: File, settings: K2JVMCompilerArguments) {
|
||||||
with(settings) {
|
with(settings) {
|
||||||
module = moduleFile.absolutePath
|
module = moduleFile.absolutePath
|
||||||
|
|||||||
Reference in New Issue
Block a user