Skip to content

Commit 0dbf994

Browse files
fix(client): ensure constructed objects are immutable (#367)
1 parent 91f1327 commit 0dbf994

324 files changed

Lines changed: 1278 additions & 1304 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

lithic-java-core/src/main/kotlin/com/lithic/api/core/ClientOptions.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,8 @@ private constructor(
166166
baseUrl,
167167
apiKey!!,
168168
webhookSecret,
169-
headers.toUnmodifiable(),
170-
queryParams.toUnmodifiable(),
169+
headers.toImmutable(),
170+
queryParams.toImmutable(),
171171
responseValidation,
172172
maxRetries,
173173
)

lithic-java-core/src/main/kotlin/com/lithic/api/core/Utils.kt

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ package com.lithic.api.core
44

55
import com.google.common.collect.ImmutableListMultimap
66
import com.google.common.collect.ListMultimap
7-
import com.google.common.collect.Multimaps
87
import com.lithic.api.errors.LithicInvalidDataException
98
import java.util.Collections
109

@@ -13,30 +12,15 @@ internal fun <T : Any> T?.getOrThrow(name: String): T =
1312
this ?: throw LithicInvalidDataException("`${name}` is not present")
1413

1514
@JvmSynthetic
16-
internal fun <T> List<T>.toUnmodifiable(): List<T> {
17-
if (isEmpty()) {
18-
return Collections.emptyList()
19-
}
20-
21-
return Collections.unmodifiableList(this)
22-
}
15+
internal fun <T> List<T>.toImmutable(): List<T> =
16+
if (isEmpty()) Collections.emptyList() else Collections.unmodifiableList(toList())
2317

2418
@JvmSynthetic
25-
internal fun <K, V> Map<K, V>.toUnmodifiable(): Map<K, V> {
26-
if (isEmpty()) {
27-
return Collections.emptyMap()
28-
}
29-
30-
return Collections.unmodifiableMap(this)
31-
}
19+
internal fun <K, V> Map<K, V>.toImmutable(): Map<K, V> =
20+
if (isEmpty()) Collections.emptyMap() else Collections.unmodifiableMap(toMap())
3221

3322
@JvmSynthetic
34-
internal fun <K, V> ListMultimap<K, V>.toUnmodifiable(): ListMultimap<K, V> {
35-
if (isEmpty()) {
36-
return ImmutableListMultimap.of()
37-
}
38-
39-
return Multimaps.unmodifiableListMultimap(this)
40-
}
23+
internal fun <K, V> ListMultimap<K, V>.toImmutable(): ListMultimap<K, V> =
24+
ImmutableListMultimap.copyOf(this)
4125

4226
internal interface Enum

lithic-java-core/src/main/kotlin/com/lithic/api/core/Values.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ private constructor(
389389
override fun toString() = values.toString()
390390

391391
companion object {
392-
@JsonCreator @JvmStatic fun of(values: List<JsonValue>) = JsonArray(values.toUnmodifiable())
392+
@JsonCreator @JvmStatic fun of(values: List<JsonValue>) = JsonArray(values.toImmutable())
393393
}
394394
}
395395

@@ -415,7 +415,7 @@ private constructor(
415415
companion object {
416416
@JsonCreator
417417
@JvmStatic
418-
fun of(values: Map<String, JsonValue>) = JsonObject(values.toUnmodifiable())
418+
fun of(values: Map<String, JsonValue>) = JsonObject(values.toImmutable())
419419
}
420420
}
421421

lithic-java-core/src/main/kotlin/com/lithic/api/core/http/HttpRequest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.google.common.collect.ArrayListMultimap
44
import com.google.common.collect.ListMultimap
55
import com.google.common.collect.Multimap
66
import com.google.common.collect.MultimapBuilder
7-
import com.lithic.api.core.toUnmodifiable
7+
import com.lithic.api.core.toImmutable
88

99
class HttpRequest
1010
private constructor(
@@ -83,8 +83,8 @@ private constructor(
8383
HttpRequest(
8484
checkNotNull(method) { "`method` is required but was not set" },
8585
url,
86-
pathSegments.toUnmodifiable(),
87-
queryParams.toUnmodifiable(),
86+
pathSegments.toImmutable(),
87+
queryParams.toImmutable(),
8888
headers,
8989
body,
9090
)

lithic-java-core/src/main/kotlin/com/lithic/api/errors/LithicError.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import com.fasterxml.jackson.annotation.JsonAnySetter
77
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
88
import com.lithic.api.core.JsonValue
99
import com.lithic.api.core.NoAutoDetect
10-
import com.lithic.api.core.toUnmodifiable
10+
import com.lithic.api.core.toImmutable
1111
import java.util.Objects
1212

1313
@JsonDeserialize(builder = LithicError.Builder::class)
@@ -60,6 +60,6 @@ constructor(
6060
this.additionalProperties.putAll(additionalProperties)
6161
}
6262

63-
fun build(): LithicError = LithicError(additionalProperties.toUnmodifiable())
63+
fun build(): LithicError = LithicError(additionalProperties.toImmutable())
6464
}
6565
}

lithic-java-core/src/main/kotlin/com/lithic/api/models/Account.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import com.lithic.api.core.JsonField
1313
import com.lithic.api.core.JsonMissing
1414
import com.lithic.api.core.JsonValue
1515
import com.lithic.api.core.NoAutoDetect
16-
import com.lithic.api.core.toUnmodifiable
16+
import com.lithic.api.core.toImmutable
1717
import com.lithic.api.errors.LithicInvalidDataException
1818
import java.time.OffsetDateTime
1919
import java.util.Objects
@@ -328,14 +328,14 @@ private constructor(
328328
fun build(): Account =
329329
Account(
330330
accountHolder,
331-
authRuleTokens.map { it.toUnmodifiable() },
331+
authRuleTokens.map { it.toImmutable() },
332332
cardholderCurrency,
333333
spendLimit,
334334
state,
335335
token,
336336
verificationAddress,
337337
created,
338-
additionalProperties.toUnmodifiable(),
338+
additionalProperties.toImmutable(),
339339
)
340340
}
341341

@@ -453,7 +453,7 @@ private constructor(
453453
daily,
454454
lifetime,
455455
monthly,
456-
additionalProperties.toUnmodifiable(),
456+
additionalProperties.toImmutable(),
457457
)
458458
}
459459

