From 85456bd6d8698772e025df7b9570eaf48d2dbb4b Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Mon, 26 Apr 2021 10:45:26 +0200 Subject: [PATCH] Add helper methods simplifying working with lazy properties from Kotlin. Just allow to write Kotlin code easier and nicer when using Gradle lazy properties. ^KT-45611 In Progress --- .../kotlin/gradle/utils/providerApiUtils.kt | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt index c49e977dcab..dc79725e1eb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.utils import org.gradle.api.Project import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.RegularFileProperty +import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import java.io.File @@ -37,6 +38,32 @@ internal fun Project.newProperty(initialize: (() -> T)? = null): Prope set(provider(initialize)) } +internal inline fun ObjectFactory.property() = property(T::class.java) + +internal inline fun ObjectFactory.property(initialValue: T) = property().value(initialValue) + +internal inline fun ObjectFactory.propertyWithConvention( + conventionValue: Provider +) = property().convention(conventionValue) + +internal inline fun ObjectFactory.propertyWithConvention( + conventionValue: T +) = property().convention(conventionValue) + +internal inline fun ObjectFactory.newInstance() = newInstance(T::class.java) + +internal inline fun ObjectFactory.propertyWithNewInstance( + vararg parameters: Any +) = propertyWithConvention(newInstance(T::class.java, parameters)) + +internal inline fun ObjectFactory.propertyWithNewInstance() = + propertyWithConvention(newInstance()) + +internal fun > T.chainedFinalizeValueOnRead(): T = + apply { + finalizeValueOnRead() + } + // Before 5.0 fileProperty is created via ProjectLayout // https://docs.gradle.org/current/javadoc/org/gradle/api/model/ObjectFactory.html#fileProperty-- internal fun Project.newFileProperty(initialize: (() -> File)? = null): RegularFileProperty {