[build] Use project lazy instead of global lazy

This commit is contained in:
Karlatemp 2023-04-05 13:10:47 +08:00
parent 460275fc0f
commit 0a60c5147e
No known key found for this signature in database
GPG Key ID: BA173CA2B9956C59
3 changed files with 38 additions and 6 deletions

View File

@ -45,6 +45,7 @@ plugins {
osDetector = osdetector
BuildSrcRootProjectHolder.value = rootProject
BuildSrcRootProjectHolder.lastUpdateTime = System.currentTimeMillis()
analyzes.CompiledCodeVerify.run { registerAllVerifyTasks() }

View File

@ -82,7 +82,7 @@ enum class HostArch {
/// eg. "!a;!b" means to enable all targets but a or b
/// eg. "a;b;!other" means to disable all targets but a or b
val ENABLED_TARGETS by lazy {
val ENABLED_TARGETS by projectLazy {
val targets = getMiraiTargetFromGradle() // enable all by default
@ -117,7 +117,7 @@ fun isTargetEnabled(name: String): Boolean {
fun Set<String>.filterTargets() =
this.filter { isTargetEnabled(it) }.toSet()
val MAC_TARGETS: Set<String> by lazy {
val MAC_TARGETS: Set<String> by projectLazy {
setOf(
// "watchosX86",
"macosX64",
@ -142,13 +142,13 @@ val MAC_TARGETS: Set<String> by lazy {
).filterTargets()
}
val WIN_TARGETS by lazy { setOf("mingwX64").filterTargets() }
val WIN_TARGETS by projectLazy { setOf("mingwX64").filterTargets() }
val LINUX_TARGETS by lazy { setOf("linuxX64").filterTargets() }
val LINUX_TARGETS by projectLazy { setOf("linuxX64").filterTargets() }
val UNIX_LIKE_TARGETS by lazy { LINUX_TARGETS + MAC_TARGETS }
val UNIX_LIKE_TARGETS by projectLazy { LINUX_TARGETS + MAC_TARGETS }
val NATIVE_TARGETS by lazy { UNIX_LIKE_TARGETS + WIN_TARGETS }
val NATIVE_TARGETS by projectLazy { UNIX_LIKE_TARGETS + WIN_TARGETS }
private val POSSIBLE_NATIVE_TARGETS by lazy { setOf("mingwX64", "macosX64", "macosArm64", "linuxX64") }

View File

@ -21,10 +21,41 @@ import java.util.*
object BuildSrcRootProjectHolder {
lateinit var value: Project
var lastUpdateTime: Long = 0
}
val rootProject: Project get() = BuildSrcRootProjectHolder.value
fun <T> projectLazy(action: () -> T): Lazy<T> {
val projLazy = object : Lazy<T> {
private lateinit var delegate: Lazy<T>
private var holdTime: Long = -1
override val value: T
get() {
if (holdTime != BuildSrcRootProjectHolder.lastUpdateTime) {
synchronized(this) {
if (holdTime != BuildSrcRootProjectHolder.lastUpdateTime) {
delegate = lazy(action)
holdTime = BuildSrcRootProjectHolder.lastUpdateTime
}
}
}
return delegate.value
}
override fun isInitialized(): Boolean {
if (!::delegate.isInitialized) return false
if (holdTime == BuildSrcRootProjectHolder.lastUpdateTime) {
return delegate.isInitialized()
}
return false
}
}
return projLazy
}
private lateinit var localProperties: Properties