[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,
|
||||
DefaultIdeaSyncDetectorVariantFactory()
|
||||
)
|
||||
|
||||
factories.putIfAbsent(
|
||||
ConfigurationTimePropertiesAccessor.ConfigurationTimePropertiesAccessorVariantFactory::class,
|
||||
DefaultConfigurationTimePropertiesAccessorVariantFactory()
|
||||
)
|
||||
}
|
||||
|
||||
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()
|
||||
factories[IdeaSyncDetector.IdeaSyncDetectorVariantFactory::class] =
|
||||
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.model.ObjectFactory
|
||||
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.IdeaSyncDetectorG71
|
||||
import javax.inject.Inject
|
||||
@@ -143,4 +145,6 @@ private fun Project.registerVariantImplementations() {
|
||||
val factories = VariantImplementationFactories.get(gradle)
|
||||
factories[IdeaSyncDetector.IdeaSyncDetectorVariantFactory::class] =
|
||||
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()
|
||||
factories[IdeaSyncDetector.IdeaSyncDetectorVariantFactory::class] =
|
||||
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