Move JPS-related kotlin-home detection code to jps-plugin
This commit is contained in:
@@ -24,8 +24,6 @@ import java.io.File
|
||||
import java.util.regex.Pattern
|
||||
|
||||
object PathUtil {
|
||||
const val JPS_KOTLIN_HOME_PROPERTY = "jps.kotlin.home"
|
||||
|
||||
const val JS_LIB_JAR_NAME = "kotlin-stdlib-js.jar"
|
||||
const val JS_LIB_10_JAR_NAME = "kotlin-jslib.jar"
|
||||
const val ALLOPEN_PLUGIN_JAR_NAME = "allopen-compiler-plugin.jar"
|
||||
@@ -53,7 +51,7 @@ object PathUtil {
|
||||
val KOTLIN_STDLIB_JS_JAR_PATTERN: Pattern = Pattern.compile("kotlin-stdlib-js.*\\.jar")
|
||||
val KOTLIN_JS_LIBRARY_JAR_PATTERN: Pattern = Pattern.compile("kotlin-js-library.*\\.jar")
|
||||
|
||||
private const val HOME_FOLDER_NAME = "kotlinc"
|
||||
const val HOME_FOLDER_NAME = "kotlinc"
|
||||
private val NO_PATH = File("<no_path>")
|
||||
|
||||
@JvmStatic
|
||||
@@ -63,23 +61,6 @@ object PathUtil {
|
||||
else
|
||||
KotlinPathsFromHomeDir(compilerPathForIdeaPlugin)
|
||||
|
||||
// When JPS is run on TeamCity, it can not rely on Kotlin plugin layout,
|
||||
// so the path to Kotlin is specified in a system property
|
||||
private val kotlinPathsForJpsPlugin: KotlinPaths
|
||||
get() {
|
||||
val jpsKotlinHome = System.getProperty(JPS_KOTLIN_HOME_PROPERTY)
|
||||
return if (jpsKotlinHome != null) {
|
||||
KotlinPathsFromHomeDir(File(jpsKotlinHome))
|
||||
}
|
||||
else KotlinPathsFromHomeDir(compilerPathForJpsPlugin)
|
||||
}
|
||||
|
||||
val kotlinPathsForJpsPluginOrJpsTests: KotlinPaths
|
||||
get() = if ("true".equals(System.getProperty("kotlin.jps.tests"), ignoreCase = true)) {
|
||||
kotlinPathsForDistDirectory
|
||||
}
|
||||
else kotlinPathsForJpsPlugin
|
||||
|
||||
@JvmStatic
|
||||
val kotlinPathsForCompiler: KotlinPaths
|
||||
get() = if (!pathUtilJar.isFile) {
|
||||
@@ -105,19 +86,6 @@ object PathUtil {
|
||||
return NO_PATH
|
||||
}
|
||||
|
||||
private val compilerPathForJpsPlugin: File
|
||||
get() {
|
||||
val jar = pathUtilJar
|
||||
if (!jar.exists()) return NO_PATH
|
||||
|
||||
if (jar.name == "kotlin-jps-plugin.jar") {
|
||||
val pluginHome = jar.parentFile.parentFile.parentFile
|
||||
return File(pluginHome, HOME_FOLDER_NAME)
|
||||
}
|
||||
|
||||
return NO_PATH
|
||||
}
|
||||
|
||||
private val compilerPathForIdeaPlugin: File
|
||||
get() {
|
||||
val jar = pathUtilJar
|
||||
|
||||
@@ -16,28 +16,18 @@
|
||||
|
||||
package org.jetbrains.kotlin.compilerRunner
|
||||
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.ERROR
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.config.Services
|
||||
import org.jetbrains.kotlin.preloading.ClassCondition
|
||||
import org.jetbrains.kotlin.utils.KotlinPaths
|
||||
import org.jetbrains.kotlin.utils.PathUtil
|
||||
|
||||
class JpsCompilerEnvironment(
|
||||
val kotlinPaths: KotlinPaths,
|
||||
services: Services,
|
||||
val classesToLoadByParent: ClassCondition,
|
||||
messageCollector: MessageCollector,
|
||||
override val outputItemsCollector: OutputItemsCollectorImpl
|
||||
outputItemsCollector: OutputItemsCollectorImpl
|
||||
) : CompilerEnvironment(services, messageCollector, outputItemsCollector) {
|
||||
fun success(): Boolean {
|
||||
return kotlinPaths.homePath.exists()
|
||||
}
|
||||
|
||||
fun reportErrorsTo(messageCollector: MessageCollector) {
|
||||
if (!kotlinPaths.homePath.exists()) {
|
||||
messageCollector.report(ERROR, "Cannot find kotlinc home: " + kotlinPaths.homePath + ". Make sure plugin is properly installed, " +
|
||||
"or specify " + PathUtil.JPS_KOTLIN_HOME_PROPERTY + " system property")
|
||||
}
|
||||
}
|
||||
override val outputItemsCollector: OutputItemsCollectorImpl
|
||||
get() = super.outputItemsCollector as OutputItemsCollectorImpl
|
||||
}
|
||||
|
||||
@@ -68,9 +68,7 @@ import org.jetbrains.kotlin.modules.TargetId
|
||||
import org.jetbrains.kotlin.preloading.ClassCondition
|
||||
import org.jetbrains.kotlin.progress.CompilationCanceledException
|
||||
import org.jetbrains.kotlin.progress.CompilationCanceledStatus
|
||||
import org.jetbrains.kotlin.utils.JsLibraryUtils
|
||||
import org.jetbrains.kotlin.utils.PathUtil
|
||||
import org.jetbrains.kotlin.utils.keysToMap
|
||||
import org.jetbrains.kotlin.utils.*
|
||||
import org.jetbrains.org.objectweb.asm.ClassReader
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
@@ -82,6 +80,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
||||
val LOG = Logger.getInstance("#org.jetbrains.kotlin.jps.build.KotlinBuilder")
|
||||
const val JVM_BUILD_META_INFO_FILE_NAME = "jvm-build-meta-info.txt"
|
||||
const val SKIP_CACHE_VERSION_CHECK_PROPERTY = "kotlin.jps.skip.cache.version.check"
|
||||
const val JPS_KOTLIN_HOME_PROPERTY = "jps.kotlin.home"
|
||||
}
|
||||
|
||||
private val statisticsLogger = TeamcityStatisticsLogger()
|
||||
@@ -243,11 +242,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
||||
val project = projectDescriptor.project
|
||||
val lookupTracker = getLookupTracker(project)
|
||||
val incrementalCaches = getIncrementalCaches(chunk, context)
|
||||
val environment = createCompileEnvironment(incrementalCaches, lookupTracker, context, messageCollector)
|
||||
if (!environment.success()) {
|
||||
environment.reportErrorsTo(messageCollector)
|
||||
return ABORT
|
||||
}
|
||||
val environment = createCompileEnvironment(incrementalCaches, lookupTracker, context, messageCollector) ?: return ABORT
|
||||
|
||||
val commonArguments = compilerArgumentsForChunk(chunk).apply {
|
||||
reportOutputFiles = true
|
||||
@@ -458,7 +453,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
||||
lookupTracker: LookupTracker,
|
||||
context: CompileContext,
|
||||
messageCollector: MessageCollectorAdapter
|
||||
): JpsCompilerEnvironment {
|
||||
): JpsCompilerEnvironment? {
|
||||
val compilerServices = with(Services.Builder()) {
|
||||
register(IncrementalCompilationComponents::class.java,
|
||||
IncrementalCompilationComponentsImpl(incrementalCaches.mapKeys { TargetId(it.key) },
|
||||
@@ -471,8 +466,15 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
||||
build()
|
||||
}
|
||||
|
||||
val paths = computeKotlinPathsForJpsPlugin()
|
||||
if (paths == null || !paths.homePath.exists()) {
|
||||
messageCollector.report(ERROR, "Cannot find kotlinc home. Make sure the plugin is properly installed, " +
|
||||
"or specify $JPS_KOTLIN_HOME_PROPERTY system property")
|
||||
return null
|
||||
}
|
||||
|
||||
return JpsCompilerEnvironment(
|
||||
PathUtil.kotlinPathsForJpsPluginOrJpsTests,
|
||||
paths,
|
||||
compilerServices,
|
||||
ClassCondition { className ->
|
||||
className.startsWith("org.jetbrains.kotlin.load.kotlin.incremental.components.")
|
||||
@@ -488,6 +490,27 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
||||
)
|
||||
}
|
||||
|
||||
// When JPS is run on TeamCity, it can not rely on Kotlin plugin layout,
|
||||
// so the path to Kotlin is specified in a system property
|
||||
private fun computeKotlinPathsForJpsPlugin(): KotlinPaths? {
|
||||
if (System.getProperty("kotlin.jps.tests").equals("true", ignoreCase = true)) {
|
||||
return PathUtil.kotlinPathsForDistDirectory
|
||||
}
|
||||
|
||||
val jpsKotlinHome = System.getProperty(JPS_KOTLIN_HOME_PROPERTY)
|
||||
if (jpsKotlinHome != null) {
|
||||
return KotlinPathsFromHomeDir(File(jpsKotlinHome))
|
||||
}
|
||||
|
||||
val jar = PathUtil.pathUtilJar.takeIf(File::exists)
|
||||
if (jar?.name == "kotlin-jps-plugin.jar") {
|
||||
val pluginHome = jar.parentFile.parentFile.parentFile
|
||||
return KotlinPathsFromHomeDir(File(pluginHome, PathUtil.HOME_FOLDER_NAME))
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
private fun getGeneratedFiles(
|
||||
chunk: ModuleChunk,
|
||||
outputItemCollector: OutputItemsCollectorImpl
|
||||
|
||||
Reference in New Issue
Block a user