Skip to content

Commit ff16653

Browse files
committed
fix(#99): remove duplicate let when using @KonvertFrom with an expression
1 parent ce4eaad commit ff16653

File tree

2 files changed

+57
-20
lines changed

2 files changed

+57
-20
lines changed

processor/src/main/kotlin/io/mcarle/konvert/processor/codegen/MappingCodeGenerator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ $className(${"⇥\n%L"}
236236
val expression = "let·{ ${source.expression} }"
237237
CodeBlock.of(
238238
source.mappingParamName
239-
?.let { "$it.let·{ $expression }" }
239+
?.let { "$it.$expression" }
240240
?: expression
241241
)
242242
}

processor/src/test/kotlin/io/mcarle/konvert/processor/konvertfrom/KonvertFromITest.kt

Lines changed: 56 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class KonvertFromITest : KonverterITest() {
2828
code = SourceFile.kotlin(
2929
name = "TestCode.kt",
3030
contents =
31-
"""
31+
"""
3232
import io.mcarle.konvert.api.KonvertFrom
3333
import io.mcarle.konvert.api.Mapping
3434
@@ -66,7 +66,7 @@ class TargetClass(
6666
code = SourceFile.kotlin(
6767
name = "TestCode.kt",
6868
contents =
69-
"""
69+
"""
7070
import io.mcarle.konvert.api.KonvertFrom
7171
import io.mcarle.konvert.api.Mapping
7272
@@ -105,7 +105,7 @@ class TargetClass(
105105
code = SourceFile.kotlin(
106106
name = "TestCode.kt",
107107
contents =
108-
"""
108+
"""
109109
import io.mcarle.konvert.api.KonvertFrom
110110
import io.mcarle.konvert.api.Mapping
111111
@@ -133,7 +133,7 @@ class TargetClass<T>(
133133
code = SourceFile.kotlin(
134134
name = "TestCode.kt",
135135
contents =
136-
"""
136+
"""
137137
import io.mcarle.konvert.api.KonvertFrom
138138
import io.mcarle.konvert.api.Mapping
139139
@@ -159,7 +159,7 @@ class TargetClass(
159159
code = SourceFile.kotlin(
160160
name = "TestCode.kt",
161161
contents =
162-
"""
162+
"""
163163
import io.mcarle.konvert.api.KonvertFrom
164164
import io.mcarle.konvert.api.Mapping
165165
@@ -187,7 +187,7 @@ annotation class TargetClass(
187187
code = SourceFile.kotlin(
188188
name = "TestCode.kt",
189189
contents =
190-
"""
190+
"""
191191
import io.mcarle.konvert.api.KonvertFrom
192192
import io.mcarle.konvert.api.Mapping
193193
@@ -215,7 +215,7 @@ class TargetClass<T>(
215215
code = SourceFile.kotlin(
216216
name = "TestCode.kt",
217217
contents =
218-
"""
218+
"""
219219
import io.mcarle.konvert.api.KonvertFrom
220220
import io.mcarle.konvert.api.Mapping
221221
@@ -243,7 +243,7 @@ object TargetClass {
243243
code = SourceFile.kotlin(
244244
name = "TestCode.kt",
245245
contents =
246-
"""
246+
"""
247247
import io.mcarle.konvert.api.KonvertFrom
248248
import io.mcarle.konvert.api.Mapping
249249
@@ -271,6 +271,43 @@ data class TargetProperty(val value: String) {
271271
assertContains(extensionFunctionCode, "TargetProperty.fromSourceProperty(sourceProperty = sourceClass.sourceProperty)")
272272
}
273273

274+
@Test
275+
fun useExpression() {
276+
val (compilation) = compileWith(
277+
enabledConverters = listOf(SameTypeConverter()),
278+
code = SourceFile.kotlin(
279+
name = "TestCode.kt",
280+
contents =
281+
"""
282+
import io.mcarle.konvert.api.KonvertFrom
283+
import io.mcarle.konvert.api.Mapping
284+
285+
class SourceClass(
286+
val sourceProperty: String
287+
)
288+
@KonvertFrom(SourceClass::class, mappings=[
289+
Mapping(target="targetProperty", expression = "it.sourceProperty.lowercase()"),
290+
])
291+
class TargetClass(
292+
var targetProperty: String
293+
) {
294+
companion object
295+
}
296+
""".trimIndent()
297+
)
298+
)
299+
val extensionFunctionCode = compilation.generatedSourceFor("TargetClassKonverter.kt")
300+
println(extensionFunctionCode)
301+
302+
assertSourceEquals(
303+
"""
304+
public fun TargetClass.Companion.fromSourceClass(sourceClass: SourceClass): TargetClass = TargetClass(
305+
targetProperty = sourceClass.let { it.sourceProperty.lowercase() }
306+
)
307+
""".trimIndent(),
308+
extensionFunctionCode
309+
)
310+
}
274311

275312
@Test
276313
fun handleDifferentPackages() {
@@ -280,7 +317,7 @@ data class TargetProperty(val value: String) {
280317
SourceFile.kotlin(
281318
name = "a/SourceClass.kt",
282319
contents =
283-
"""
320+
"""
284321
package a
285322
286323
class SourceClass(val property: String)
@@ -289,7 +326,7 @@ class SourceClass(val property: String)
289326
SourceFile.kotlin(
290327
name = "b/TargetClass.kt",
291328
contents =
292-
"""
329+
"""
293330
package b
294331
295332
import io.mcarle.konvert.api.KonvertFrom
@@ -329,7 +366,7 @@ class TargetClass {
329366
SourceFile.kotlin(
330367
name = "a/SomeClass.kt",
331368
contents =
332-
"""
369+
"""
333370
package a
334371
335372
class SomeClass(val property: String)
@@ -338,7 +375,7 @@ class SomeClass(val property: String)
338375
SourceFile.kotlin(
339376
name = "b/SomeClass.kt",
340377
contents =
341-
"""
378+
"""
342379
package b
343380
import io.mcarle.konvert.api.KonvertFrom
344381
@@ -374,7 +411,7 @@ class SomeClass {
374411
SourceFile.kotlin(
375412
name = "a/SomeClass.kt",
376413
contents =
377-
"""
414+
"""
378415
package a
379416
380417
@@ -384,7 +421,7 @@ class SomeClass(val property: String)
384421
SourceFile.kotlin(
385422
name = "b/SomeClass.kt",
386423
contents =
387-
"""
424+
"""
388425
package b
389426
390427
import io.mcarle.konvert.api.KonvertFrom
@@ -469,7 +506,7 @@ data class SourceClass(val property: String)
469506
code = SourceFile.kotlin(
470507
name = "TestCode.kt",
471508
contents =
472-
"""
509+
"""
473510
import io.mcarle.konvert.api.KonvertFrom
474511
import io.mcarle.konvert.api.Mapping
475512
@@ -503,7 +540,7 @@ class TargetClass(val children: List<TargetClass>) {
503540
SourceFile.kotlin(
504541
name = "a/Person.kt",
505542
contents =
506-
"""
543+
"""
507544
package a
508545
509546
import io.mcarle.konvert.api.KonvertFrom
@@ -520,7 +557,7 @@ data class Person(val firstName: String, val lastName: String, val age: Int, val
520557
SourceFile.kotlin(
521558
name = "b/PersonDto.kt",
522559
contents =
523-
"""
560+
"""
524561
package b
525562
526563
import io.mcarle.konvert.api.KonvertFrom
@@ -578,7 +615,7 @@ data class PersonDto(val firstName: String, val lastName: String, val age: Int,
578615
SourceFile.kotlin(
579616
name = "a/Target.kt",
580617
contents =
581-
"""
618+
"""
582619
package a
583620
584621
import io.mcarle.konvert.api.KonvertFrom
@@ -602,7 +639,7 @@ data class TargetProperty(val value: String) {
602639
SourceFile.kotlin(
603640
name = "b/Source.kt",
604641
contents =
605-
"""
642+
"""
606643
package b
607644
608645
class SourceClass(

0 commit comments

Comments
 (0)