@@ -692,7 +692,7 @@ private constructor(
692692
email,
693693
phoneNumber,
694694
token,
695-
additionalProperties.toUnmodifiable(),
695+
additionalProperties.toImmutable(),
696696
)
697697
}
698698

@@ -908,7 +908,7 @@ private constructor(
908908
country,
909909
postalCode,
910910
state,
911-
additionalProperties.toUnmodifiable(),
911+
additionalProperties.toImmutable(),
912912
)
913913
}
914914

lithic-java-core/src/main/kotlin/com/lithic/api/models/AccountHolder.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import com.lithic.api.core.JsonField
1313
import com.lithic.api.core.JsonMissing
1414
import com.lithic.api.core.JsonValue
1515
import com.lithic.api.core.NoAutoDetect
16-
import com.lithic.api.core.toUnmodifiable
16+
import com.lithic.api.core.toImmutable
1717
import com.lithic.api.errors.LithicInvalidDataException
1818
import java.time.OffsetDateTime
1919
import java.util.Objects
@@ -708,8 +708,8 @@ private constructor(
708708
fun build(): AccountHolder =
709709
AccountHolder(
710710
accountToken,
711-
beneficialOwnerEntities.map { it.toUnmodifiable() },
712-
beneficialOwnerIndividuals.map { it.toUnmodifiable() },
711+
beneficialOwnerEntities.map { it.toImmutable() },
712+
beneficialOwnerIndividuals.map { it.toImmutable() },
713713
businessAccountToken,
714714
businessEntity,
715715
controlPerson,
@@ -721,13 +721,13 @@ private constructor(
721721
natureOfBusiness,
722722
phoneNumber,
723723
status,
724-
statusReasons.map { it.toUnmodifiable() },
724+
statusReasons.map { it.toImmutable() },
725725
token,
726726
userType,
727727
verificationApplication,
728-
requiredDocuments.map { it.toUnmodifiable() },
728+
requiredDocuments.map { it.toImmutable() },
729729
websiteUrl,
730-
additionalProperties.toUnmodifiable(),
730+
additionalProperties.toImmutable(),
731731
)
732732
}
733733

@@ -967,9 +967,9 @@ private constructor(
967967
governmentId,
968968
legalBusinessName,
969969
parentCompany,
970-
phoneNumbers.map { it.toUnmodifiable() },
970+
phoneNumbers.map { it.toImmutable() },
971971
entityToken,
972-
additionalProperties.toUnmodifiable(),
972+
additionalProperties.toImmutable(),
973973
)
974974
}
975975

