THRIFT-4269 Don't append '.' to Erlang namespace if it ends in '_'.
Client: Erlang
Patch: David Hull <david.hull@openx.com>
This closes #1319
diff --git a/compiler/cpp/src/thrift/generate/t_erl_generator.cc b/compiler/cpp/src/thrift/generate/t_erl_generator.cc
index 6054a4e..9a5ce16 100644
--- a/compiler/cpp/src/thrift/generate/t_erl_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_erl_generator.cc
@@ -1019,19 +1019,14 @@
}
string t_erl_generator::type_name(t_type* ttype) {
- string prefix = "";
- string erl_namespace = ttype->get_program()->get_namespace("erl");
-
- if (erl_namespace.length() > 0) {
- prefix = erl_namespace + ".";
+ string prefix = ttype->get_program()->get_namespace("erl");
+ size_t prefix_length = prefix.length();
+ if (prefix_length > 0 && prefix[prefix_length - 1] != '_') {
+ prefix += '.';
}
string name = ttype->get_name();
- if (ttype->is_struct() || ttype->is_xception() || ttype->is_service()) {
- name = ttype->get_name();
- }
-
return atomify(prefix + name);
}
diff --git a/lib/erl/Makefile.am b/lib/erl/Makefile.am
index 2502d31..92e2204 100644
--- a/lib/erl/Makefile.am
+++ b/lib/erl/Makefile.am
@@ -19,6 +19,7 @@
THRIFT = ../../compiler/cpp/thrift
THRIFT_FILES = $(wildcard test/*.thrift) \
+ ../../test/ConstantsDemo.thrift \
../../test/NameConflictTest.thrift \
../../test/ThriftTest.thrift
diff --git a/lib/erl/test/test_const.erl b/lib/erl/test/test_const.erl
new file mode 100644
index 0000000..ed0cf03
--- /dev/null
+++ b/lib/erl/test/test_const.erl
@@ -0,0 +1,34 @@
+%%
+%% Licensed to the Apache Software Foundation (ASF) under one
+%% or more contributor license agreements. See the NOTICE file
+%% distributed with this work for additional information
+%% regarding copyright ownership. The ASF licenses this file
+%% to you under the Apache License, Version 2.0 (the
+%% "License"); you may not use this file except in compliance
+%% with the License. You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing,
+%% software distributed under the License is distributed on an
+%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+%% KIND, either express or implied. See the License for the
+%% specific language governing permissions and limitations
+%% under the License.
+%%
+
+-module(test_const).
+
+-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
+
+-include("gen-erl/constants_demo_types.hrl").
+
+namespace_test() ->
+ %% Verify that records produced by ConstantsDemo.thrift have the right namespace.
+ io:format(user, "in namespace_test()\n", []),
+ {struct, _} = constants_demo_types:struct_info('consts_thing'),
+ {struct, _} = constants_demo_types:struct_info('consts_Blah'),
+ ok.
+
+-endif. %% TEST
diff --git a/test/ConstantsDemo.thrift b/test/ConstantsDemo.thrift
index b99bdb2..a54534d 100644
--- a/test/ConstantsDemo.thrift
+++ b/test/ConstantsDemo.thrift
@@ -18,6 +18,7 @@
*/
namespace cpp yozone
+namespace erl consts_
struct thing {
1: i32 hello,