Skip to content

Commit

Permalink
fix: Remove backticks from reserved words before adding an identifier…
Browse files Browse the repository at this point in the history
… suffix (#566)
  • Loading branch information
jbelkins committed Jun 22, 2023
1 parent a33997b commit fa4c779
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 24 deletions.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

plugins {
kotlin("jvm") version "1.5.0" apply false
id("org.jetbrains.dokka") version "1.4.20"
id("org.jetbrains.dokka") version "1.4.30"
}

allprojects {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import software.amazon.smithy.swift.codegen.integration.serde.TimestampEncodeGen
import software.amazon.smithy.swift.codegen.integration.serde.TimestampHelpers
import software.amazon.smithy.swift.codegen.integration.serde.getDefaultValueOfShapeType
import software.amazon.smithy.swift.codegen.model.isBoxed
import software.amazon.smithy.swift.codegen.removeSurroundingBackticks

abstract class MemberShapeEncodeFormURLGenerator(
private val ctx: ProtocolGenerator.GenerationContext,
Expand All @@ -39,7 +40,7 @@ abstract class MemberShapeEncodeFormURLGenerator(
) {
val memberName = ctx.symbolProvider.toMemberName(member)
val resolvedMemberName = customizations.customNameTraitGenerator(member, member.memberName)
val nestedContainer = "${memberName}Container"
val nestedContainer = "${memberName.removeSurroundingBackticks()}Container"
writer.openBlock("if let $memberName = $memberName {", "}") {
writer.openBlock("if !$memberName.isEmpty {", "}") {
if (member.hasTrait(XmlFlattenedTrait::class.java) || customizations.alwaysUsesFlattenedCollections()) {
Expand Down Expand Up @@ -82,7 +83,7 @@ abstract class MemberShapeEncodeFormURLGenerator(
}
}
is MapShape -> {
val nestedContainerName = "${memberName}Container$level"
val nestedContainerName = "${memberName.removeSurroundingBackticks()}Container$level"
writer.write("var $nestedContainerName = $containerName.nestedContainer(keyedBy: \$N.self, forKey: \$N(\"${nestedMemberResolvedName}\"))", ClientRuntimeTypes.Serde.Key, ClientRuntimeTypes.Serde.Key)
writer.openBlock("if let $nestedMemberTargetName = $nestedMemberTargetName {", "}") {
renderWrappedMapMemberItem(nestedMemberTargetName, nestedMemberTarget, nestedContainerName, level)
Expand All @@ -108,7 +109,7 @@ abstract class MemberShapeEncodeFormURLGenerator(
}

private fun renderNestedListEntryMember(nestedMemberTargetName: String, nestedMemberTarget: CollectionShape, nestedMember: MemberShape, nestedMemberResolvedName: String, containerName: String, level: Int) {
var nestedContainerName = "${nestedMemberTargetName}Container$level"
var nestedContainerName = "${nestedMemberTargetName.removeSurroundingBackticks()}Container$level"
writer.write("var $nestedContainerName = $containerName.nestedContainer(keyedBy: \$N.self, forKey: \$N(\"${nestedMemberResolvedName}\"))", ClientRuntimeTypes.Serde.Key, ClientRuntimeTypes.Serde.Key)
renderListMemberItems(nestedMemberTargetName, nestedMemberTarget, nestedContainerName, level + 1)
}
Expand All @@ -125,7 +126,7 @@ abstract class MemberShapeEncodeFormURLGenerator(
val nestedMemberTargetName = "${nestedMemberTarget.id.name.toLowerCase()}$level"
val defaultMemberName = if (level == 0) member.memberName else "member"
val resolvedMemberName = customizations.customNameTraitGenerator(member, defaultMemberName).indexAdvancedBy1("index$level")
val nestedContainerName = "${memberName}Container$level"
val nestedContainerName = "${memberName.removeSurroundingBackticks()}Container$level"

writer.openBlock("for (index$level, $nestedMemberTargetName) in $memberName.enumerated() {", "}") {
when (nestedMemberTarget) {
Expand Down Expand Up @@ -166,7 +167,7 @@ abstract class MemberShapeEncodeFormURLGenerator(
}
}
private fun renderFlattenedListContainer(nestedMemberTargetName: String, nestedMemberTarget: CollectionShape, nestedMember: MemberShape, memberName: String, member: MemberShape, containerName: String, level: Int) {
var nestedContainerName = "${nestedMemberTargetName}Container$level"
var nestedContainerName = "${nestedMemberTargetName.removeSurroundingBackticks()}Container$level"
val defaultMemberName = if (level == 0) memberName else "member"
val memberResolvedName = customizations.customNameTraitGenerator(member, defaultMemberName)
writer.write("var $nestedContainerName = $containerName.nestedContainer(keyedBy: \$N.self, forKey: \$N(\"${memberResolvedName}\"))", ClientRuntimeTypes.Serde.Key, ClientRuntimeTypes.Serde.Key)
Expand All @@ -183,7 +184,7 @@ abstract class MemberShapeEncodeFormURLGenerator(
renderFlattenedMapMemberItem(memberName, member, memberTarget, containerName)
}
} else {
val nestedContainer = "${memberName}Container"
val nestedContainer = "${memberName.removeSurroundingBackticks()}Container"
writer.write("var $nestedContainer = $containerName.nestedContainer(keyedBy: \$N.self, forKey: \$N(\"$resolvedMemberName\"))", ClientRuntimeTypes.Serde.Key, ClientRuntimeTypes.Serde.Key)
renderWrappedMapMemberItem(memberName, memberTarget, nestedContainer)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ abstract class MemberShapeDecodeGenerator(
is ListShape -> "append"
else -> "append"
}
val listContainerName = "${memberName}Container"
val listContainerName = "${memberName.removeSurroundingBackticks()}Container"
val decodeVerb = if (originalSymbol.isBoxed()) "decodeIfPresent" else "decode"
writer.write(
"let \$L = try $containerName.$decodeVerb(\$L.self, forKey: .\$L)",
Expand Down Expand Up @@ -226,7 +226,7 @@ abstract class MemberShapeDecodeGenerator(
val decodedMemberName = "${memberName.removeSurroundingBackticks()}Decoded$level"
val nestedTarget = ctx.model.expectShape(shape.value.target)
if (level == 0) {
val topLevelContainerName = "${memberName}Container"
val topLevelContainerName = "${memberName.removeSurroundingBackticks()}Container"
val decodeVerb = if (originalSymbol.isBoxed()) "decodeIfPresent" else "decode"
writer.write(
"let \$L = try $containerName.$decodeVerb(\$L.self, forKey: .\$L)",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ abstract class MemberShapeEncodeGenerator(
}
// this only gets called in a recursive loop where there is a map nested deeply inside a list
is MapShape -> {
val topLevelContainerName = "${memberName}Container"
val topLevelContainerName = "${memberName.removeSurroundingBackticks()}Container"
writer.write("var \$L = $containerName.nestedContainer(keyedBy: \$N.self)", topLevelContainerName, ClientRuntimeTypes.Serde.Key)
renderEncodeMap(ctx, memberName, topLevelContainerName, targetShape, level)
}
Expand Down Expand Up @@ -174,12 +174,12 @@ abstract class MemberShapeEncodeGenerator(
val keyName = if (level == 0) ".$memberName" else "${ClientRuntimeTypes.Serde.Key}(stringValue: $dictKey${level - 1})"
when (targetShape) {
is CollectionShape -> {
val topLevelContainerName = "${memberName}Container"
val topLevelContainerName = "${memberName.removeSurroundingBackticks()}Container"
writer.write("var \$L = $containerName.nestedUnkeyedContainer(forKey: \$L)", topLevelContainerName, keyName)
renderEncodeList(ctx, memberName, topLevelContainerName, targetShape, level)
}
is MapShape -> {
val topLevelContainerName = "${memberName}Container"
val topLevelContainerName = "${memberName.removeSurroundingBackticks()}Container"
writer.write(
"var \$L = $containerName.nestedContainer(keyedBy: \$N.self, forKey: \$L)",
topLevelContainerName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import software.amazon.smithy.swift.codegen.integration.serde.xml.collection.Map
import software.amazon.smithy.swift.codegen.model.hasTrait
import software.amazon.smithy.swift.codegen.model.isBoxed
import software.amazon.smithy.swift.codegen.model.recursiveSymbol
import software.amazon.smithy.swift.codegen.removeSurroundingBackticks

abstract class MemberShapeDecodeXMLGenerator(
private val ctx: ProtocolGenerator.GenerationContext,
Expand Down Expand Up @@ -68,7 +69,7 @@ abstract class MemberShapeDecodeXMLGenerator(

writer.openBlock(ifNilOrIfLetStatement, "} else {") {
val memberBuffer = "${memberName}Buffer"
val memberContainerName = "${memberName}Container"
val memberContainerName = "${memberName.removeSurroundingBackticks()}Container"
val (memberTargetSymbol, memberTargetSymbolName) = nestedMemberTargetSymbolMapper(memberTarget)
writer.write("let $memberContainerName = try $containerUsedForDecoding.decodeIfPresent($memberTargetSymbolName.self, forKey: $currContainerKey)")
writer.write("var $memberBuffer:\$T = nil", memberTargetSymbol)
Expand All @@ -89,8 +90,8 @@ abstract class MemberShapeDecodeXMLGenerator(
val nestedMemberTargetSymbol = ctx.symbolProvider.toSymbol(nestedMemberTarget)

val nestedMemberTargetType = "${nestedMemberTarget.type.name.toLowerCase()}"
val nestedContainerName = "${nestedMemberTargetType}Container$level"
val nestedMemberBuffer = "${nestedMemberTargetType}Buffer$level"
val nestedContainerName = "${nestedMemberTargetType.removeSurroundingBackticks()}Container$level"
val nestedMemberBuffer = "${nestedMemberTargetType.removeSurroundingBackticks()}Buffer$level"
val insertMethod = when (memberTarget) {
is SetShape -> "insert"
is ListShape -> "append"
Expand Down Expand Up @@ -199,7 +200,7 @@ abstract class MemberShapeDecodeXMLGenerator(

private fun renderMapMemberItems(memberShape: MemberShape, memberContainerName: String, memberBuffer: String, parentKeyedContainerName: String, currentContainerKey: String, level: Int = 0) {
val memberTarget = ctx.model.expectShape(memberShape.target)
val itemInContainerName = "${memberTarget.type.name.toLowerCase()}Container$level"
val itemInContainerName = "${memberTarget.type.name.toLowerCase().removeSurroundingBackticks()}Container$level"

val nestedBuffer = "nestedBuffer$level"
val memberTargetSymbol = ctx.symbolProvider.toSymbol(memberTarget)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import software.amazon.smithy.swift.codegen.integration.serde.getDefaultValueOfS
import software.amazon.smithy.swift.codegen.integration.serde.xml.trait.XMLNameTraitGenerator
import software.amazon.smithy.swift.codegen.integration.serde.xml.trait.XMLNamespaceTraitGenerator
import software.amazon.smithy.swift.codegen.model.isBoxed
import software.amazon.smithy.swift.codegen.removeSurroundingBackticks

abstract class MemberShapeEncodeXMLGenerator(
private val ctx: ProtocolGenerator.GenerationContext,
Expand All @@ -40,7 +41,7 @@ abstract class MemberShapeEncodeXMLGenerator(
val originalMemberName = member.memberName
val memberName = ctx.symbolProvider.toMemberName(member)
val resolvedMemberName = XMLNameTraitGenerator.construct(member, originalMemberName)
val nestedContainer = "${memberName}Container"
val nestedContainer = "${memberName.removeSurroundingBackticks()}Container"
if (member.hasTrait(XmlFlattenedTrait::class.java)) {
writer.openBlock("if $memberName.isEmpty {", "} else {") {
writer.write("var $nestedContainer = $containerName.nestedUnkeyedContainer(forKey: \$N(\"$resolvedMemberName\"))", ClientRuntimeTypes.Serde.Key)
Expand Down Expand Up @@ -74,7 +75,7 @@ abstract class MemberShapeEncodeXMLGenerator(
renderNestedListEntryMember(nestedMemberTargetName, nestedMemberTarget, nestedMember, nestedMemberResolvedName, containerName, level)
}
is MapShape -> {
val nestedContainerName = "${memberName}Container$level"
val nestedContainerName = "${memberName.removeSurroundingBackticks()}Container$level"
writer.write("var $nestedContainerName = $containerName.nestedContainer(keyedBy: \$N.self, forKey: \$N(\"${nestedMemberResolvedName}\"))", ClientRuntimeTypes.Serde.Key, ClientRuntimeTypes.Serde.Key)
writer.openBlock("if let $nestedMemberTargetName = $nestedMemberTargetName {", "}") {
renderWrappedMapMemberItem(nestedMemberTargetName, nestedMemberTarget, nestedContainerName, level)
Expand All @@ -91,15 +92,15 @@ abstract class MemberShapeEncodeXMLGenerator(
}
else -> {
val nestedMemberNamespaceTraitGenerator = XMLNamespaceTraitGenerator.construct(nestedMember)
val nestedContainerName = "${memberName}Container$level"
val nestedContainerName = "${memberName.removeSurroundingBackticks()}Container$level"
renderItem(writer, nestedMemberNamespaceTraitGenerator, nestedContainerName, containerName, nestedMemberTargetName, nestedMemberTarget, nestedMemberResolvedName)
}
}
}
}

private fun renderNestedListEntryMember(nestedMemberTargetName: String, nestedMemberTarget: CollectionShape, nestedMember: MemberShape, nestedMemberResolvedName: String, containerName: String, level: Int) {
var nestedContainerName = "${nestedMemberTargetName}Container$level"
var nestedContainerName = "${nestedMemberTargetName.removeSurroundingBackticks()}Container$level"
writer.write("var $nestedContainerName = $containerName.nestedContainer(keyedBy: \$N.self, forKey: \$N(\"${nestedMemberResolvedName}\"))", ClientRuntimeTypes.Serde.Key, ClientRuntimeTypes.Serde.Key)
XMLNamespaceTraitGenerator.construct(nestedMember)?.render(writer, nestedContainerName)?.appendKey(xmlNamespaces)
renderListMemberItems(nestedMemberTargetName, nestedMemberTarget, nestedContainerName, level + 1)
Expand All @@ -117,7 +118,7 @@ abstract class MemberShapeEncodeXMLGenerator(
val nestedMemberTargetName = "${nestedMemberTarget.id.name.toLowerCase()}$level"
val defaultMemberName = if (level == 0) memberName else "member"
val resolvedMemberName = XMLNameTraitGenerator.construct(member, defaultMemberName)
val nestedContainerName = "${memberName}Container$level"
val nestedContainerName = "${memberName.removeSurroundingBackticks()}Container$level"

writer.openBlock("for $nestedMemberTargetName in $memberName {", "}") {
when (nestedMemberTarget) {
Expand Down Expand Up @@ -157,7 +158,7 @@ abstract class MemberShapeEncodeXMLGenerator(
}
}
private fun renderFlattenedListContainer(nestedMemberTargetName: String, nestedMemberTarget: CollectionShape, nestedMember: MemberShape, memberName: String, member: MemberShape, containerName: String, level: Int) {
var nestedContainerName = "${nestedMemberTargetName}Container$level"
var nestedContainerName = "${nestedMemberTargetName.removeSurroundingBackticks()}Container$level"
val defaultMemberName = if (level == 0) memberName else "member"
val memberResolvedName = XMLNameTraitGenerator.construct(member, defaultMemberName)
writer.write("var $nestedContainerName = $containerName.nestedContainer(keyedBy: \$N.self, forKey: \$N(\"${memberResolvedName}\"))", ClientRuntimeTypes.Serde.Key, ClientRuntimeTypes.Serde.Key)
Expand Down Expand Up @@ -348,7 +349,7 @@ abstract class MemberShapeEncodeXMLGenerator(
if (isBoxed) {
writer.openBlock("if let $memberName = $memberName {", "}") {
val namespaceTraitGenerator = XMLNamespaceTraitGenerator.construct(member)
val nestedContainerName = "${memberName}Container"
val nestedContainerName = "${memberName.removeSurroundingBackticks()}Container"
renderItem(writer, namespaceTraitGenerator, nestedContainerName, containerName, memberName, memberTarget, resolvedMemberName)
}
} else {
Expand All @@ -367,7 +368,7 @@ abstract class MemberShapeEncodeXMLGenerator(
val originalMemberName = member.memberName
val namespaceTraitGenerator = XMLNamespaceTraitGenerator.construct(member)
val resolvedMemberName = XMLNameTraitGenerator.construct(member, originalMemberName).toString()
val nestedContainerName = "${memberName}Container"
val nestedContainerName = "${memberName.removeSurroundingBackticks()}Container"
renderItem(writer, namespaceTraitGenerator, nestedContainerName, containerName, memberName, memberTarget, resolvedMemberName)
}

Expand Down

0 comments on commit fa4c779

Please sign in to comment.