From 4806b72edd2aef43675732248688db05334e3720 Mon Sep 17 00:00:00 2001 From: Jason Del Ponte Date: Tue, 15 Dec 2020 14:46:11 -0800 Subject: [PATCH] codegen: fix union serialization cases (#979) Fixes the cases of generated union serializer functions to use the correct types for union members. Fixes #978 --- .../aws/go/codegen/QueryShapeSerVisitor.java | 11 +++++++---- .../aws/go/codegen/XmlShapeSerVisitor.java | 17 ++++++++++------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/QueryShapeSerVisitor.java b/codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/QueryShapeSerVisitor.java index 54d9c57287a..beea7af3121 100644 --- a/codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/QueryShapeSerVisitor.java +++ b/codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/QueryShapeSerVisitor.java @@ -12,6 +12,7 @@ import software.amazon.smithy.go.codegen.GoValueAccessUtils; import software.amazon.smithy.go.codegen.GoWriter; import software.amazon.smithy.go.codegen.SmithyGoDependency; +import software.amazon.smithy.go.codegen.SymbolUtils; import software.amazon.smithy.go.codegen.integration.DocumentShapeSerVisitor; import software.amazon.smithy.go.codegen.integration.ProtocolGenerator.GenerationContext; import software.amazon.smithy.go.codegen.integration.ProtocolUtils; @@ -211,21 +212,23 @@ protected void serializeUnion(GenerationContext context, UnionShape shape) { Set members = new TreeSet<>(shape.getAllMembers().values()); for (MemberShape member : members) { Shape target = context.getModel().expectShape(member.getTarget()); - String exportedMemberName = symbol.getName() + symbolProvider.toMemberName(member); + Symbol memberSymbol = SymbolUtils.createValueSymbolBuilder( + symbolProvider.toMemberName(member), + symbol.getNamespace() + ).build(); - writer.openBlock("case *$L:", "", exportedMemberName, () -> { + writer.openBlock("case *$T:", "", memberSymbol, () -> { String locationName = getSerializedLocationName(member, member.getMemberName()); if (isFlattened(context, member)) { writer.write("objectKey := object.FlatKey($S)", locationName); } else { writer.write("objectKey := object.Key($S)", locationName); } - target.accept(getMemberSerVisitor(member, "uv.Value()", "objectKey")); + target.accept(getMemberSerVisitor(member, "uv.Value", "objectKey")); }); } // Handle unknown union values - writer.openBlock("case *$LUnknown:", "", symbol.getName(), () -> writer.write("fallthrough")); writer.openBlock("default:", "", () -> { writer.write("return fmt.Errorf(\"attempted to serialize unknown member type %T" + " for union %T\", uv, v)"); diff --git a/codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/XmlShapeSerVisitor.java b/codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/XmlShapeSerVisitor.java index 35a959dc55a..7108cbe4309 100644 --- a/codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/XmlShapeSerVisitor.java +++ b/codegen/smithy-aws-go-codegen/src/main/java/software/amazon/smithy/aws/go/codegen/XmlShapeSerVisitor.java @@ -11,6 +11,7 @@ import software.amazon.smithy.go.codegen.GoValueAccessUtils; import software.amazon.smithy.go.codegen.GoWriter; import software.amazon.smithy.go.codegen.SmithyGoDependency; +import software.amazon.smithy.go.codegen.SymbolUtils; import software.amazon.smithy.go.codegen.integration.DocumentShapeSerVisitor; import software.amazon.smithy.go.codegen.integration.ProtocolGenerator.GenerationContext; import software.amazon.smithy.go.codegen.trait.NoSerializeTrait; @@ -183,17 +184,19 @@ protected void serializeUnion(GenerationContext context, UnionShape shape) { Set members = new TreeSet<>(shape.getAllMembers().values()); for (MemberShape member : members) { Shape target = context.getModel().expectShape(member.getTarget()); - Symbol memberSymbol = symbolProvider.toSymbol(member); - String exportedMemberName = symbol.getName() + symbolProvider.toMemberName(member); - - writer.openBlock("case *$L:", "", exportedMemberName, () -> { - writer.write("av := value.MemberElement($S)", memberSymbol.getName()); - target.accept(getMemberSerVisitor(member, "uv.Value()", "av")); + Symbol memberSymbol = SymbolUtils.createValueSymbolBuilder( + symbolProvider.toMemberName(member), + symbol.getNamespace() + ).build(); + + writer.openBlock("case *$T:", "", memberSymbol, () -> { + XmlProtocolUtils.generateXMLStartElement(context, member, "customMemberName", "v"); + writer.write("av := value.MemberElement(customMemberName)"); + target.accept(getMemberSerVisitor(member, "uv.Value", "av")); }); } // Handle unknown union values - writer.openBlock("case *$LUnknown:", "", symbol.getName(), () -> writer.write("fallthrough")); writer.openBlock("default:", "", () -> { writer.write("return fmt.Errorf(\"attempted to serialize unknown member type %T" + " for union %T\", uv, v)");