From fc8f852773232f3d8d4febb2ce4191558c6051cd Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 5 Mar 2015 19:14:56 +0300 Subject: [PATCH] Temporary copy beans with reflection while there's no library method in TeamCity JPS Original commit: e70098a2d4894e331802232aa3413a76dd38494a --- .../compilerRunner/KotlinCompilerRunner.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/KotlinCompilerRunner.java b/jps/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/KotlinCompilerRunner.java index 2dc9049e3ca..8e551e45c4a 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/KotlinCompilerRunner.java +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/KotlinCompilerRunner.java @@ -31,8 +31,10 @@ import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments; import org.jetbrains.kotlin.cli.common.messages.MessageCollector; import org.jetbrains.kotlin.cli.common.messages.MessageCollectorUtil; import org.jetbrains.kotlin.config.CompilerSettings; +import org.jetbrains.kotlin.utils.UtilsPackage; import java.io.*; +import java.lang.reflect.Method; import java.util.Collection; import java.util.List; @@ -143,13 +145,32 @@ public class KotlinCompilerRunner { private static T mergeBeans(F from, T to) { T copy = XmlSerializerUtil.createCopy(to); + // TODO: Rewrite with XmlSerializerUtil.copyBean() after method is in Teamcity JPS (9.1 expected) for (Accessor accessor : XmlSerializerUtil.getAccessors(from.getClass())) { - accessor.set(copy, accessor.read(from)); + if (!setValue("set", false, accessor, copy, accessor.read(from))) { + setValue("write", true, accessor, copy, accessor.read(from)); + } } return copy; } + private static boolean setValue(String methodName, boolean failOnReflection, Accessor accessor, Object from, Object copy) { + try { + Method method = Accessor.class.getMethod(methodName, Object.class, Object.class); + method.invoke(accessor, from, copy); + + return true; + } + catch (Throwable e) { + if (failOnReflection) { + throw UtilsPackage.rethrow(e); + } + } + + return false; + } + private static void setupK2JvmArguments(File moduleFile, K2JVMCompilerArguments settings) { settings.module = moduleFile.getAbsolutePath(); settings.noStdlib = true;