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
|
import java.util.regex.Pattern
|
||||||
|
|
||||||
object PathUtil {
|
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_JAR_NAME = "kotlin-stdlib-js.jar"
|
||||||
const val JS_LIB_10_JAR_NAME = "kotlin-jslib.jar"
|
const val JS_LIB_10_JAR_NAME = "kotlin-jslib.jar"
|
||||||
const val ALLOPEN_PLUGIN_JAR_NAME = "allopen-compiler-plugin.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_STDLIB_JS_JAR_PATTERN: Pattern = Pattern.compile("kotlin-stdlib-js.*\\.jar")
|
||||||
val KOTLIN_JS_LIBRARY_JAR_PATTERN: Pattern = Pattern.compile("kotlin-js-library.*\\.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>")
|
private val NO_PATH = File("<no_path>")
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@@ -63,23 +61,6 @@ object PathUtil {
|
|||||||
else
|
else
|
||||||
KotlinPathsFromHomeDir(compilerPathForIdeaPlugin)
|
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
|
@JvmStatic
|
||||||
val kotlinPathsForCompiler: KotlinPaths
|
val kotlinPathsForCompiler: KotlinPaths
|
||||||
get() = if (!pathUtilJar.isFile) {
|
get() = if (!pathUtilJar.isFile) {
|
||||||
@@ -105,19 +86,6 @@ object PathUtil {
|
|||||||
return NO_PATH
|
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
|
private val compilerPathForIdeaPlugin: File
|
||||||
get() {
|
get() {
|
||||||
val jar = pathUtilJar
|
val jar = pathUtilJar
|
||||||
|
|||||||
@@ -16,28 +16,18 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.compilerRunner
|
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.cli.common.messages.MessageCollector
|
||||||
import org.jetbrains.kotlin.config.Services
|
import org.jetbrains.kotlin.config.Services
|
||||||
import org.jetbrains.kotlin.preloading.ClassCondition
|
import org.jetbrains.kotlin.preloading.ClassCondition
|
||||||
import org.jetbrains.kotlin.utils.KotlinPaths
|
import org.jetbrains.kotlin.utils.KotlinPaths
|
||||||
import org.jetbrains.kotlin.utils.PathUtil
|
|
||||||
|
|
||||||
class JpsCompilerEnvironment(
|
class JpsCompilerEnvironment(
|
||||||
val kotlinPaths: KotlinPaths,
|
val kotlinPaths: KotlinPaths,
|
||||||
services: Services,
|
services: Services,
|
||||||
val classesToLoadByParent: ClassCondition,
|
val classesToLoadByParent: ClassCondition,
|
||||||
messageCollector: MessageCollector,
|
messageCollector: MessageCollector,
|
||||||
override val outputItemsCollector: OutputItemsCollectorImpl
|
outputItemsCollector: OutputItemsCollectorImpl
|
||||||
) : CompilerEnvironment(services, messageCollector, outputItemsCollector) {
|
) : CompilerEnvironment(services, messageCollector, outputItemsCollector) {
|
||||||
fun success(): Boolean {
|
override val outputItemsCollector: OutputItemsCollectorImpl
|
||||||
return kotlinPaths.homePath.exists()
|
get() = super.outputItemsCollector as OutputItemsCollectorImpl
|
||||||
}
|
|
||||||
|
|
||||||
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")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,9 +68,7 @@ import org.jetbrains.kotlin.modules.TargetId
|
|||||||
import org.jetbrains.kotlin.preloading.ClassCondition
|
import org.jetbrains.kotlin.preloading.ClassCondition
|
||||||
import org.jetbrains.kotlin.progress.CompilationCanceledException
|
import org.jetbrains.kotlin.progress.CompilationCanceledException
|
||||||
import org.jetbrains.kotlin.progress.CompilationCanceledStatus
|
import org.jetbrains.kotlin.progress.CompilationCanceledStatus
|
||||||
import org.jetbrains.kotlin.utils.JsLibraryUtils
|
import org.jetbrains.kotlin.utils.*
|
||||||
import org.jetbrains.kotlin.utils.PathUtil
|
|
||||||
import org.jetbrains.kotlin.utils.keysToMap
|
|
||||||
import org.jetbrains.org.objectweb.asm.ClassReader
|
import org.jetbrains.org.objectweb.asm.ClassReader
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -82,6 +80,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
|||||||
val LOG = Logger.getInstance("#org.jetbrains.kotlin.jps.build.KotlinBuilder")
|
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 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 SKIP_CACHE_VERSION_CHECK_PROPERTY = "kotlin.jps.skip.cache.version.check"
|
||||||
|
const val JPS_KOTLIN_HOME_PROPERTY = "jps.kotlin.home"
|
||||||
}
|
}
|
||||||
|
|
||||||
private val statisticsLogger = TeamcityStatisticsLogger()
|
private val statisticsLogger = TeamcityStatisticsLogger()
|
||||||
@@ -243,11 +242,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
|||||||
val project = projectDescriptor.project
|
val project = projectDescriptor.project
|
||||||
val lookupTracker = getLookupTracker(project)
|
val lookupTracker = getLookupTracker(project)
|
||||||
val incrementalCaches = getIncrementalCaches(chunk, context)
|
val incrementalCaches = getIncrementalCaches(chunk, context)
|
||||||
val environment = createCompileEnvironment(incrementalCaches, lookupTracker, context, messageCollector)
|
val environment = createCompileEnvironment(incrementalCaches, lookupTracker, context, messageCollector) ?: return ABORT
|
||||||
if (!environment.success()) {
|
|
||||||
environment.reportErrorsTo(messageCollector)
|
|
||||||
return ABORT
|
|
||||||
}
|
|
||||||
|
|
||||||
val commonArguments = compilerArgumentsForChunk(chunk).apply {
|
val commonArguments = compilerArgumentsForChunk(chunk).apply {
|
||||||
reportOutputFiles = true
|
reportOutputFiles = true
|
||||||
@@ -458,7 +453,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
|||||||
lookupTracker: LookupTracker,
|
lookupTracker: LookupTracker,
|
||||||
context: CompileContext,
|
context: CompileContext,
|
||||||
messageCollector: MessageCollectorAdapter
|
messageCollector: MessageCollectorAdapter
|
||||||
): JpsCompilerEnvironment {
|
): JpsCompilerEnvironment? {
|
||||||
val compilerServices = with(Services.Builder()) {
|
val compilerServices = with(Services.Builder()) {
|
||||||
register(IncrementalCompilationComponents::class.java,
|
register(IncrementalCompilationComponents::class.java,
|
||||||
IncrementalCompilationComponentsImpl(incrementalCaches.mapKeys { TargetId(it.key) },
|
IncrementalCompilationComponentsImpl(incrementalCaches.mapKeys { TargetId(it.key) },
|
||||||
@@ -471,8 +466,15 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
|||||||
build()
|
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(
|
return JpsCompilerEnvironment(
|
||||||
PathUtil.kotlinPathsForJpsPluginOrJpsTests,
|
paths,
|
||||||
compilerServices,
|
compilerServices,
|
||||||
ClassCondition { className ->
|
ClassCondition { className ->
|
||||||
className.startsWith("org.jetbrains.kotlin.load.kotlin.incremental.components.")
|
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(
|
private fun getGeneratedFiles(
|
||||||
chunk: ModuleChunk,
|
chunk: ModuleChunk,
|
||||||
outputItemCollector: OutputItemsCollectorImpl
|
outputItemCollector: OutputItemsCollectorImpl
|
||||||
|
|||||||
Reference in New Issue
Block a user