From 656a17305093a1fda754b669f4cb9ce4e98ec2d1 Mon Sep 17 00:00:00 2001 From: Jens Geyer Date: Sat, 3 Aug 2013 10:22:39 +0200 Subject: [PATCH] THRIFT-2112 Error in Go generator when using typedefs in map keys Patch: Emir Habul --- compiler/cpp/src/generate/t_go_generator.cc | 9 ++++----- lib/go/test/IncludesTest.thrift | 10 ++++++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/compiler/cpp/src/generate/t_go_generator.cc b/compiler/cpp/src/generate/t_go_generator.cc index 43c47665..288bfab4 100644 --- a/compiler/cpp/src/generate/t_go_generator.cc +++ b/compiler/cpp/src/generate/t_go_generator.cc @@ -3175,15 +3175,14 @@ string t_go_generator::type_to_enum(t_type* type) */ string t_go_generator::type_to_go_key_type(t_type* type) { - string go_type = type_to_go_type(type); + t_type* resolved_type = type; - while (type->is_typedef()) { - type = ((t_typedef*)type)->get_type(); + while (resolved_type->is_typedef()) { + resolved_type = ((t_typedef*)resolved_type)->get_type(); } - if (type->is_map() || type->is_list() || type->is_set()) { + if (resolved_type->is_map() || resolved_type->is_list() || resolved_type->is_set()) { throw "Cannot produce a valid type for a Go map key: " + type_to_go_type(type) + " - aborting."; - } return type_to_go_type(type); diff --git a/lib/go/test/IncludesTest.thrift b/lib/go/test/IncludesTest.thrift index 6f80e6b8..3f60321f 100644 --- a/lib/go/test/IncludesTest.thrift +++ b/lib/go/test/IncludesTest.thrift @@ -55,3 +55,13 @@ service Extended2Service extends NamespacedTest.NamespacedService { void extendedMethod3(), } +typedef map > > ComplexMapType + +struct ComplexMapStruct { + 1: ComplexMapType complex, +} + +service ComplexMapService { + ComplexMapStruct transformMap(1: ComplexMapStruct input), +} + -- 2.17.1