diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/domain.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/domain.kt index 2763c6afd7..914aa757b7 100644 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/domain.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/domain.kt @@ -13,7 +13,7 @@ import java.util.Locale data class ADT(val pckg: KSName, val declaration: KSClassDeclaration, val targets: List) { val sourceClassName = declaration.qualifiedNameOrSimpleName - val sourceName = declaration.simpleName.asString().replaceFirstChar { it.lowercase(Locale.getDefault()) } + val sourceName = declaration.simpleName.asString().replaceFirstChar { it.lowercase(Locale.getDefault()) }.sanitize() val simpleName = declaration.nameWithParentClass val packageName = pckg.asSanitizedString() val visibilityModifierName = when (declaration.companionObject?.getVisibility()) { diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/lenses.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/lenses.kt index 1583dc4494..fed5eeb5f4 100644 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/lenses.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/lenses.kt @@ -14,10 +14,7 @@ private fun OpticsProcessorOptions.processElement(adt: ADT, foci: List): val setBody = { focus: Focus -> val setBodyCopy = """${adt.sourceName}.copy(${ - focus.paramName.plusIfNotBlank( - prefix = "`", - postfix = "`", - ) + focus.escapedParamName } = value)""" when { focus.subclasses.isNotEmpty() -> { diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/DSLTests.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/DSLTests.kt index 844ae0f2e0..b8e7b06d94 100755 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/DSLTests.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/DSLTests.kt @@ -195,4 +195,37 @@ class DSLTests { |} """.compilationSucceeds() } + + @Test + fun `Using Object as the name a class, prisms, #3474`() { + """ + |$`package` + |$imports + | + |@optics + |sealed interface Thing { + | data class Object(val value: Int) : Thing + | companion object + |} + | + |val i: Prism = Thing.`object` + |val r = i != null + """.evals("r" to true) + } + + @Test + fun `Using Object as the name a class, lenses, #3474`() { + """ + |$`package` + |$imports + | + |@optics + |data class Object(val value: Int) { + | companion object + |} + | + |val i: Lens = Object.value + |val r = i != null + """.evals("r" to true) + } }