[Gradle] Demote ExtrasProperty APIs with little usage

Those APIs can either be replaced with StoredProperty
Some APIs also have shown to be 'hard to understand'

KT-61634
This commit is contained in:
Sebastian Sellmair
2023-10-13 11:13:46 +02:00
committed by Space Team
parent 242c1cf5f0
commit 08241acb6f
2 changed files with 86 additions and 56 deletions
@@ -2,6 +2,7 @@
* 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.
*/
@file:Suppress("DeprecatedCallableAddReplaceWith")
package org.jetbrains.kotlin.tooling.core
@@ -14,72 +15,30 @@ interface ExtrasProperty<T : Any> {
val key: Extras.Key<T>
}
val <T : Any> Extras.Key<T>.readProperty get() = extrasReadProperty(this)
val <T : Any> Extras.Key<T>.readWriteProperty get() = extrasReadWriteProperty(this)
fun <T : Any> Extras.Key<T>.factoryProperty(factory: () -> T) = extrasFactoryProperty(this, factory)
fun <Receiver : HasMutableExtras, T : Any> Extras.Key<T>.lazyProperty(factory: Receiver.() -> T) = extrasLazyProperty(this, factory)
fun <Receiver : HasMutableExtras, T : Any> Extras.Key<Optional<T>>.nullableLazyProperty(factory: Receiver.() -> T?) =
extrasNullableLazyProperty(this, factory)
fun <T : Any> extrasReadProperty(key: Extras.Key<T>): ExtrasReadOnlyProperty<T> = object : ExtrasReadOnlyProperty<T> {
override val key: Extras.Key<T> = key
}
fun <T : Any> extrasReadWriteProperty(key: Extras.Key<T>): ExtrasReadWriteProperty<T> = object : ExtrasReadWriteProperty<T> {
override val key: Extras.Key<T> = key
}
fun <T : Any> extrasFactoryProperty(key: Extras.Key<T>, factory: () -> T) = object : ExtrasFactoryProperty<T> {
override val key: Extras.Key<T> = key
override val factory: () -> T = factory
}
fun <Receiver : HasMutableExtras, T : Any> extrasLazyProperty(
key: Extras.Key<T>, factory: Receiver.() -> T
key: Extras.Key<T>, factory: Receiver.() -> T,
): ExtrasLazyProperty<Receiver, T> =
object : ExtrasLazyProperty<Receiver, T> {
override val key: Extras.Key<T> = key
override val factory: Receiver.() -> T = factory
}
fun <Receiver : HasMutableExtras, T : Any> extrasNullableLazyProperty(
key: Extras.Key<Optional<T>>, factory: Receiver.() -> T?
): NullableExtrasLazyProperty<Receiver, T> =
object : NullableExtrasLazyProperty<Receiver, T> {
override val key: Extras.Key<Optional<T>> = key
override val factory: Receiver.() -> T? = factory
}
inline fun <reified T : Any> extrasReadWriteProperty(name: String? = null) =
extrasReadWriteProperty(extrasKeyOf<T>(name))
inline fun <reified T : Any> extrasReadProperty(name: String? = null) =
extrasReadProperty(extrasKeyOf<T>(name))
inline fun <reified T : Any> extrasFactoryProperty(name: String? = null, noinline factory: () -> T) =
extrasFactoryProperty(extrasKeyOf(name), factory)
inline fun <Receiver : HasMutableExtras, reified T : Any> extrasLazyProperty(name: String? = null, noinline factory: Receiver.() -> T) =
extrasLazyProperty(extrasKeyOf(name), factory)
inline fun <Receiver : HasMutableExtras, reified T : Any> extrasNullableLazyProperty(
name: String? = null, noinline factory: Receiver.() -> T?
) = extrasNullableLazyProperty(extrasKeyOf(name), factory)
interface ExtrasReadOnlyProperty<T : Any> : ExtrasProperty<T>, ReadOnlyProperty<HasExtras, T?> {
override fun getValue(thisRef: HasExtras, property: KProperty<*>): T? {
return thisRef.extras[key]
}
fun notNull(defaultValue: T): NotNullExtrasReadOnlyProperty<T> = object : NotNullExtrasReadOnlyProperty<T> {
override val defaultValue: T = defaultValue
override val key: Extras.Key<T> = this@ExtrasReadOnlyProperty.key
}
}
interface NotNullExtrasReadOnlyProperty<T : Any> : ExtrasProperty<T>, ReadOnlyProperty<HasExtras, T> {
val defaultValue: T
@@ -117,18 +76,6 @@ interface NotNullExtrasReadWriteProperty<T : Any> : ExtrasProperty<T>, ReadWrite
}
}
interface ExtrasFactoryProperty<T : Any> : ExtrasProperty<T>, ReadWriteProperty<HasMutableExtras, T> {
val factory: () -> T
override fun getValue(thisRef: HasMutableExtras, property: KProperty<*>): T {
return thisRef.extras.getOrPut(key, factory)
}
override fun setValue(thisRef: HasMutableExtras, property: KProperty<*>, value: T) {
thisRef.extras[key] = value
}
}
interface ExtrasLazyProperty<Receiver : HasMutableExtras, T : Any> : ExtrasProperty<T>, ReadWriteProperty<Receiver, T> {
val factory: Receiver.() -> T
@@ -141,6 +88,89 @@ interface ExtrasLazyProperty<Receiver : HasMutableExtras, T : Any> : ExtrasPrope
}
}
/*
DEPRECATED APIs
*/
@Deprecated("Scheduled for removal in Kotlin 2.2")
@Suppress("DEPRECATION")
val <T : Any> Extras.Key<T>.readProperty get() = extrasReadProperty(this)
@Deprecated("Scheduled for removal in Kotlin 2.2")
@Suppress("DEPRECATION")
fun <T : Any> Extras.Key<T>.factoryProperty(factory: () -> T) = extrasFactoryProperty(this, factory)
@Deprecated("Scheduled for removal in Kotlin 2.2")
@Suppress("DEPRECATION")
fun <Receiver : HasMutableExtras, T : Any> Extras.Key<Optional<T>>.nullableLazyProperty(factory: Receiver.() -> T?) =
extrasNullableLazyProperty(this, factory)
@Deprecated("Scheduled for removal in Kotlin 2.2")
@Suppress("DEPRECATION")
fun <T : Any> extrasReadProperty(key: Extras.Key<T>): ExtrasReadOnlyProperty<T> = object : ExtrasReadOnlyProperty<T> {
override val key: Extras.Key<T> = key
}
@Deprecated("Scheduled for removal in Kotlin 2.2")
@Suppress("DEPRECATION")
fun <T : Any> extrasFactoryProperty(key: Extras.Key<T>, factory: () -> T) = object : ExtrasFactoryProperty<T> {
override val key: Extras.Key<T> = key
override val factory: () -> T = factory
}
@Deprecated("Scheduled for removal in Kotlin 2.2")
@Suppress("DEPRECATION")
fun <Receiver : HasMutableExtras, T : Any> extrasNullableLazyProperty(
key: Extras.Key<Optional<T>>, factory: Receiver.() -> T?,
): NullableExtrasLazyProperty<Receiver, T> =
object : NullableExtrasLazyProperty<Receiver, T> {
override val key: Extras.Key<Optional<T>> = key
override val factory: Receiver.() -> T? = factory
}
@Deprecated("Scheduled for removal in Kotlin 2.2")
@Suppress("DEPRECATION", "UNUSED")
inline fun <reified T : Any> extrasReadProperty(name: String? = null) =
extrasReadProperty(extrasKeyOf<T>(name))
@Deprecated("Scheduled for removal in Kotlin 2.2")
@Suppress("DEPRECATION", "UNUSED")
inline fun <reified T : Any> extrasFactoryProperty(name: String? = null, noinline factory: () -> T) =
extrasFactoryProperty(extrasKeyOf(name), factory)
@Deprecated("Scheduled for removal in Kotlin 2.2")
@Suppress("DEPRECATION", "DeprecatedCallableAddReplaceWith")
inline fun <Receiver : HasMutableExtras, reified T : Any> extrasNullableLazyProperty(
name: String? = null, noinline factory: Receiver.() -> T?,
) = extrasNullableLazyProperty(extrasKeyOf(name), factory)
@Deprecated("Scheduled for removal in Kotlin 2.2")
interface ExtrasReadOnlyProperty<T : Any> : ExtrasProperty<T>, ReadOnlyProperty<HasExtras, T?> {
override fun getValue(thisRef: HasExtras, property: KProperty<*>): T? {
return thisRef.extras[key]
}
fun notNull(defaultValue: T): NotNullExtrasReadOnlyProperty<T> = object : NotNullExtrasReadOnlyProperty<T> {
override val defaultValue: T = defaultValue
override val key: Extras.Key<T> = this@ExtrasReadOnlyProperty.key
}
}
@Deprecated("Scheduled for removal in Kotlin 2.2")
interface ExtrasFactoryProperty<T : Any> : ExtrasProperty<T>, ReadWriteProperty<HasMutableExtras, T> {
val factory: () -> T
override fun getValue(thisRef: HasMutableExtras, property: KProperty<*>): T {
return thisRef.extras.getOrPut(key, factory)
}
override fun setValue(thisRef: HasMutableExtras, property: KProperty<*>, value: T) {
thisRef.extras[key] = value
}
}
@Deprecated("Scheduled for removal in Kotlin 2.2")
interface NullableExtrasLazyProperty<Receiver : HasMutableExtras, T : Any> : ExtrasProperty<Optional<T>>, ReadOnlyProperty<Receiver, T?> {
val factory: Receiver.() -> T?
@@ -7,9 +7,9 @@ package org.jetbrains.kotlin.tooling.core
import kotlin.test.*
@Suppress("DEPRECATION")
class ExtrasPropertyTest {
class Subject : HasMutableExtras {
override val extras: MutableExtras = mutableExtrasOf()
}