From 49c78602af350e274c74c9c8bba9e4662d8701b7 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 2 Jun 2015 18:29:38 +0300 Subject: [PATCH] Minor, move and rename CompilerClassLoaderHolder -> KotlinAntTaskUtil --- .../jetbrains/kotlin/ant/KotlinAntTaskUtil.kt | 51 +++++++++++++++++++ .../kotlin/ant/KotlinCompilerBaseTask.kt | 34 +------------ 2 files changed, 52 insertions(+), 33 deletions(-) create mode 100644 ant/src/org/jetbrains/kotlin/ant/KotlinAntTaskUtil.kt diff --git a/ant/src/org/jetbrains/kotlin/ant/KotlinAntTaskUtil.kt b/ant/src/org/jetbrains/kotlin/ant/KotlinAntTaskUtil.kt new file mode 100644 index 00000000000..51a33855f77 --- /dev/null +++ b/ant/src/org/jetbrains/kotlin/ant/KotlinAntTaskUtil.kt @@ -0,0 +1,51 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.ant + +import org.apache.tools.ant.AntClassLoader +import org.jetbrains.kotlin.preloading.ClassPreloadingUtils +import java.io.File +import java.lang.ref.SoftReference +import java.net.JarURLConnection + +object KotlinAntTaskUtil { + private var classLoaderRef = SoftReference(null) + + synchronized fun getOrCreateClassLoader(): ClassLoader { + val cached = classLoaderRef.get() + if (cached != null) return cached + + val myLoader = javaClass.getClassLoader() + if (myLoader !is AntClassLoader) return myLoader + + // Find path of kotlin-ant.jar in the filesystem and find kotlin-compiler.jar in the same directory + val resourcePath = "/" + javaClass.getName().replace('.', '/') + ".class" + val jarConnection = javaClass.getResource(resourcePath).openConnection() as? JarURLConnection + ?: throw UnsupportedOperationException("Kotlin compiler Ant task should be loaded from the JAR file") + val antTaskJarPath = File(jarConnection.getJarFileURL().toURI()) + + val compilerJarPath = File(antTaskJarPath.getParent(), "kotlin-compiler.jar") + if (!compilerJarPath.exists()) { + throw IllegalStateException("kotlin-compiler.jar is not found in the directory of Kotlin Ant task") + } + + val classLoader = ClassPreloadingUtils.preloadClasses(listOf(compilerJarPath), 4096, myLoader, null) + classLoaderRef = SoftReference(classLoader) + + return classLoader + } +} diff --git a/ant/src/org/jetbrains/kotlin/ant/KotlinCompilerBaseTask.kt b/ant/src/org/jetbrains/kotlin/ant/KotlinCompilerBaseTask.kt index 172f7c53faf..1a0e37b7796 100644 --- a/ant/src/org/jetbrains/kotlin/ant/KotlinCompilerBaseTask.kt +++ b/ant/src/org/jetbrains/kotlin/ant/KotlinCompilerBaseTask.kt @@ -16,45 +16,13 @@ package org.jetbrains.kotlin.ant -import org.apache.tools.ant.AntClassLoader import org.apache.tools.ant.BuildException import org.apache.tools.ant.Task import org.apache.tools.ant.types.Commandline import org.apache.tools.ant.types.Path import org.apache.tools.ant.types.Reference -import org.jetbrains.kotlin.preloading.ClassPreloadingUtils import java.io.File import java.io.PrintStream -import java.lang.ref.SoftReference -import java.net.JarURLConnection - -object CompilerClassLoaderHolder { - private var classLoaderRef = SoftReference(null) - - synchronized fun getOrCreateClassLoader(): ClassLoader { - val cached = classLoaderRef.get() - if (cached != null) return cached - - val myLoader = javaClass.getClassLoader() - if (myLoader !is AntClassLoader) return myLoader - - // Find path of kotlin-ant.jar in the filesystem and find kotlin-compiler.jar in the same directory - val resourcePath = "/" + javaClass.getName().replace('.', '/') + ".class" - val jarConnection = javaClass.getResource(resourcePath).openConnection() as? JarURLConnection - ?: throw UnsupportedOperationException("Kotlin compiler Ant task should be loaded from the JAR file") - val antTaskJarPath = File(jarConnection.getJarFileURL().toURI()) - - val compilerJarPath = File(antTaskJarPath.getParent(), "kotlin-compiler.jar") - if (!compilerJarPath.exists()) { - throw IllegalStateException("kotlin-compiler.jar is not found in the directory of Kotlin Ant task") - } - - val classLoader = ClassPreloadingUtils.preloadClasses(listOf(compilerJarPath), 4096, myLoader, null) - classLoaderRef = SoftReference(classLoader) - - return classLoader - } -} public abstract class KotlinCompilerBaseTask : Task() { protected abstract val compilerFqName: String @@ -115,7 +83,7 @@ public abstract class KotlinCompilerBaseTask : Task() { final override fun execute() { fillArguments() - val compilerClass = CompilerClassLoaderHolder.getOrCreateClassLoader().loadClass(compilerFqName) + val compilerClass = KotlinAntTaskUtil.getOrCreateClassLoader().loadClass(compilerFqName) val compiler = compilerClass.newInstance() val exec = compilerClass.getMethod("execFullPathsInMessages", javaClass(), javaClass>())