Skip to content

Commit 630fbf2

Browse files
authored
fix: paginator generator nullability bug caused by documents (#1155)
1 parent 849ceb6 commit 630fbf2

File tree

4 files changed

+475
-9
lines changed

4 files changed

+475
-9
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"id": "f71f083b-6e5f-4a3c-9069-464b1f9f6d36",
3+
"type": "bugfix",
4+
"description": "Fix paginator generator `List<*>` & `Map.Entry<String, *>` nullability"
5+
}

codegen/smithy-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/core/KotlinSymbolProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ class KotlinSymbolProvider(private val model: Model, private val settings: Kotli
166166
val fullyQualifiedKeyType = keyReference.fullName
167167

168168
val valueReference = toSymbol(shape.value)
169-
val valueSuffix = if (valueReference.isNullable) "?" else ""
169+
val valueSuffix = if (valueReference.isNullable || shape.isSparse) "?" else ""
170170
val valueType = "${valueReference.name}$valueSuffix"
171171
val fullyQualifiedValueType = "${valueReference.fullName}$valueSuffix"
172172

codegen/smithy-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/rendering/PaginatorGenerator.kt

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -272,18 +272,22 @@ private fun getItemDescriptorOrNull(paginationInfo: PaginationInfo, ctx: Codegen
272272
val itemMember = ctx.model.expectShape(itemMemberId)
273273
val isSparse = itemMember.isSparse
274274
val (collectionLiteral, targetMember) = when (itemMember) {
275-
is MapShape ->
276-
ctx.symbolProvider.toSymbol(itemMember)
277-
.expectProperty(SymbolProperty.ENTRY_EXPRESSION) as String to itemMember
278-
is CollectionShape ->
279-
ctx.symbolProvider.toSymbol(ctx.model.expectShape(itemMember.member.target)).name to ctx.model.expectShape(
280-
itemMember.member.target,
281-
)
275+
is MapShape -> {
276+
val symbol = ctx.symbolProvider.toSymbol(itemMember)
277+
val entryExpression = symbol.expectProperty(SymbolProperty.ENTRY_EXPRESSION) as String
278+
entryExpression to itemMember
279+
}
280+
is CollectionShape -> {
281+
val target = ctx.model.expectShape(itemMember.member.target)
282+
val symbol = ctx.symbolProvider.toSymbol(target)
283+
val literal = symbol.name + if (symbol.isNullable || isSparse) "?" else ""
284+
literal to target
285+
}
282286
else -> error("Unexpected shape type ${itemMember.type}")
283287
}
284288

285289
return ItemDescriptor(
286-
collectionLiteral + if (isSparse) "?" else "",
290+
collectionLiteral,
287291
targetMember,
288292
itemLiteral,
289293
itemPathLiteral,

0 commit comments

Comments
 (0)