From 6bc29305cdbb02e469f851ea1e72a42ebfc65db7 Mon Sep 17 00:00:00 2001 From: Alejandro Serrano Date: Sun, 7 Aug 2022 16:48:01 +0200 Subject: [PATCH 1/3] Enable builder inference for optics `copy` --- arrow-libs/optics/arrow-optics/api/arrow-optics.api | 3 +++ arrow-libs/optics/arrow-optics/build.gradle.kts | 4 ++++ .../src/commonMain/kotlin/arrow/optics/Copy.kt | 12 ++++++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/arrow-libs/optics/arrow-optics/api/arrow-optics.api b/arrow-libs/optics/arrow-optics/api/arrow-optics.api index aa6ac451a63..970a6993266 100644 --- a/arrow-libs/optics/arrow-optics/api/arrow-optics.api +++ b/arrow-libs/optics/arrow-optics/api/arrow-optics.api @@ -151,6 +151,9 @@ public final class arrow/optics/ListKt { public static final fun unsnoc (Ljava/util/List;)Lkotlin/Pair; } +public abstract interface annotation class arrow/optics/OpticsCopyMarker : java/lang/annotation/Annotation { +} + public final class arrow/optics/OptionalGetterKt { public static final fun OptionalGetter (Lkotlin/jvm/functions/Function1;)Larrow/optics/POptionalGetter; } diff --git a/arrow-libs/optics/arrow-optics/build.gradle.kts b/arrow-libs/optics/arrow-optics/build.gradle.kts index 194b92b561a..999fbe82701 100644 --- a/arrow-libs/optics/arrow-optics/build.gradle.kts +++ b/arrow-libs/optics/arrow-optics/build.gradle.kts @@ -20,6 +20,10 @@ if (enableCompatibilityMetadataVariant) { } } +tasks.withType().configureEach { + kotlinOptions.freeCompilerArgs += listOf("-Xenable-builder-inference", "-opt-in=kotlin.RequiresOptIn") +} + kotlin { sourceSets { commonMain { diff --git a/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/Copy.kt b/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/Copy.kt index 5b231df3623..87a21dfd257 100644 --- a/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/Copy.kt +++ b/arrow-libs/optics/arrow-optics/src/commonMain/kotlin/arrow/optics/Copy.kt @@ -1,5 +1,11 @@ package arrow.optics +import kotlin.experimental.ExperimentalTypeInference + +@DslMarker +public annotation class OpticsCopyMarker + +@OpticsCopyMarker public interface Copy { /** * Changes the value of the element(s) pointed by the [Setter]. @@ -33,7 +39,8 @@ public interface Copy { * } * ``` */ - public fun inside(field: Traversal, f: Copy.() -> Unit): Unit = + @OptIn(ExperimentalTypeInference::class) + public fun inside(field: Traversal, @BuilderInference f: Copy.() -> Unit): Unit = field.transform { it.copy(f) } } @@ -67,5 +74,6 @@ private class CopyImpl(var current: A): Copy { * } * ``` */ -public fun A.copy(f: Copy.() -> Unit): A = +@OptIn(ExperimentalTypeInference::class) +public fun A.copy(@BuilderInference f: Copy.() -> Unit): A = CopyImpl(this).also(f).current From 1ee8e7244ea5766d0f89b9ceb4bf5a850898eb6f Mon Sep 17 00:00:00 2001 From: Alejandro Serrano Date: Mon, 8 Aug 2022 10:05:22 +0200 Subject: [PATCH 2/3] Delete opt-in from the list of compiler options --- arrow-libs/optics/arrow-optics/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arrow-libs/optics/arrow-optics/build.gradle.kts b/arrow-libs/optics/arrow-optics/build.gradle.kts index 999fbe82701..60e92cfdbbf 100644 --- a/arrow-libs/optics/arrow-optics/build.gradle.kts +++ b/arrow-libs/optics/arrow-optics/build.gradle.kts @@ -21,7 +21,7 @@ if (enableCompatibilityMetadataVariant) { } tasks.withType().configureEach { - kotlinOptions.freeCompilerArgs += listOf("-Xenable-builder-inference", "-opt-in=kotlin.RequiresOptIn") + kotlinOptions.freeCompilerArgs += listOf("-Xenable-builder-inference") } kotlin { From 9a288990f34df1440464aa2bf38a373c77b95405 Mon Sep 17 00:00:00 2001 From: Alejandro Serrano Date: Mon, 8 Aug 2022 19:10:22 +0200 Subject: [PATCH 3/3] Remove all compiler args --- arrow-libs/optics/arrow-optics/build.gradle.kts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/arrow-libs/optics/arrow-optics/build.gradle.kts b/arrow-libs/optics/arrow-optics/build.gradle.kts index 60e92cfdbbf..194b92b561a 100644 --- a/arrow-libs/optics/arrow-optics/build.gradle.kts +++ b/arrow-libs/optics/arrow-optics/build.gradle.kts @@ -20,10 +20,6 @@ if (enableCompatibilityMetadataVariant) { } } -tasks.withType().configureEach { - kotlinOptions.freeCompilerArgs += listOf("-Xenable-builder-inference") -} - kotlin { sourceSets { commonMain {