Skip to content

Commit 3f6c7e9

Browse files
committed
introduce Tuple2 and Tuple3 typealias and simplify code-generation
moreover: - fix since for mapA1 newly introduce in v3.2.0
1 parent 3f3d4b7 commit 3f6c7e9

31 files changed

+352
-338
lines changed

gradle/code-generation/src/main/kotlin/code-generation.generate.gradle.kts

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ fun createStringBuilder(packageName: String): java.lang.StringBuilder = StringBu
2222

2323
val numOfArgs = 9
2424

25-
fun getTupleName(numOfValues: Int) = when (numOfValues) {
25+
fun getKotlinTupleName(numOfValues: Int) = when (numOfValues) {
2626
2 -> "Pair"
2727
3 -> "Triple"
28-
else -> "Tuple$numOfValues"
28+
else -> error("should only be used for Pair and Triple")
2929
}
3030

31-
fun getArgName(argNum: Int) = when (argNum) {
31+
fun getKotlinArgName(argNum: Int) = when (argNum) {
3232
1 -> "first"
3333
2 -> "second"
3434
3 -> "third"
@@ -106,7 +106,7 @@ val generate: TaskProvider<Task> = tasks.register("generate") {
106106
val constructorProperties = numbers.joinToString(",\n ") { "val a$it: A$it" }
107107
val parameters = numbers.joinToString(", ") { "a$it: A$it" }
108108
val arguments = numbers.joinToString(", ") { "a$it" }
109-
val tupleName = getTupleName(upperNumber)
109+
val tupleName = "Tuple$upperNumber"
110110
val tupleLike = createStringBuilder(packageName)
111111
val tuple = createStringBuilder(packageName)
112112
val properties = numbers.joinToString(", ") { "a$it" }
@@ -272,8 +272,8 @@ val generate: TaskProvider<Task> = tasks.register("generate") {
272272
val typeArgs2 = numbers2.joinToString(", ") { "A${it + upperNumber}" }
273273
val typeArgs3 = numbers3.joinToString(", ") { "A$it" }
274274

275-
val toTupleName = getTupleName(upperNumber3)
276-
val tupleNameParam = getTupleName(upperNumber2)
275+
val toTupleName = "Tuple$upperNumber3"
276+
val tupleNameParam = "Tuple$upperNumber2"
277277
val tupleNameParamLowercase = tupleNameParam.lowercase()
278278

279279
val params = numbers2.joinToString(", ") { "a${it + upperNumber}: A${it + upperNumber}" }
@@ -327,13 +327,13 @@ val generate: TaskProvider<Task> = tasks.register("generate") {
327327
}
328328
}
329329

330-
fun appendMap(argNameToMap: String, argNameCapitalized: String) =
330+
fun appendMap(argNameToMap: String, argNameCapitalized: String, tupleName: String, since: String) =
331331
tupleMap.append(
332332
"""
333333
|/**
334334
|* Maps [$tupleName.$argNameToMap] with the given [transform] function and returns a new [$tupleName].
335335
|*
336-
|* @since 2.0.0
336+
|* @since $since
337337
|*/
338338
|fun <$typeArgs, A${argNum}New> $tupleName<$typeArgs>.map$argNameCapitalized(
339339
| transform: (A$argNum) -> A${argNum}New
@@ -343,23 +343,23 @@ val generate: TaskProvider<Task> = tasks.register("generate") {
343343
""".trimMargin()
344344
).appendLine()
345345

346-
appendMap("a$argNum", "A$argNum")
346+
appendMap("a$argNum", "A$argNum", tupleName, if (upperNumber <= 3) "3.2.0" else "2.0.0")
347347
if (upperNumber <= 3) {
348-
val argName = getArgName(argNum)
348+
val argName = getKotlinArgName(argNum)
349349
val argNameCapitalized = argName.replaceFirstChar {
350350
if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString()
351351
}
352-
appendMap(argName, argNameCapitalized)
352+
appendMap(argName, argNameCapitalized, getKotlinTupleName(upperNumber), "2.0.0")
353353
}
354354

355355
if (upperNumber >= 3) {
356356
val numberWithoutDrop = numbers.toMutableList()
357357
numberWithoutDrop.remove(argNum)
358358
val typeArgsWithoutDrop = numberWithoutDrop.joinToString(", ") { "A${it}" }
359359
val upperNumberOneLower = upperNumber - 1
360-
val tupleNameOneLower = getTupleName(upperNumberOneLower)
360+
val tupleNameOneLower = "Tuple$upperNumberOneLower"
361361

362-
fun appendDrop(argNameToDrop: String, argNameCapitalized: String) =
362+
fun appendDrop(argNameToDrop: String, argNameCapitalized: String, tupleName: String) =
363363
tupleDrop.append(
364364
"""
365365
|/**
@@ -377,13 +377,13 @@ val generate: TaskProvider<Task> = tasks.register("generate") {
377377
""".trimMargin()
378378
).appendLine()
379379

380-
appendDrop("a$argNum", "A$argNum")
380+
appendDrop("a$argNum", "A$argNum", tupleName)
381381
if (upperNumber <= 3) {
382-
val argName = getArgName(argNum)
382+
val argName = getKotlinArgName(argNum)
383383
val argNameCapitalized = argName.replaceFirstChar {
384384
if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString()
385385
}
386-
appendDrop(argName, argNameCapitalized)
386+
appendDrop(argName, argNameCapitalized, getKotlinTupleName(upperNumber))
387387
}
388388
}
389389
}
@@ -1089,7 +1089,7 @@ val generateTest: TaskProvider<Task> = tasks.register("generateTest") {
10891089
val numbers = (1..upperNumber)
10901090
fun typeArgs(num: Int) = argsTypeParameters.take(num).joinToString(", ")
10911091
val typeArgs = typeArgs(upperNumber)
1092-
val tupleName = getTupleName(upperNumber)
1092+
val tupleName = "Tuple$upperNumber"
10931093

10941094
fun vals(num: Int) = argValues.take(num).withIndex().joinToString("\n ") { (index, value) ->
10951095
"val a${index + 1} = $value"
@@ -1185,7 +1185,7 @@ val generateTest: TaskProvider<Task> = tasks.register("generateTest") {
11851185
appendMapTest("A$argNum")
11861186

11871187
if (upperNumber <= 3) {
1188-
val argNameToMap = getArgName(argNum)
1188+
val argNameToMap = getKotlinArgName(argNum)
11891189
val argNameCapitalized = argNameToMap.replaceFirstChar {
11901190
if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString()
11911191
}
@@ -1216,7 +1216,7 @@ val generateTest: TaskProvider<Task> = tasks.register("generateTest") {
12161216
}
12171217

12181218
if (upperNumber <= 3) {
1219-
val argNameToDrop = getArgName(argNum)
1219+
val argNameToDrop = getKotlinArgName(argNum)
12201220
val argNameCapitalized = argNameToDrop.replaceFirstChar {
12211221
if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString()
12221222
}
@@ -1324,7 +1324,7 @@ val generateTest: TaskProvider<Task> = tasks.register("generateTest") {
13241324

13251325
(1..numOfArgs - upperNumber).forEach { upperNumber2 ->
13261326
val upperNumber3 = upperNumber + upperNumber2
1327-
val toTupleName = getTupleName(upperNumber3)
1327+
val toTupleName = "Tuple$upperNumber3"
13281328
val vals3AsArgs = (upperNumber + 1..upperNumber3).joinToString(", ") { "a$it" }
13291329

13301330
tupleAppendTest.append(
@@ -1344,7 +1344,7 @@ val generateTest: TaskProvider<Task> = tasks.register("generateTest") {
13441344
).appendLine().appendLine()
13451345

13461346
if (upperNumber2 > 1) {
1347-
val tupleNameParam = getTupleName(upperNumber2)
1347+
val tupleNameParam = "Tuple$upperNumber2"
13481348
val tupleNameParamCreation =
13491349
"""$tupleNameParam($vals3AsArgs)"""
13501350

src/commonMain/generated/kotlin/ch/tutteli/kbox/Tuple2Like.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ interface Tuple2Like<A1, A2> {
2525
operator fun component2(): A2
2626

2727
/**
28-
* Turns this class into a [Pair].
28+
* Turns this class into a [Tuple2].
2929
*
3030
* @since 2.1.0
3131
*/
32-
fun toTuple(): Pair<A1, A2> = Pair(
32+
fun toTuple(): Tuple2<A1, A2> = Tuple2(
3333
component1(),
3434
component2()
3535
)

src/commonMain/generated/kotlin/ch/tutteli/kbox/Tuple3Like.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ interface Tuple3Like<A1, A2, A3> {
3232
operator fun component3(): A3
3333

3434
/**
35-
* Turns this class into a [Triple].
35+
* Turns this class into a [Tuple3].
3636
*
3737
* @since 2.1.0
3838
*/
39-
fun toTuple(): Triple<A1, A2, A3> = Triple(
39+
fun toTuple(): Tuple3<A1, A2, A3> = Tuple3(
4040
component1(),
4141
component2(),
4242
component3()

src/commonMain/generated/kotlin/ch/tutteli/kbox/tupleAppend.kt

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,134 +6,134 @@
66
package ch.tutteli.kbox
77

88
/**
9-
* Transforms this [Pair] into a [Triple] by appending the given arguments.
9+
* Transforms this [Tuple2] into a [Tuple3] by appending the given arguments.
1010
*
1111
* @since 2.0.0
1212
*/
13-
fun <A1, A2, A3> Pair<A1, A2>.append(
13+
fun <A1, A2, A3> Tuple2<A1, A2>.append(
1414
a3: A3
15-
): Triple<A1, A2, A3> =
16-
Triple(a1, a2, a3)
15+
): Tuple3<A1, A2, A3> =
16+
Tuple3(a1, a2, a3)
1717

1818
/**
19-
* Transforms this [Pair] into a [Tuple4] by appending the given arguments.
19+
* Transforms this [Tuple2] into a [Tuple4] by appending the given arguments.
2020
*
2121
* @since 2.0.0
2222
*/
23-
fun <A1, A2, A3, A4> Pair<A1, A2>.append(
23+
fun <A1, A2, A3, A4> Tuple2<A1, A2>.append(
2424
a3: A3, a4: A4
2525
): Tuple4<A1, A2, A3, A4> =
2626
Tuple4(a1, a2, a3, a4)
2727

2828
/**
29-
* Transforms this [Pair] into a [Tuple5] by appending the given arguments.
29+
* Transforms this [Tuple2] into a [Tuple5] by appending the given arguments.
3030
*
3131
* @since 2.0.0
3232
*/
33-
fun <A1, A2, A3, A4, A5> Pair<A1, A2>.append(
33+
fun <A1, A2, A3, A4, A5> Tuple2<A1, A2>.append(
3434
a3: A3, a4: A4, a5: A5
3535
): Tuple5<A1, A2, A3, A4, A5> =
3636
Tuple5(a1, a2, a3, a4, a5)
3737

3838
/**
39-
* Transforms this [Pair] into a [Tuple6] by appending the given arguments.
39+
* Transforms this [Tuple2] into a [Tuple6] by appending the given arguments.
4040
*
4141
* @since 2.0.0
4242
*/
43-
fun <A1, A2, A3, A4, A5, A6> Pair<A1, A2>.append(
43+
fun <A1, A2, A3, A4, A5, A6> Tuple2<A1, A2>.append(
4444
a3: A3, a4: A4, a5: A5, a6: A6
4545
): Tuple6<A1, A2, A3, A4, A5, A6> =
4646
Tuple6(a1, a2, a3, a4, a5, a6)
4747

4848
/**
49-
* Transforms this [Pair] into a [Tuple7] by appending the given arguments.
49+
* Transforms this [Tuple2] into a [Tuple7] by appending the given arguments.
5050
*
5151
* @since 2.0.0
5252
*/
53-
fun <A1, A2, A3, A4, A5, A6, A7> Pair<A1, A2>.append(
53+
fun <A1, A2, A3, A4, A5, A6, A7> Tuple2<A1, A2>.append(
5454
a3: A3, a4: A4, a5: A5, a6: A6, a7: A7
5555
): Tuple7<A1, A2, A3, A4, A5, A6, A7> =
5656
Tuple7(a1, a2, a3, a4, a5, a6, a7)
5757

5858
/**
59-
* Transforms this [Pair] into a [Tuple8] by appending the given arguments.
59+
* Transforms this [Tuple2] into a [Tuple8] by appending the given arguments.
6060
*
6161
* @since 2.0.0
6262
*/
6363
@Suppress("LongParameterList")
64-
fun <A1, A2, A3, A4, A5, A6, A7, A8> Pair<A1, A2>.append(
64+
fun <A1, A2, A3, A4, A5, A6, A7, A8> Tuple2<A1, A2>.append(
6565
a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8
6666
): Tuple8<A1, A2, A3, A4, A5, A6, A7, A8> =
6767
Tuple8(a1, a2, a3, a4, a5, a6, a7, a8)
6868

6969
/**
70-
* Transforms this [Pair] into a [Tuple9] by appending the given arguments.
70+
* Transforms this [Tuple2] into a [Tuple9] by appending the given arguments.
7171
*
7272
* @since 2.0.0
7373
*/
7474
@Suppress("LongParameterList")
75-
fun <A1, A2, A3, A4, A5, A6, A7, A8, A9> Pair<A1, A2>.append(
75+
fun <A1, A2, A3, A4, A5, A6, A7, A8, A9> Tuple2<A1, A2>.append(
7676
a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8, a9: A9
7777
): Tuple9<A1, A2, A3, A4, A5, A6, A7, A8, A9> =
7878
Tuple9(a1, a2, a3, a4, a5, a6, a7, a8, a9)
7979

8080
/**
81-
* Transforms this [Triple] into a [Tuple4] by appending the given arguments.
81+
* Transforms this [Tuple3] into a [Tuple4] by appending the given arguments.
8282
*
8383
* @since 2.0.0
8484
*/
85-
fun <A1, A2, A3, A4> Triple<A1, A2, A3>.append(
85+
fun <A1, A2, A3, A4> Tuple3<A1, A2, A3>.append(
8686
a4: A4
8787
): Tuple4<A1, A2, A3, A4> =
8888
Tuple4(a1, a2, a3, a4)
8989

9090
/**
91-
* Transforms this [Triple] into a [Tuple5] by appending the given arguments.
91+
* Transforms this [Tuple3] into a [Tuple5] by appending the given arguments.
9292
*
9393
* @since 2.0.0
9494
*/
95-
fun <A1, A2, A3, A4, A5> Triple<A1, A2, A3>.append(
95+
fun <A1, A2, A3, A4, A5> Tuple3<A1, A2, A3>.append(
9696
a4: A4, a5: A5
9797
): Tuple5<A1, A2, A3, A4, A5> =
9898
Tuple5(a1, a2, a3, a4, a5)
9999

100100
/**
101-
* Transforms this [Triple] into a [Tuple6] by appending the given arguments.
101+
* Transforms this [Tuple3] into a [Tuple6] by appending the given arguments.
102102
*
103103
* @since 2.0.0
104104
*/
105-
fun <A1, A2, A3, A4, A5, A6> Triple<A1, A2, A3>.append(
105+
fun <A1, A2, A3, A4, A5, A6> Tuple3<A1, A2, A3>.append(
106106
a4: A4, a5: A5, a6: A6
107107
): Tuple6<A1, A2, A3, A4, A5, A6> =
108108
Tuple6(a1, a2, a3, a4, a5, a6)
109109

110110
/**
111-
* Transforms this [Triple] into a [Tuple7] by appending the given arguments.
111+
* Transforms this [Tuple3] into a [Tuple7] by appending the given arguments.
112112
*
113113
* @since 2.0.0
114114
*/
115-
fun <A1, A2, A3, A4, A5, A6, A7> Triple<A1, A2, A3>.append(
115+
fun <A1, A2, A3, A4, A5, A6, A7> Tuple3<A1, A2, A3>.append(
116116
a4: A4, a5: A5, a6: A6, a7: A7
117117
): Tuple7<A1, A2, A3, A4, A5, A6, A7> =
118118
Tuple7(a1, a2, a3, a4, a5, a6, a7)
119119

120120
/**
121-
* Transforms this [Triple] into a [Tuple8] by appending the given arguments.
121+
* Transforms this [Tuple3] into a [Tuple8] by appending the given arguments.
122122
*
123123
* @since 2.0.0
124124
*/
125-
fun <A1, A2, A3, A4, A5, A6, A7, A8> Triple<A1, A2, A3>.append(
125+
fun <A1, A2, A3, A4, A5, A6, A7, A8> Tuple3<A1, A2, A3>.append(
126126
a4: A4, a5: A5, a6: A6, a7: A7, a8: A8
127127
): Tuple8<A1, A2, A3, A4, A5, A6, A7, A8> =
128128
Tuple8(a1, a2, a3, a4, a5, a6, a7, a8)
129129

130130
/**
131-
* Transforms this [Triple] into a [Tuple9] by appending the given arguments.
131+
* Transforms this [Tuple3] into a [Tuple9] by appending the given arguments.
132132
*
133133
* @since 2.0.0
134134
*/
135135
@Suppress("LongParameterList")
136-
fun <A1, A2, A3, A4, A5, A6, A7, A8, A9> Triple<A1, A2, A3>.append(
136+
fun <A1, A2, A3, A4, A5, A6, A7, A8, A9> Tuple3<A1, A2, A3>.append(
137137
a4: A4, a5: A5, a6: A6, a7: A7, a8: A8, a9: A9
138138
): Tuple9<A1, A2, A3, A4, A5, A6, A7, A8, A9> =
139139
Tuple9(a1, a2, a3, a4, a5, a6, a7, a8, a9)

0 commit comments

Comments
 (0)