From 6c99b66107131a6c4a5dbb5fb9fb5ddbc7508ed2 Mon Sep 17 00:00:00 2001 From: i-walker <46971368+i-walker@users.noreply.github.com> Date: Wed, 2 Mar 2022 17:58:59 +0100 Subject: [PATCH 1/6] fix imports/ depreactions --- .../arrow/optics/plugin/OpticsProcessor.kt | 7 ++- .../arrow/optics/plugin/internals/domain.kt | 9 ++- .../arrow/optics/plugin/internals/dsl.kt | 62 +++++++++---------- .../arrow/optics/plugin/internals/isos.kt | 18 +++--- .../arrow/optics/plugin/internals/lenses.kt | 22 +++++-- .../arrow/optics/plugin/internals/optional.kt | 17 +++-- .../arrow/optics/plugin/internals/prism.kt | 14 ++--- .../optics/plugin/internals/processor.kt | 14 +++-- .../test/kotlin/arrow/optics/plugin/Utils.kt | 4 +- 9 files changed, 94 insertions(+), 73 deletions(-) diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/OpticsProcessor.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/OpticsProcessor.kt index 63dac0b4695..7b3b72c23c5 100644 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/OpticsProcessor.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/OpticsProcessor.kt @@ -6,6 +6,7 @@ import arrow.optics.plugin.internals.asFileText import arrow.optics.plugin.internals.join import arrow.optics.plugin.internals.noCompanion import arrow.optics.plugin.internals.otherClassTypeErrorMessage +import arrow.optics.plugin.internals.qualifiedNameOrSimpleName import arrow.optics.plugin.internals.snippets import arrow.optics.plugin.internals.typeParametersErrorMessage import com.google.devtools.ksp.processing.CodeGenerator @@ -33,19 +34,19 @@ class OpticsProcessor(private val codegen: CodeGenerator, private val logger: KS private fun processClass(klass: KSClassDeclaration) { // check that it is sealed or data if (!klass.isSealed && !klass.isData) { - logger.error(klass.simpleName.asString().otherClassTypeErrorMessage, klass) + logger.error(klass.qualifiedNameOrSimpleName.otherClassTypeErrorMessage, klass) return } // check that it does not have type arguments if (klass.typeParameters.isNotEmpty()) { - logger.error(klass.simpleName.asString().typeParametersErrorMessage, klass) + logger.error(klass.qualifiedNameOrSimpleName.typeParametersErrorMessage, klass) return } // check that the companion object exists if (klass.companionObject == null) { - logger.error(klass.simpleName.asString().noCompanion, klass) + logger.error(klass.qualifiedNameOrSimpleName.noCompanion, klass) return } 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 89be73d75e9..4b78049efae 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 @@ -4,11 +4,10 @@ import com.google.devtools.ksp.symbol.KSClassDeclaration import com.google.devtools.ksp.symbol.KSName import java.util.Locale -data class ADT(val pckg: KSName, val el: KSClassDeclaration, val targets: List) { - val sourceClassName = el.qualifiedName?.asString() ?: el.simpleName - val sourceName = el.simpleName.asString().replaceFirstChar { it.lowercase(Locale.getDefault()) } - val simpleName = el.simpleName.asString() - val packageName = pckg.asString() +data class ADT(val packageName: KSName, val declaration: KSClassDeclaration, val targets: List) { + val qualifiedNameOrSimpleName = declaration.qualifiedNameOrSimpleName + val simpleName = declaration.simpleName.asString().replaceFirstChar { it.lowercase(Locale.getDefault()) } + val packageNameAsString = packageName.asString() operator fun Snippet.plus(snippet: Snippet): Snippet = copy(imports = imports + snippet.imports, content = "$content\n${snippet.content}") diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/dsl.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/dsl.kt index 9c412bb07e2..8420cbbab2b 100644 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/dsl.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/dsl.kt @@ -2,37 +2,37 @@ package arrow.optics.plugin.internals fun generateLensDsl(ele: ADT, optic: DataClassDsl): Snippet = Snippet( - `package` = ele.packageName, - name = ele.simpleName, + `package` = ele.packageNameAsString, + name = ele.qualifiedNameOrSimpleName, content = processLensSyntax(ele, optic.foci) ) fun generateOptionalDsl(ele: ADT, optic: DataClassDsl): Snippet = Snippet( - `package` = ele.packageName, - name = ele.simpleName, + `package` = ele.packageNameAsString, + name = ele.qualifiedNameOrSimpleName, content = processOptionalSyntax(ele, optic) ) fun generatePrismDsl(ele: ADT, isoOptic: SealedClassDsl): Snippet = Snippet( - `package` = ele.packageName, - name = ele.simpleName, + `package` = ele.packageNameAsString, + name = ele.qualifiedNameOrSimpleName, content = processPrismSyntax(ele, isoOptic) ) private fun processLensSyntax(ele: ADT, foci: List): String = foci.joinToString(separator = "\n") { focus -> """ - |inline val $Iso.${focus.lensParamName()}: $Lens inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} - |inline val $Lens.${focus.lensParamName()}: $Lens inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} - |inline val $Optional.${focus.lensParamName()}: $Optional inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} - |inline val $Prism.${focus.lensParamName()}: $Optional inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} - |inline val $Getter.${focus.lensParamName()}: $Getter inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} - |inline val $Setter.${focus.lensParamName()}: $Setter inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} - |inline val $Traversal.${focus.lensParamName()}: $Traversal inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} - |inline val $Fold.${focus.lensParamName()}: $Fold inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} - |inline val $Every.${focus.lensParamName()}: $Every inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} + |inline val $Iso.${focus.lensParamName()}: $Lens inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} + |inline val $Lens.${focus.lensParamName()}: $Lens inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} + |inline val $Optional.${focus.lensParamName()}: $Optional inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} + |inline val $Prism.${focus.lensParamName()}: $Optional inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} + |inline val $Getter.${focus.lensParamName()}: $Getter inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} + |inline val $Setter.${focus.lensParamName()}: $Setter inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} + |inline val $Traversal.${focus.lensParamName()}: $Traversal inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} + |inline val $Fold.${focus.lensParamName()}: $Fold inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} + |inline val $Every.${focus.lensParamName()}: $Every inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} |""".trimMargin() } @@ -46,27 +46,27 @@ private fun processOptionalSyntax(ele: ADT, optic: DataClassDsl) = } """ - |inline val $Iso.${focus.paramName}: $Optional inline get() = this + ${ele.sourceClassName}.${focus.paramName} - |inline val $Lens.${focus.paramName}: $Optional inline get() = this + ${ele.sourceClassName}.${focus.paramName} - |inline val $Optional.${focus.paramName}: $Optional inline get() = this + ${ele.sourceClassName}.${focus.paramName} - |inline val $Prism.${focus.paramName}: $Optional inline get() = this + ${ele.sourceClassName}.${focus.paramName} - |inline val $Setter.${focus.paramName}: $Setter inline get() = this + ${ele.sourceClassName}.${focus.paramName} - |inline val $Traversal.${focus.paramName}: $Traversal inline get() = this + ${ele.sourceClassName}.${focus.paramName} - |inline val $Fold.${focus.paramName}: $Fold inline get() = this + ${ele.sourceClassName}.${focus.paramName} - |inline val $Every.${focus.paramName}: $Every inline get() = this + ${ele.sourceClassName}.${focus.paramName} + |inline val $Iso.${focus.paramName}: $Optional inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} + |inline val $Lens.${focus.paramName}: $Optional inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} + |inline val $Optional.${focus.paramName}: $Optional inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} + |inline val $Prism.${focus.paramName}: $Optional inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} + |inline val $Setter.${focus.paramName}: $Setter inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} + |inline val $Traversal.${focus.paramName}: $Traversal inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} + |inline val $Fold.${focus.paramName}: $Fold inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} + |inline val $Every.${focus.paramName}: $Every inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} |""".trimMargin() } private fun processPrismSyntax(ele: ADT, dsl: SealedClassDsl): String = dsl.foci.joinToString(separator = "\n\n") { focus -> """ - |inline val $Iso.${focus.paramName}: $Prism inline get() = this + ${ele.sourceClassName}.${focus.paramName} - |inline val $Lens.${focus.paramName}: $Optional inline get() = this + ${ele.sourceClassName}.${focus.paramName} - |inline val $Optional.${focus.paramName}: $Optional inline get() = this + ${ele.sourceClassName}.${focus.paramName} - |inline val $Prism.${focus.paramName}: $Prism inline get() = this + ${ele.sourceClassName}.${focus.paramName} - |inline val $Setter.${focus.paramName}: $Setter inline get() = this + ${ele.sourceClassName}.${focus.paramName} - |inline val $Traversal.${focus.paramName}: $Traversal inline get() = this + ${ele.sourceClassName}.${focus.paramName} - |inline val $Fold.${focus.paramName}: $Fold inline get() = this + ${ele.sourceClassName}.${focus.paramName} - |inline val $Every.${focus.paramName}: $Every inline get() = this + ${ele.sourceClassName}.${focus.paramName} + |inline val $Iso.${focus.paramName}: $Prism inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} + |inline val $Lens.${focus.paramName}: $Optional inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} + |inline val $Optional.${focus.paramName}: $Optional inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} + |inline val $Prism.${focus.paramName}: $Prism inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} + |inline val $Setter.${focus.paramName}: $Setter inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} + |inline val $Traversal.${focus.paramName}: $Traversal inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} + |inline val $Fold.${focus.paramName}: $Fold inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} + |inline val $Every.${focus.paramName}: $Every inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} |""".trimMargin() } diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/isos.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/isos.kt index 8d03c00fd4a..fc0fd439d47 100644 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/isos.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/isos.kt @@ -1,7 +1,7 @@ package arrow.optics.plugin.internals internal fun generateIsos(ele: ADT, target: IsoTarget) = - Snippet(`package` = ele.packageName, name = ele.simpleName, content = processElement(ele, target)) + Snippet(`package` = ele.packageNameAsString, name = ele.qualifiedNameOrSimpleName, content = processElement(ele, target)) inline val Target.targetNames inline get() = foci.map(Focus::className) @@ -34,11 +34,11 @@ private fun processElement(iso: ADT, target: Target): String { ) fun Focus.format(): String = - "${iso.sourceName}.${paramName.plusIfNotBlank(prefix = "`", postfix = "`")}" + "${iso.simpleName}.${paramName.plusIfNotBlank(prefix = "`", postfix = "`")}" fun tupleConstructor() = when (foci.size) { - 1 -> "${iso.sourceName}.${foci.first().paramName}" + 1 -> "${iso.simpleName}.${foci.first().paramName}" 2 -> "$Pair(${foci[0].format()}, ${foci[1].format()})" 3 -> "$Triple(${foci[0].format()}, ${foci[1].format()}, ${foci[2].format()})" else -> @@ -55,17 +55,17 @@ private fun processElement(iso: ADT, target: Target): String { fun classConstructorFromTuple() = when (foci.size) { - 1 -> "${iso.sourceClassName}(it)" - 2 -> "pair: ${focusType()} -> ${iso.sourceClassName}(pair.first, pair.second)" + 1 -> "${iso.qualifiedNameOrSimpleName}(it)" + 2 -> "pair: ${focusType()} -> ${iso.qualifiedNameOrSimpleName}(pair.first, pair.second)" 3 -> - "triple: ${focusType()} -> ${iso.sourceClassName}(triple.first, triple.second, triple.third)" + "triple: ${focusType()} -> ${iso.qualifiedNameOrSimpleName}(triple.first, triple.second, triple.third)" else -> - "tuple: ${focusType()} -> ${(foci.indices).joinToString(prefix = "${iso.sourceClassName}(", postfix = ")", transform = { "tuple.${letters[it]}" })}" + "tuple: ${focusType()} -> ${(foci.indices).joinToString(prefix = "${iso.qualifiedNameOrSimpleName}(", postfix = ")", transform = { "tuple.${letters[it]}" })}" } return """ - |inline val ${iso.sourceClassName}.Companion.iso: $Iso<${iso.sourceClassName}, ${focusType()}> inline get()= $Iso( - | get = { ${iso.sourceName}: ${iso.sourceClassName} -> ${tupleConstructor()} }, + |inline val ${iso.qualifiedNameOrSimpleName}.Companion.iso: $Iso<${iso.qualifiedNameOrSimpleName}, ${focusType()}> inline get()= $Iso( + | get = { ${iso.simpleName}: ${iso.qualifiedNameOrSimpleName} -> ${tupleConstructor()} }, | reverseGet = { ${classConstructorFromTuple()} } |) |""".trimMargin() 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 7b9057ece2e..e0b3eb1e80a 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 @@ -4,8 +4,8 @@ import java.util.Locale internal fun generateLenses(ele: ADT, target: LensTarget) = Snippet( - `package` = ele.packageName, - name = ele.simpleName, + `package` = ele.packageNameAsString, + name = ele.qualifiedNameOrSimpleName, content = processElement(ele, target.foci) ) @@ -20,12 +20,22 @@ private fun String.toUpperCamelCase(): String = } ) -private fun processElement(ele: ADT, foci: List): String = +private fun processElement(adt: ADT, foci: List): String = foci.joinToString(separator = "\n") { focus -> """ - |inline val ${ele.sourceClassName}.Companion.${focus.lensParamName()}: $Lens<${ele.sourceClassName}, ${focus.className}> inline get()= $Lens( - | get = { ${ele.sourceName}: ${ele.sourceClassName} -> ${ele.sourceName}.${focus.paramName.plusIfNotBlank(prefix = "`", postfix = "`")} }, - | set = { ${ele.sourceName}: ${ele.sourceClassName}, value: ${focus.className} -> ${ele.sourceName}.copy(${focus.paramName.plusIfNotBlank(prefix = "`", postfix = "`")} = value) } + |inline val ${adt.qualifiedNameOrSimpleName}.Companion.${focus.lensParamName()}: $Lens<${adt.qualifiedNameOrSimpleName}, ${focus.className}> inline get()= $Lens( + | get = { ${adt.simpleName}: ${adt.qualifiedNameOrSimpleName} -> ${adt.simpleName}.${ + focus.paramName.plusIfNotBlank( + prefix = "`", + postfix = "`" + ) + } }, + | set = { ${adt.simpleName}: ${adt.qualifiedNameOrSimpleName}, value: ${focus.className} -> ${adt.simpleName}.copy(${ + focus.paramName.plusIfNotBlank( + prefix = "`", + postfix = "`" + ) + } = value) } |) |""".trimMargin() } diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/optional.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/optional.kt index ea9c8b1b8d2..f572510c022 100644 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/optional.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/optional.kt @@ -2,8 +2,8 @@ package arrow.optics.plugin.internals internal fun generateOptionals(ele: ADT, target: OptionalTarget) = Snippet( - `package` = ele.packageName, - name = ele.simpleName, + `package` = ele.packageNameAsString, + name = ele.qualifiedNameOrSimpleName, imports = setOf("import arrow.core.left", "import arrow.core.right", "import arrow.core.toOption"), content = processElement(ele, target.foci) @@ -12,9 +12,14 @@ internal fun generateOptionals(ele: ADT, target: OptionalTarget) = private fun processElement(ele: ADT, foci: List): String = foci.joinToString(separator = "\n") { focus -> fun getOrModifyF(toNullable: String = "") = - "{ ${ele.sourceName}: ${ele.sourceClassName} -> ${ele.sourceName}.${focus.paramName.plusIfNotBlank(prefix = "`", postfix = "`")}$toNullable?.right() ?: ${ele.sourceName}.left() }" + "{ ${ele.simpleName}: ${ele.qualifiedNameOrSimpleName} -> ${ele.simpleName}.${ + focus.paramName.plusIfNotBlank( + prefix = "`", + postfix = "`" + ) + }$toNullable?.right() ?: ${ele.simpleName}.left() }" fun setF(fromNullable: String = "") = - "${ele.sourceName}.copy(${focus.paramName.plusIfNotBlank(prefix = "`", postfix = "`")} = value$fromNullable)" + "${ele.simpleName}.copy(${focus.paramName.plusIfNotBlank(prefix = "`", postfix = "`")} = value$fromNullable)" val (targetClassName, getOrModify, set) = when (focus) { @@ -25,9 +30,9 @@ private fun processElement(ele: ADT, foci: List): String = } """ - |inline val ${ele.sourceClassName}.Companion.${focus.paramName}: $Optional<${ele.sourceClassName}, $targetClassName> inline get()= $Optional( + |inline val ${ele.qualifiedNameOrSimpleName}.Companion.${focus.paramName}: $Optional<${ele.qualifiedNameOrSimpleName}, $targetClassName> inline get()= $Optional( | getOrModify = $getOrModify, - | set = { ${ele.sourceName}: ${ele.sourceClassName}, value: $targetClassName -> $set } + | set = { ${ele.simpleName}: ${ele.qualifiedNameOrSimpleName}, value: $targetClassName -> $set } |) |""".trimMargin() } diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/prism.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/prism.kt index 19bbaae8e88..aaf7b4fcb7d 100644 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/prism.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/prism.kt @@ -2,8 +2,8 @@ package arrow.optics.plugin.internals internal fun generatePrisms(ele: ADT, target: PrismTarget) = Snippet( - `package` = ele.packageName, - name = ele.simpleName, + `package` = ele.packageNameAsString, + name = ele.qualifiedNameOrSimpleName, imports = setOf("import arrow.core.left", "import arrow.core.right", "import arrow.core.identity"), content = processElement(ele, target.foci) @@ -12,11 +12,11 @@ internal fun generatePrisms(ele: ADT, target: PrismTarget) = private fun processElement(ele: ADT, foci: List): String = foci.joinToString(separator = "\n\n") { focus -> """ - |inline val ${ele.sourceClassName}.Companion.${focus.paramName}: $Prism<${ele.sourceClassName}, ${focus.className}> inline get()= $Prism( - | getOrModify = { ${ele.sourceName}: ${ele.sourceClassName} -> - | when (${ele.sourceName}) { - | is ${focus.className} -> ${ele.sourceName}.right() - | else -> ${ele.sourceName}.left() + |inline val ${ele.qualifiedNameOrSimpleName}.Companion.${focus.paramName}: $Prism<${ele.qualifiedNameOrSimpleName}, ${focus.className}> inline get()= $Prism( + | getOrModify = { ${ele.simpleName}: ${ele.qualifiedNameOrSimpleName} -> + | when (${ele.simpleName}) { + | is ${focus.className} -> ${ele.simpleName}.right() + | else -> ${ele.simpleName}.left() | } | }, | reverseGet = ::identity diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/processor.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/processor.kt index 38e515bd371..27a0929ab4a 100644 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/processor.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/processor.kt @@ -4,6 +4,7 @@ import arrow.optics.plugin.isData import arrow.optics.plugin.isSealed import com.google.devtools.ksp.processing.KSPLogger import com.google.devtools.ksp.symbol.KSClassDeclaration +import com.google.devtools.ksp.symbol.KSDeclaration import com.google.devtools.ksp.symbol.KSType import com.google.devtools.ksp.symbol.KSTypeArgument import java.util.Locale @@ -15,10 +16,10 @@ internal fun adt(c: KSClassDeclaration, logger: KSPLogger): ADT = c.targets().map { target -> when (target) { OpticsTarget.LENS -> - evalAnnotatedDataClass(c, c.simpleName.asString().lensErrorMessage, logger) + evalAnnotatedDataClass(c, c.qualifiedNameOrSimpleName.lensErrorMessage, logger) .let(::LensTarget) OpticsTarget.OPTIONAL -> - evalAnnotatedDataClass(c, c.simpleName.asString().optionalErrorMessage, logger) + evalAnnotatedDataClass(c, c.qualifiedNameOrSimpleName.optionalErrorMessage, logger) .let(::OptionalTarget) OpticsTarget.ISO -> evalAnnotatedIsoElement(c, logger).let(::IsoTarget) OpticsTarget.PRISM -> evalAnnotatedPrismElement(c, logger).let(::PrismTarget) @@ -44,11 +45,14 @@ internal fun evalAnnotatedPrismElement( ) } else -> { - logger.error(element.simpleName.asString().prismErrorMessage, element) + logger.error(element.qualifiedNameOrSimpleName.prismErrorMessage, element) emptyList() } } +internal val KSDeclaration.qualifiedNameOrSimpleName: String + get() = (qualifiedName ?: simpleName).asString() + internal fun KSClassDeclaration.sealedSubclassFqNameList(): List = getSealedSubclasses().mapNotNull { it.qualifiedName?.asString() }.toList() @@ -88,11 +92,11 @@ internal fun evalAnnotatedIsoElement(element: KSClassDeclaration, logger: KSPLog .zip(element.getConstructorParamNames(), Focus.Companion::invoke) .takeIf { it.size <= 22 } ?: run { - logger.error(element.simpleName.asString().isoTooBigErrorMessage, element) + logger.error(element.qualifiedNameOrSimpleName.isoTooBigErrorMessage, element) emptyList() } else -> { - logger.error(element.simpleName.asString().isoErrorMessage, element) + logger.error(element.qualifiedNameOrSimpleName.isoErrorMessage, element) emptyList() } } diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/Utils.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/Utils.kt index 01ba04b72c7..d376b949c61 100644 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/Utils.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/Utils.kt @@ -6,6 +6,8 @@ const val imports = import arrow.optics.* import arrow.optics.dsl.* import arrow.optics.typeclasses.* + import kotlin.time.Duration + import kotlin.time.Duration.Companion.hours """ const val dslModel = @@ -19,7 +21,7 @@ const val dslModel = @optics data class Company(val name: String, val address: Address) { companion object } - @optics data class Employee(val name: String, val company: Company?) { + @optics data class Employee(val name: String, val company: Company?, val weeklyWorkingHours: Duration = 8.hours) { companion object } @optics data class Employees(val employees: List) { From 6d28d63b4847fdce9acfbd1da6c46d3430f1fecf Mon Sep 17 00:00:00 2001 From: i-walker <46971368+i-walker@users.noreply.github.com> Date: Wed, 2 Mar 2022 18:17:29 +0100 Subject: [PATCH 2/6] . --- .../src/test/kotlin/arrow/optics/plugin/Utils.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/Utils.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/Utils.kt index d376b949c61..34e2a1fa1d4 100644 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/Utils.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/Utils.kt @@ -21,7 +21,7 @@ const val dslModel = @optics data class Company(val name: String, val address: Address) { companion object } - @optics data class Employee(val name: String, val company: Company?, val weeklyWorkingHours: Duration = 8.hours) { + @optics data class Employee(val name: String, val company: Company?, val weeklyWorkingHours: Duration = 5.hours) { companion object } @optics data class Employees(val employees: List) { From 2ba18dd9fc9846081929dd26af81884281fce199 Mon Sep 17 00:00:00 2001 From: i-walker <46971368+i-walker@users.noreply.github.com> Date: Wed, 2 Mar 2022 21:27:54 +0100 Subject: [PATCH 3/6] rm import --- .../src/test/kotlin/arrow/optics/plugin/LensTests.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/LensTests.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/LensTests.kt index fc44c0b60fd..c6039834878 100755 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/LensTests.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/LensTests.kt @@ -38,7 +38,6 @@ class LensTests { fun `Lenses which mentions imported elements`() { """ |$imports - |import kotlin.time.Duration | |@optics |data class OpticsTest(val time: Duration) { From 558a585edc39b514c3124db193c08a878b6c7821 Mon Sep 17 00:00:00 2001 From: i-walker <46971368+i-walker@users.noreply.github.com> Date: Fri, 4 Mar 2022 14:13:09 +0100 Subject: [PATCH 4/6] use FqName --- .../src/test/kotlin/arrow/optics/plugin/LensTests.kt | 2 +- .../src/test/kotlin/arrow/optics/plugin/Utils.kt | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/LensTests.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/LensTests.kt index c6039834878..c320bbf40de 100755 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/LensTests.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/LensTests.kt @@ -40,7 +40,7 @@ class LensTests { |$imports | |@optics - |data class OpticsTest(val time: Duration) { + |data class OpticsTest(val time: kotlin.time.Duration) { | companion object |} | diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/Utils.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/Utils.kt index 34e2a1fa1d4..2ca7093e4c7 100644 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/Utils.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/Utils.kt @@ -6,7 +6,6 @@ const val imports = import arrow.optics.* import arrow.optics.dsl.* import arrow.optics.typeclasses.* - import kotlin.time.Duration import kotlin.time.Duration.Companion.hours """ @@ -21,7 +20,7 @@ const val dslModel = @optics data class Company(val name: String, val address: Address) { companion object } - @optics data class Employee(val name: String, val company: Company?, val weeklyWorkingHours: Duration = 5.hours) { + @optics data class Employee(val name: String, val company: Company?, val weeklyWorkingHours: kotlin.time.Duration = 5.hours) { companion object } @optics data class Employees(val employees: List) { From cf94ac5691944561122098b863011d2d68956515 Mon Sep 17 00:00:00 2001 From: i-walker <46971368+i-walker@users.noreply.github.com> Date: Fri, 4 Mar 2022 17:15:15 +0100 Subject: [PATCH 5/6] use FqName --- .../src/test/kotlin/arrow/optics/plugin/LensTests.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/LensTests.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/LensTests.kt index c320bbf40de..d913d5006a2 100755 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/LensTests.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/test/kotlin/arrow/optics/plugin/LensTests.kt @@ -44,7 +44,7 @@ class LensTests { | companion object |} | - |val i: Lens = OpticsTest.time + |val i: Lens = OpticsTest.time |val r = i != null """.evals("r" to true) } From f5237a552c3a987b65529d4663e7428f4817456d Mon Sep 17 00:00:00 2001 From: i-walker <46971368+i-walker@users.noreply.github.com> Date: Fri, 4 Mar 2022 18:16:53 +0100 Subject: [PATCH 6/6] change names --- .../arrow/optics/plugin/internals/domain.kt | 9 +-- .../arrow/optics/plugin/internals/dsl.kt | 62 +++++++++---------- .../arrow/optics/plugin/internals/isos.kt | 18 +++--- .../arrow/optics/plugin/internals/lenses.kt | 10 +-- .../arrow/optics/plugin/internals/optional.kt | 14 ++--- .../arrow/optics/plugin/internals/prism.kt | 14 ++--- 6 files changed, 64 insertions(+), 63 deletions(-) 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 4b78049efae..61235678a14 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 @@ -4,10 +4,11 @@ import com.google.devtools.ksp.symbol.KSClassDeclaration import com.google.devtools.ksp.symbol.KSName import java.util.Locale -data class ADT(val packageName: KSName, val declaration: KSClassDeclaration, val targets: List) { - val qualifiedNameOrSimpleName = declaration.qualifiedNameOrSimpleName - val simpleName = declaration.simpleName.asString().replaceFirstChar { it.lowercase(Locale.getDefault()) } - val packageNameAsString = packageName.asString() +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 simpleName = declaration.simpleName.asString() + val packageName = pckg.asString() operator fun Snippet.plus(snippet: Snippet): Snippet = copy(imports = imports + snippet.imports, content = "$content\n${snippet.content}") diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/dsl.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/dsl.kt index 8420cbbab2b..69cf6e992d2 100644 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/dsl.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/dsl.kt @@ -2,37 +2,37 @@ package arrow.optics.plugin.internals fun generateLensDsl(ele: ADT, optic: DataClassDsl): Snippet = Snippet( - `package` = ele.packageNameAsString, - name = ele.qualifiedNameOrSimpleName, + `package` = ele.packageName, + name = ele.sourceClassName, content = processLensSyntax(ele, optic.foci) ) fun generateOptionalDsl(ele: ADT, optic: DataClassDsl): Snippet = Snippet( - `package` = ele.packageNameAsString, - name = ele.qualifiedNameOrSimpleName, + `package` = ele.packageName, + name = ele.sourceClassName, content = processOptionalSyntax(ele, optic) ) fun generatePrismDsl(ele: ADT, isoOptic: SealedClassDsl): Snippet = Snippet( - `package` = ele.packageNameAsString, - name = ele.qualifiedNameOrSimpleName, + `package` = ele.packageName, + name = ele.sourceClassName, content = processPrismSyntax(ele, isoOptic) ) private fun processLensSyntax(ele: ADT, foci: List): String = foci.joinToString(separator = "\n") { focus -> """ - |inline val $Iso.${focus.lensParamName()}: $Lens inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} - |inline val $Lens.${focus.lensParamName()}: $Lens inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} - |inline val $Optional.${focus.lensParamName()}: $Optional inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} - |inline val $Prism.${focus.lensParamName()}: $Optional inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} - |inline val $Getter.${focus.lensParamName()}: $Getter inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} - |inline val $Setter.${focus.lensParamName()}: $Setter inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} - |inline val $Traversal.${focus.lensParamName()}: $Traversal inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} - |inline val $Fold.${focus.lensParamName()}: $Fold inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} - |inline val $Every.${focus.lensParamName()}: $Every inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.lensParamName()} + |inline val $Iso.${focus.lensParamName()}: $Lens inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} + |inline val $Lens.${focus.lensParamName()}: $Lens inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} + |inline val $Optional.${focus.lensParamName()}: $Optional inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} + |inline val $Prism.${focus.lensParamName()}: $Optional inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} + |inline val $Getter.${focus.lensParamName()}: $Getter inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} + |inline val $Setter.${focus.lensParamName()}: $Setter inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} + |inline val $Traversal.${focus.lensParamName()}: $Traversal inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} + |inline val $Fold.${focus.lensParamName()}: $Fold inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} + |inline val $Every.${focus.lensParamName()}: $Every inline get() = this + ${ele.sourceClassName}.${focus.lensParamName()} |""".trimMargin() } @@ -46,27 +46,27 @@ private fun processOptionalSyntax(ele: ADT, optic: DataClassDsl) = } """ - |inline val $Iso.${focus.paramName}: $Optional inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} - |inline val $Lens.${focus.paramName}: $Optional inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} - |inline val $Optional.${focus.paramName}: $Optional inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} - |inline val $Prism.${focus.paramName}: $Optional inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} - |inline val $Setter.${focus.paramName}: $Setter inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} - |inline val $Traversal.${focus.paramName}: $Traversal inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} - |inline val $Fold.${focus.paramName}: $Fold inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} - |inline val $Every.${focus.paramName}: $Every inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} + |inline val $Iso.${focus.paramName}: $Optional inline get() = this + ${ele.sourceClassName}.${focus.paramName} + |inline val $Lens.${focus.paramName}: $Optional inline get() = this + ${ele.sourceClassName}.${focus.paramName} + |inline val $Optional.${focus.paramName}: $Optional inline get() = this + ${ele.sourceClassName}.${focus.paramName} + |inline val $Prism.${focus.paramName}: $Optional inline get() = this + ${ele.sourceClassName}.${focus.paramName} + |inline val $Setter.${focus.paramName}: $Setter inline get() = this + ${ele.sourceClassName}.${focus.paramName} + |inline val $Traversal.${focus.paramName}: $Traversal inline get() = this + ${ele.sourceClassName}.${focus.paramName} + |inline val $Fold.${focus.paramName}: $Fold inline get() = this + ${ele.sourceClassName}.${focus.paramName} + |inline val $Every.${focus.paramName}: $Every inline get() = this + ${ele.sourceClassName}.${focus.paramName} |""".trimMargin() } private fun processPrismSyntax(ele: ADT, dsl: SealedClassDsl): String = dsl.foci.joinToString(separator = "\n\n") { focus -> """ - |inline val $Iso.${focus.paramName}: $Prism inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} - |inline val $Lens.${focus.paramName}: $Optional inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} - |inline val $Optional.${focus.paramName}: $Optional inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} - |inline val $Prism.${focus.paramName}: $Prism inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} - |inline val $Setter.${focus.paramName}: $Setter inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} - |inline val $Traversal.${focus.paramName}: $Traversal inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} - |inline val $Fold.${focus.paramName}: $Fold inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} - |inline val $Every.${focus.paramName}: $Every inline get() = this + ${ele.qualifiedNameOrSimpleName}.${focus.paramName} + |inline val $Iso.${focus.paramName}: $Prism inline get() = this + ${ele.sourceClassName}.${focus.paramName} + |inline val $Lens.${focus.paramName}: $Optional inline get() = this + ${ele.sourceClassName}.${focus.paramName} + |inline val $Optional.${focus.paramName}: $Optional inline get() = this + ${ele.sourceClassName}.${focus.paramName} + |inline val $Prism.${focus.paramName}: $Prism inline get() = this + ${ele.sourceClassName}.${focus.paramName} + |inline val $Setter.${focus.paramName}: $Setter inline get() = this + ${ele.sourceClassName}.${focus.paramName} + |inline val $Traversal.${focus.paramName}: $Traversal inline get() = this + ${ele.sourceClassName}.${focus.paramName} + |inline val $Fold.${focus.paramName}: $Fold inline get() = this + ${ele.sourceClassName}.${focus.paramName} + |inline val $Every.${focus.paramName}: $Every inline get() = this + ${ele.sourceClassName}.${focus.paramName} |""".trimMargin() } diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/isos.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/isos.kt index fc0fd439d47..40ef5656d2b 100644 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/isos.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/isos.kt @@ -1,7 +1,7 @@ package arrow.optics.plugin.internals internal fun generateIsos(ele: ADT, target: IsoTarget) = - Snippet(`package` = ele.packageNameAsString, name = ele.qualifiedNameOrSimpleName, content = processElement(ele, target)) + Snippet(`package` = ele.packageName, name = ele.sourceClassName, content = processElement(ele, target)) inline val Target.targetNames inline get() = foci.map(Focus::className) @@ -34,11 +34,11 @@ private fun processElement(iso: ADT, target: Target): String { ) fun Focus.format(): String = - "${iso.simpleName}.${paramName.plusIfNotBlank(prefix = "`", postfix = "`")}" + "${iso.sourceName}.${paramName.plusIfNotBlank(prefix = "`", postfix = "`")}" fun tupleConstructor() = when (foci.size) { - 1 -> "${iso.simpleName}.${foci.first().paramName}" + 1 -> "${iso.sourceName}.${foci.first().paramName}" 2 -> "$Pair(${foci[0].format()}, ${foci[1].format()})" 3 -> "$Triple(${foci[0].format()}, ${foci[1].format()}, ${foci[2].format()})" else -> @@ -55,17 +55,17 @@ private fun processElement(iso: ADT, target: Target): String { fun classConstructorFromTuple() = when (foci.size) { - 1 -> "${iso.qualifiedNameOrSimpleName}(it)" - 2 -> "pair: ${focusType()} -> ${iso.qualifiedNameOrSimpleName}(pair.first, pair.second)" + 1 -> "${iso.sourceClassName}(it)" + 2 -> "pair: ${focusType()} -> ${iso.sourceClassName}(pair.first, pair.second)" 3 -> - "triple: ${focusType()} -> ${iso.qualifiedNameOrSimpleName}(triple.first, triple.second, triple.third)" + "triple: ${focusType()} -> ${iso.sourceClassName}(triple.first, triple.second, triple.third)" else -> - "tuple: ${focusType()} -> ${(foci.indices).joinToString(prefix = "${iso.qualifiedNameOrSimpleName}(", postfix = ")", transform = { "tuple.${letters[it]}" })}" + "tuple: ${focusType()} -> ${(foci.indices).joinToString(prefix = "${iso.sourceClassName}(", postfix = ")", transform = { "tuple.${letters[it]}" })}" } return """ - |inline val ${iso.qualifiedNameOrSimpleName}.Companion.iso: $Iso<${iso.qualifiedNameOrSimpleName}, ${focusType()}> inline get()= $Iso( - | get = { ${iso.simpleName}: ${iso.qualifiedNameOrSimpleName} -> ${tupleConstructor()} }, + |inline val ${iso.sourceClassName}.Companion.iso: $Iso<${iso.sourceClassName}, ${focusType()}> inline get()= $Iso( + | get = { ${iso.sourceName}: ${iso.sourceClassName} -> ${tupleConstructor()} }, | reverseGet = { ${classConstructorFromTuple()} } |) |""".trimMargin() 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 e0b3eb1e80a..db1c8a2381c 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 @@ -4,8 +4,8 @@ import java.util.Locale internal fun generateLenses(ele: ADT, target: LensTarget) = Snippet( - `package` = ele.packageNameAsString, - name = ele.qualifiedNameOrSimpleName, + `package` = ele.packageName, + name = ele.sourceClassName, content = processElement(ele, target.foci) ) @@ -23,14 +23,14 @@ private fun String.toUpperCamelCase(): String = private fun processElement(adt: ADT, foci: List): String = foci.joinToString(separator = "\n") { focus -> """ - |inline val ${adt.qualifiedNameOrSimpleName}.Companion.${focus.lensParamName()}: $Lens<${adt.qualifiedNameOrSimpleName}, ${focus.className}> inline get()= $Lens( - | get = { ${adt.simpleName}: ${adt.qualifiedNameOrSimpleName} -> ${adt.simpleName}.${ + |inline val ${adt.sourceClassName}.Companion.${focus.lensParamName()}: $Lens<${adt.sourceClassName}, ${focus.className}> inline get()= $Lens( + | get = { ${adt.sourceName}: ${adt.sourceClassName} -> ${adt.sourceName}.${ focus.paramName.plusIfNotBlank( prefix = "`", postfix = "`" ) } }, - | set = { ${adt.simpleName}: ${adt.qualifiedNameOrSimpleName}, value: ${focus.className} -> ${adt.simpleName}.copy(${ + | set = { ${adt.sourceName}: ${adt.sourceClassName}, value: ${focus.className} -> ${adt.sourceName}.copy(${ focus.paramName.plusIfNotBlank( prefix = "`", postfix = "`" diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/optional.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/optional.kt index f572510c022..c03dfcd8bab 100644 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/optional.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/optional.kt @@ -2,8 +2,8 @@ package arrow.optics.plugin.internals internal fun generateOptionals(ele: ADT, target: OptionalTarget) = Snippet( - `package` = ele.packageNameAsString, - name = ele.qualifiedNameOrSimpleName, + `package` = ele.packageName, + name = ele.simpleName, imports = setOf("import arrow.core.left", "import arrow.core.right", "import arrow.core.toOption"), content = processElement(ele, target.foci) @@ -12,14 +12,14 @@ internal fun generateOptionals(ele: ADT, target: OptionalTarget) = private fun processElement(ele: ADT, foci: List): String = foci.joinToString(separator = "\n") { focus -> fun getOrModifyF(toNullable: String = "") = - "{ ${ele.simpleName}: ${ele.qualifiedNameOrSimpleName} -> ${ele.simpleName}.${ + "{ ${ele.sourceName}: ${ele.sourceClassName} -> ${ele.sourceName}.${ focus.paramName.plusIfNotBlank( prefix = "`", postfix = "`" ) - }$toNullable?.right() ?: ${ele.simpleName}.left() }" + }$toNullable?.right() ?: ${ele.sourceName}.left() }" fun setF(fromNullable: String = "") = - "${ele.simpleName}.copy(${focus.paramName.plusIfNotBlank(prefix = "`", postfix = "`")} = value$fromNullable)" + "${ele.sourceName}.copy(${focus.paramName.plusIfNotBlank(prefix = "`", postfix = "`")} = value$fromNullable)" val (targetClassName, getOrModify, set) = when (focus) { @@ -30,9 +30,9 @@ private fun processElement(ele: ADT, foci: List): String = } """ - |inline val ${ele.qualifiedNameOrSimpleName}.Companion.${focus.paramName}: $Optional<${ele.qualifiedNameOrSimpleName}, $targetClassName> inline get()= $Optional( + |inline val ${ele.sourceClassName}.Companion.${focus.paramName}: $Optional<${ele.sourceClassName}, $targetClassName> inline get()= $Optional( | getOrModify = $getOrModify, - | set = { ${ele.simpleName}: ${ele.qualifiedNameOrSimpleName}, value: $targetClassName -> $set } + | set = { ${ele.sourceName}: ${ele.sourceClassName}, value: $targetClassName -> $set } |) |""".trimMargin() } diff --git a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/prism.kt b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/prism.kt index aaf7b4fcb7d..77fa0b377d1 100644 --- a/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/prism.kt +++ b/arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/prism.kt @@ -2,8 +2,8 @@ package arrow.optics.plugin.internals internal fun generatePrisms(ele: ADT, target: PrismTarget) = Snippet( - `package` = ele.packageNameAsString, - name = ele.qualifiedNameOrSimpleName, + `package` = ele.packageName, + name = ele.sourceClassName, imports = setOf("import arrow.core.left", "import arrow.core.right", "import arrow.core.identity"), content = processElement(ele, target.foci) @@ -12,11 +12,11 @@ internal fun generatePrisms(ele: ADT, target: PrismTarget) = private fun processElement(ele: ADT, foci: List): String = foci.joinToString(separator = "\n\n") { focus -> """ - |inline val ${ele.qualifiedNameOrSimpleName}.Companion.${focus.paramName}: $Prism<${ele.qualifiedNameOrSimpleName}, ${focus.className}> inline get()= $Prism( - | getOrModify = { ${ele.simpleName}: ${ele.qualifiedNameOrSimpleName} -> - | when (${ele.simpleName}) { - | is ${focus.className} -> ${ele.simpleName}.right() - | else -> ${ele.simpleName}.left() + |inline val ${ele.sourceClassName}.Companion.${focus.paramName}: $Prism<${ele.sourceClassName}, ${focus.className}> inline get()= $Prism( + | getOrModify = { ${ele.sourceName}: ${ele.sourceClassName} -> + | when (${ele.sourceName}) { + | is ${focus.className} -> ${ele.sourceName}.right() + | else -> ${ele.sourceName}.left() | } | }, | reverseGet = ::identity