From d06957bf914a025fbf65d7625e1edc78c4bc11ef Mon Sep 17 00:00:00 2001 From: Jens Geyer Date: Wed, 2 Apr 2014 23:21:25 +0200 Subject: [PATCH] THRIFT-2435 Java compiler doesn't like struct member names that are identical to an existing enum or struct type Client: java Patch: Jens Geyer --- compiler/cpp/src/generate/t_java_generator.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc index 9019c48a..9c6b4a5a 100644 --- a/compiler/cpp/src/generate/t_java_generator.cc +++ b/compiler/cpp/src/generate/t_java_generator.cc @@ -270,7 +270,7 @@ public: std::string java_package(); std::string java_type_imports(); std::string java_suppressions(); - std::string type_name(t_type* ttype, bool in_container=false, bool in_init=false, bool skip_generic=false); + std::string type_name(t_type* ttype, bool in_container=false, bool in_init=false, bool skip_generic=false, bool force_namespace = false); std::string base_type_name(t_base_type* tbase, bool in_container=false); std::string declare_field(t_field* tfield, bool init=false, bool comment=false); std::string function_signature(t_function* tfunction, std::string prefix=""); @@ -3073,7 +3073,7 @@ void t_java_generator::generate_deserialize_field(ofstream& out, } out << endl; } else if (type->is_enum()) { - indent(out) << name << " = " << type_name(tfield->get_type(), true, false) + ".findByValue(iprot.readI32());" << endl; + indent(out) << name << " = " << type_name(tfield->get_type(), true, false, false, true) + ".findByValue(iprot.readI32());" << endl; } else { printf("DO NOT KNOW HOW TO DESERIALIZE FIELD '%s' TYPE '%s'\n", tfield->get_name().c_str(), type_name(type).c_str()); @@ -3481,7 +3481,7 @@ void t_java_generator::generate_serialize_list_element(ofstream& out, * @param container Is the type going inside a container? * @return Java type name, i.e. HashMap */ -string t_java_generator::type_name(t_type* ttype, bool in_container, bool in_init, bool skip_generic) { +string t_java_generator::type_name(t_type* ttype, bool in_container, bool in_init, bool skip_generic, bool force_namespace) { // In Java typedefs are just resolved to their real type ttype = get_true_type(ttype); string prefix; @@ -3526,7 +3526,7 @@ string t_java_generator::type_name(t_type* ttype, bool in_container, bool in_ini // Check for namespacing t_program* program = ttype->get_program(); - if (program != NULL && program != program_) { + if ((program != NULL && program != program_) || force_namespace) { string package = program->get_namespace("java"); if (!package.empty()) { return package + "." + ttype->get_name(); -- 2.17.1