From 8ddbf542f3781c5a9d050c54dc9f05592074b995 Mon Sep 17 00:00:00 2001 From: Alexander Likhachev Date: Tue, 27 Apr 2021 05:46:50 +0300 Subject: [PATCH] [Gradle] Declare IDEA-related system properties reads #KT-44611 In Progress --- .../org/jetbrains/kotlin/gradle/internal/idea.kt | 11 +++++++---- .../targets/js/npm/KotlinNpmResolutionManager.kt | 5 +++-- .../gradle/testing/internal/KotlinTestsRegistry.kt | 7 ++----- .../kotlin/gradle/utils/configurationCache.kt | 11 ++++++++++- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/idea.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/idea.kt index 5025f3564e2..17bae3e574e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/idea.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/idea.kt @@ -5,18 +5,21 @@ package org.jetbrains.kotlin.gradle.internal -internal val isInIdeaSync: Boolean +import org.gradle.api.Project +import org.jetbrains.kotlin.gradle.utils.getSystemProperty + +internal val Project.isInIdeaSync: Boolean get() { // "idea.sync.active" was introduced in 2019.1 - if (System.getProperty("idea.sync.active")?.toBoolean() == true) return true + if (getSystemProperty("idea.sync.active")?.toBoolean() == true) return true // before 2019.1 there is "idea.active" that was true only on sync, // but since 2019.1 "idea.active" present in task execution too. // So let's check Idea version - val majorIdeaVersion = System.getProperty("idea.version") + val majorIdeaVersion = getSystemProperty("idea.version") ?.split(".") ?.getOrNull(0) val isBeforeIdea2019 = majorIdeaVersion == null || majorIdeaVersion.toInt() < 2019 - return isBeforeIdea2019 && System.getProperty("idea.active")?.toBoolean() == true + return isBeforeIdea2019 && getSystemProperty("idea.active")?.toBoolean() == true } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt index 5241656458a..b10eff870e0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt @@ -81,8 +81,9 @@ import java.io.File * Note that in this case resolution process will be performed outside of task execution. */ class KotlinNpmResolutionManager(private val nodeJsSettings: NodeJsRootExtension) { - private val forceFullResolve: Boolean - get() = isInIdeaSync + private val forceFullResolve: Boolean by lazy { + nodeJsSettings.rootProject.isInIdeaSync + } internal val resolver = KotlinRootNpmResolver(nodeJsSettings, forceFullResolve) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestsRegistry.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestsRegistry.kt index 09c40c2f966..c54a8ffdc19 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestsRegistry.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestsRegistry.kt @@ -14,6 +14,7 @@ import org.gradle.language.base.plugins.LifecycleBasePlugin import org.jetbrains.kotlin.gradle.tasks.dependsOn import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.tasks.locateTask +import org.jetbrains.kotlin.gradle.utils.getSystemProperty import org.jetbrains.kotlin.gradle.utils.isConfigurationCacheAvailable /** @@ -72,11 +73,7 @@ class KotlinTestsRegistry(val project: Project, val allTestsTaskName: String = " aggregate.destinationDir = project.testReportsDir.resolve(reportName) - val isIdeaActive = if (isConfigurationCacheAvailable(project.gradle)) { - project.providers.systemProperty("idea.active").forUseAtConfigurationTime().isPresent - } else { - System.getProperty("idea.active") != null - } + val isIdeaActive = project.getSystemProperty("idea.active") != null if (isIdeaActive) { aggregate.extensions.extraProperties.set("idea.internal.test", true) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/configurationCache.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/configurationCache.kt index 022c1a9d4e9..c8909b7d2d7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/configurationCache.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/configurationCache.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle.utils +import org.gradle.api.Project import org.gradle.api.invocation.Gradle internal fun isConfigurationCacheAvailable(gradle: Gradle) = @@ -13,4 +14,12 @@ internal fun isConfigurationCacheAvailable(gradle: Gradle) = startParameters.javaClass.getMethod("isConfigurationCache").invoke(startParameters) as? Boolean } catch (_: Exception) { null - } ?: false \ No newline at end of file + } ?: false + +internal fun Project.getSystemProperty(key: String): String? { + return if (isConfigurationCacheAvailable(gradle)) { + providers.systemProperty(key).forUseAtConfigurationTime().orNull + } else { + System.getProperty(key) + } +} \ No newline at end of file