@@ -1187,7 +1187,7 @@ private constructor(
11871187
lastName,
11881188
phoneNumber,
11891189
entityToken,
1190-
additionalProperties.toUnmodifiable(),
1190+
additionalProperties.toImmutable(),
11911191
)
11921192
}
11931193

@@ -1688,9 +1688,9 @@ private constructor(
16881688
AccountHolderVerificationApplication(
16891689
created,
16901690
status,
1691-
statusReasons.map { it.toUnmodifiable() },
1691+
statusReasons.map { it.toImmutable() },
16921692
updated,
1693-
additionalProperties.toUnmodifiable(),
1693+
additionalProperties.toImmutable(),
16941694
)
16951695
}
16961696

lithic-java-core/src/main/kotlin/com/lithic/api/models/AccountHolderCreateParams.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import com.lithic.api.core.BaseSerializer
1414
import com.lithic.api.core.JsonValue
1515
import com.lithic.api.core.NoAutoDetect
1616
import com.lithic.api.core.getOrThrow
17-
import com.lithic.api.core.toUnmodifiable
17+
import com.lithic.api.core.toImmutable
1818
import com.lithic.api.errors.LithicInvalidDataException
1919
import com.lithic.api.models.*
2020
import java.util.Objects
@@ -277,8 +277,8 @@ constructor(
277277
kyb,
278278
kyc,
279279
kycExempt,
280-
additionalQueryParams.mapValues { it.value.toUnmodifiable() }.toUnmodifiable(),
281-
additionalHeaders.mapValues { it.value.toUnmodifiable() }.toUnmodifiable(),
280+
additionalQueryParams.mapValues { it.value.toImmutable() }.toImmutable(),
281+
additionalHeaders.mapValues { it.value.toImmutable() }.toImmutable(),
282282
)
283283
}
284284
}

lithic-java-core/src/main/kotlin/com/lithic/api/models/AccountHolderCreateResponse.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import com.lithic.api.core.JsonField
1313
import com.lithic.api.core.JsonMissing
1414
import com.lithic.api.core.JsonValue
1515
import com.lithic.api.core.NoAutoDetect
16-
import com.lithic.api.core.toUnmodifiable
16+
import com.lithic.api.core.toImmutable
1717
import com.lithic.api.errors.LithicInvalidDataException
1818
import java.time.OffsetDateTime
1919
import java.util.Objects
@@ -261,10 +261,10 @@ private constructor(
261261
created,
262262
externalId,
263263
status,
264-
statusReasons.map { it.toUnmodifiable() },
265-
requiredDocuments.map { it.toUnmodifiable() },
264+
statusReasons.map { it.toImmutable() },
265+
requiredDocuments.map { it.toImmutable() },
266266
token,
267-
additionalProperties.toUnmodifiable(),
267+
additionalProperties.toImmutable(),
268268
)
269269
}
270270

lithic-java-core/src/main/kotlin/com/lithic/api/models/AccountHolderListDocumentsParams.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
package com.lithic.api.models
44

55
import com.lithic.api.core.NoAutoDetect
6-
import com.lithic.api.core.toUnmodifiable
6+
import com.lithic.api.core.toImmutable
77
import com.lithic.api.models.*
88
import java.util.Objects
99

@@ -117,8 +117,8 @@ constructor(
117117
checkNotNull(accountHolderToken) {
118118
"`accountHolderToken` is required but was not set"
119119
},
120-
additionalQueryParams.mapValues { it.value.toUnmodifiable() }.toUnmodifiable(),
121-
additionalHeaders.mapValues { it.value.toUnmodifiable() }.toUnmodifiable(),
120+
additionalQueryParams.mapValues { it.value.toImmutable() }.toImmutable(),
121+
additionalHeaders.mapValues { it.value.toImmutable() }.toImmutable(),
122122
)
123123
}
124124
}

0 commit comments

Comments
 (0)