From 9cfbf276028c52be9bfb7ba2189be996ff77ccae Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 4 Jun 2015 21:47:24 +0300 Subject: [PATCH] Use same classloader for loading JS and JVM compilers --- .../kotlin/test/MockLibraryUtil.java | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/compiler/tests/org/jetbrains/kotlin/test/MockLibraryUtil.java b/compiler/tests/org/jetbrains/kotlin/test/MockLibraryUtil.java index 75d7a3d8d0d..d74a378bf64 100644 --- a/compiler/tests/org/jetbrains/kotlin/test/MockLibraryUtil.java +++ b/compiler/tests/org/jetbrains/kotlin/test/MockLibraryUtil.java @@ -44,8 +44,7 @@ import static org.junit.Assert.assertEquals; public class MockLibraryUtil { - private static SoftReference> compiler2JVMClassRef = new SoftReference>(null); - private static SoftReference> compiler2JSClassRef = new SoftReference>(null); + private static SoftReference compilerClassLoader = new SoftReference(null); @NotNull public static File compileLibraryToJar( @@ -199,32 +198,33 @@ public class MockLibraryUtil { @NotNull private static synchronized Class getCompiler2JVMClass() { - Class compilerClass = compiler2JVMClassRef.get(); - if (compilerClass == null) { - compilerClass = getCompilerClass(K2JVMCompiler.class.getName()); - compiler2JVMClassRef = new SoftReference>(compilerClass); - } - return compilerClass; + return loadCompilerClass(K2JVMCompiler.class.getName()); } @NotNull private static synchronized Class getCompiler2JSClass() { - Class compilerClass = compiler2JSClassRef.get(); - if (compilerClass == null) { - compilerClass = getCompilerClass(K2JSCompiler.class.getName()); - compiler2JSClassRef = new SoftReference>(compilerClass); + return loadCompilerClass(K2JSCompiler.class.getName()); + } + + private static synchronized Class loadCompilerClass(String compilerClassName) { + try { + ClassLoader classLoader = compilerClassLoader.get(); + if (classLoader == null) { + classLoader = createCompilerClassLoader(); + compilerClassLoader = new SoftReference(classLoader); + } + return classLoader.loadClass(compilerClassName); + } + catch (Throwable e) { + throw UtilsPackage.rethrow(e); } - return compilerClass; } @NotNull - private static synchronized Class getCompilerClass(String compilerClassName) { + private static synchronized ClassLoader createCompilerClassLoader() { try { File kotlinCompilerJar = new File(PathUtil.getKotlinPathsForDistDirectory().getLibPath(), "kotlin-compiler.jar"); - ClassLoader classLoader = - ClassPreloadingUtils.preloadClasses(Collections.singletonList(kotlinCompilerJar), 4096, null, null, null); - - return classLoader.loadClass(compilerClassName); + return ClassPreloadingUtils.preloadClasses(Collections.singletonList(kotlinCompilerJar), 4096, null, null, null); } catch (Throwable e) { throw UtilsPackage.rethrow(e);