[Gradle] Introduce ConfigurationTimePropertiesAccessor
#KT-53823 In Progress
This commit is contained in:
committed by
Space
parent
ad44ee8904
commit
9d8df8eb5e
+5
@@ -208,6 +208,11 @@ abstract class KotlinBasePluginWrapper : DefaultKotlinBasePlugin() {
|
|||||||
IdeaSyncDetector.IdeaSyncDetectorVariantFactory::class,
|
IdeaSyncDetector.IdeaSyncDetectorVariantFactory::class,
|
||||||
DefaultIdeaSyncDetectorVariantFactory()
|
DefaultIdeaSyncDetectorVariantFactory()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
factories.putIfAbsent(
|
||||||
|
ConfigurationTimePropertiesAccessor.ConfigurationTimePropertiesAccessorVariantFactory::class,
|
||||||
|
DefaultConfigurationTimePropertiesAccessorVariantFactory()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal open fun createTestRegistry(project: Project) = KotlinTestsRegistry(project)
|
internal open fun createTestRegistry(project: Project) = KotlinTestsRegistry(project)
|
||||||
|
|||||||
+45
@@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||||
|
|
||||||
|
import org.gradle.api.invocation.Gradle
|
||||||
|
import org.gradle.api.provider.Provider
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.variantImplementationFactory
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides unified safe way to read environmental properties via [Provider] at configuration time in terms of Gradle configuration cache feature
|
||||||
|
* Gradle 6.5 - 7.3 was requiring to explicitly mark such reads to be able to invalidate configuration cache entries on the value change.
|
||||||
|
* Gradle 7.4+ is able to automatically detect such reads without explicit declaration, thus method to declare a read was deprecated
|
||||||
|
*/
|
||||||
|
internal interface ConfigurationTimePropertiesAccessor {
|
||||||
|
fun <T> Provider<T>.usedAtConfigurationTime(): Provider<T>
|
||||||
|
|
||||||
|
interface ConfigurationTimePropertiesAccessorVariantFactory : VariantImplementationFactories.VariantImplementationFactory {
|
||||||
|
fun getInstance(): ConfigurationTimePropertiesAccessor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class DefaultConfigurationTimePropertiesAccessorVariantFactory :
|
||||||
|
ConfigurationTimePropertiesAccessor.ConfigurationTimePropertiesAccessorVariantFactory {
|
||||||
|
override fun getInstance(): ConfigurationTimePropertiesAccessor = DefaultConfigurationTimePropertiesAccessor()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No-op implementation for fresh Gradle versions since no declaration is required
|
||||||
|
*/
|
||||||
|
internal class DefaultConfigurationTimePropertiesAccessor : ConfigurationTimePropertiesAccessor {
|
||||||
|
override fun <T> Provider<T>.usedAtConfigurationTime(): Provider<T> = this
|
||||||
|
}
|
||||||
|
|
||||||
|
internal val Gradle.configurationTimePropertiesAccessor
|
||||||
|
get() = gradle
|
||||||
|
.variantImplementationFactory<ConfigurationTimePropertiesAccessor.ConfigurationTimePropertiesAccessorVariantFactory>()
|
||||||
|
.getInstance()
|
||||||
|
|
||||||
|
internal fun <T> Provider<T>.usedAtConfigurationTime(accessor: ConfigurationTimePropertiesAccessor) = with(accessor) {
|
||||||
|
usedAtConfigurationTime()
|
||||||
|
}
|
||||||
+2
@@ -143,4 +143,6 @@ private fun Project.registerVariantImplementations() {
|
|||||||
BasePluginConfigurationG70.BasePluginConfigurationVariantFactoryG70()
|
BasePluginConfigurationG70.BasePluginConfigurationVariantFactoryG70()
|
||||||
factories[IdeaSyncDetector.IdeaSyncDetectorVariantFactory::class] =
|
factories[IdeaSyncDetector.IdeaSyncDetectorVariantFactory::class] =
|
||||||
IdeaSyncDetectorG70.IdeaSyncDetectorVariantFactoryG70()
|
IdeaSyncDetectorG70.IdeaSyncDetectorVariantFactoryG70()
|
||||||
|
factories[ConfigurationTimePropertiesAccessor.ConfigurationTimePropertiesAccessorVariantFactory::class] =
|
||||||
|
ConfigurationTimePropertiesAccessorG70.ConfigurationTimePropertiesAccessorVariantFactoryG70()
|
||||||
}
|
}
|
||||||
|
|||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||||
|
|
||||||
|
import org.gradle.api.provider.Provider
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Declares environmental property read with [Provider.forUseAtConfigurationTime]
|
||||||
|
*/
|
||||||
|
internal class ConfigurationTimePropertiesAccessorG70 : ConfigurationTimePropertiesAccessor {
|
||||||
|
internal class ConfigurationTimePropertiesAccessorVariantFactoryG70 :
|
||||||
|
ConfigurationTimePropertiesAccessor.ConfigurationTimePropertiesAccessorVariantFactory {
|
||||||
|
override fun getInstance(): ConfigurationTimePropertiesAccessor = ConfigurationTimePropertiesAccessorG70()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <T> Provider<T>.usedAtConfigurationTime(): Provider<T> = forUseAtConfigurationTime()
|
||||||
|
}
|
||||||
+4
@@ -12,6 +12,8 @@ import org.gradle.api.Project
|
|||||||
import org.gradle.api.file.SourceDirectorySet
|
import org.gradle.api.file.SourceDirectorySet
|
||||||
import org.gradle.api.model.ObjectFactory
|
import org.gradle.api.model.ObjectFactory
|
||||||
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
|
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.internal.ConfigurationTimePropertiesAccessor
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.internal.ConfigurationTimePropertiesAccessorG71
|
||||||
import org.jetbrains.kotlin.gradle.plugin.internal.IdeaSyncDetector
|
import org.jetbrains.kotlin.gradle.plugin.internal.IdeaSyncDetector
|
||||||
import org.jetbrains.kotlin.gradle.plugin.internal.IdeaSyncDetectorG71
|
import org.jetbrains.kotlin.gradle.plugin.internal.IdeaSyncDetectorG71
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@@ -143,4 +145,6 @@ private fun Project.registerVariantImplementations() {
|
|||||||
val factories = VariantImplementationFactories.get(gradle)
|
val factories = VariantImplementationFactories.get(gradle)
|
||||||
factories[IdeaSyncDetector.IdeaSyncDetectorVariantFactory::class] =
|
factories[IdeaSyncDetector.IdeaSyncDetectorVariantFactory::class] =
|
||||||
IdeaSyncDetectorG71.IdeaSyncDetectorVariantFactoryG71()
|
IdeaSyncDetectorG71.IdeaSyncDetectorVariantFactoryG71()
|
||||||
|
factories[ConfigurationTimePropertiesAccessor.ConfigurationTimePropertiesAccessorVariantFactory::class] =
|
||||||
|
ConfigurationTimePropertiesAccessorG71.ConfigurationTimePropertiesAccessorVariantFactoryG71()
|
||||||
}
|
}
|
||||||
|
|||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||||
|
|
||||||
|
import org.gradle.api.provider.Provider
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Declares environmental property read with [Provider.forUseAtConfigurationTime]
|
||||||
|
*/
|
||||||
|
internal class ConfigurationTimePropertiesAccessorG71 : ConfigurationTimePropertiesAccessor {
|
||||||
|
internal class ConfigurationTimePropertiesAccessorVariantFactoryG71 :
|
||||||
|
ConfigurationTimePropertiesAccessor.ConfigurationTimePropertiesAccessorVariantFactory {
|
||||||
|
override fun getInstance(): ConfigurationTimePropertiesAccessor = ConfigurationTimePropertiesAccessorG71()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <T> Provider<T>.usedAtConfigurationTime(): Provider<T> = forUseAtConfigurationTime()
|
||||||
|
}
|
||||||
+2
@@ -149,4 +149,6 @@ private fun Project.registerVariantImplementations() {
|
|||||||
BasePluginConfigurationG6.BasePluginConfigurationVariantFactoryG6()
|
BasePluginConfigurationG6.BasePluginConfigurationVariantFactoryG6()
|
||||||
factories[IdeaSyncDetector.IdeaSyncDetectorVariantFactory::class] =
|
factories[IdeaSyncDetector.IdeaSyncDetectorVariantFactory::class] =
|
||||||
IdeaSyncDetectorG6.IdeaSyncDetectorVariantFactoryG6()
|
IdeaSyncDetectorG6.IdeaSyncDetectorVariantFactoryG6()
|
||||||
|
factories[ConfigurationTimePropertiesAccessor.ConfigurationTimePropertiesAccessorVariantFactory::class] =
|
||||||
|
ConfigurationTimePropertiesAccessorG6.ConfigurationTimePropertiesAccessorVariantFactoryG6()
|
||||||
}
|
}
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.plugin.internal
|
||||||
|
|
||||||
|
import org.gradle.api.provider.Provider
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Declares environmental property read with [Provider.forUseAtConfigurationTime]
|
||||||
|
*/
|
||||||
|
internal class ConfigurationTimePropertiesAccessorG6 : ConfigurationTimePropertiesAccessor {
|
||||||
|
internal class ConfigurationTimePropertiesAccessorVariantFactoryG6 :
|
||||||
|
ConfigurationTimePropertiesAccessor.ConfigurationTimePropertiesAccessorVariantFactory {
|
||||||
|
override fun getInstance(): ConfigurationTimePropertiesAccessor = ConfigurationTimePropertiesAccessorG6()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <T> Provider<T>.usedAtConfigurationTime(): Provider<T> = forUseAtConfigurationTime()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user