Updated Branches: refs/heads/master 7b07fbcba -> d1257debc
THRIFT-2106 Fix support for namespaces in GO generator Patch: Emir Habul Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/d1257deb Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/d1257deb Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/d1257deb Branch: refs/heads/master Commit: d1257debcfd4e6622a6e12e6545dd01d7bec6a15 Parents: 7b07fbc Author: Jens Geyer <[email protected]> Authored: Wed Jul 31 13:03:26 2013 +0200 Committer: Jens Geyer <[email protected]> Committed: Wed Jul 31 13:03:26 2013 +0200 ---------------------------------------------------------------------- compiler/cpp/src/generate/t_go_generator.cc | 24 +++++++++++--- lib/go/test/IncludesTest.thrift | 14 ++++++++- lib/go/test/Makefile.am | 3 +- lib/go/test/NamespacedTest.thrift | 40 ++++++++++++++++++++++++ 4 files changed, 75 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/d1257deb/compiler/cpp/src/generate/t_go_generator.cc ---------------------------------------------------------------------- diff --git a/compiler/cpp/src/generate/t_go_generator.cc b/compiler/cpp/src/generate/t_go_generator.cc index 30be799..072ec5b 100644 --- a/compiler/cpp/src/generate/t_go_generator.cc +++ b/compiler/cpp/src/generate/t_go_generator.cc @@ -509,7 +509,7 @@ void t_go_generator::init_generator() f_consts_ << go_package() << - render_includes() << + render_includes() << go_autogen_comment(); f_const_values_ << endl << "func init() {" << endl; @@ -526,8 +526,18 @@ string t_go_generator::render_includes() string unused_prot = ""; for (size_t i = 0; i < includes.size(); ++i) { - result += "\t\"" + gen_package_prefix_ + get_real_go_module(includes[i]) + "\"\n"; - unused_prot += "var _ = " + get_real_go_module(includes[i]) + ".GoUnusedProtection__\n"; + string go_module = get_real_go_module(includes[i]); + size_t found = 0; + for (size_t j = 0; j < go_module.size(); j++) { + // Import statement uses slashes ('/') in namespace + if (go_module[j] == '.') { + go_module[j] = '/'; + found = j + 1; + } + } + + result += "\t\"" + gen_package_prefix_ + go_module + "\"\n"; + unused_prot += "var _ = " + go_module.substr(found) + ".GoUnusedProtection__\n"; } if (includes.size() > 0) { @@ -3092,7 +3102,13 @@ string t_go_generator::type_name(t_type* ttype) t_program* program = ttype->get_program(); if (program != NULL && program != program_) { - return get_real_go_module(program) + "." + ttype->get_name(); + string module(get_real_go_module(program)); + // for namespaced includes, only keep part after dot. + size_t dot = module.rfind('.'); + if (dot != string::npos) { + module = module.substr(dot + 1); + } + return module + "." + ttype->get_name(); } return ttype->get_name(); http://git-wip-us.apache.org/repos/asf/thrift/blob/d1257deb/lib/go/test/IncludesTest.thrift ---------------------------------------------------------------------- diff --git a/lib/go/test/IncludesTest.thrift b/lib/go/test/IncludesTest.thrift index 6c7308b..6f80e6b 100644 --- a/lib/go/test/IncludesTest.thrift +++ b/lib/go/test/IncludesTest.thrift @@ -18,17 +18,23 @@ # include "ThriftTest.thrift" +include "NamespacedTest.thrift" const ThriftTest.UserId USERID = 42 +const NamespacedTest.UserId USERID1 = 41 const ThriftTest.MapType MAPCONSTANT = {'hello':{}, 'goodnight':{}} +const i32 TWO = NamespacedTest.Stuff.TWO +const i32 THREE = NamespacedTest.THREE + struct testStruct { 1: list<ThriftTest.Numberz> listNumbers } struct TestStruct2 { 1: testStruct blah, - 2: ThriftTest.UserId id + 2: ThriftTest.UserId id, + 3: NamespacedTest.Stuff stuff, } service testService extends ThriftTest.SecondService { @@ -42,4 +48,10 @@ service testService extends ThriftTest.SecondService { service ExtendedService extends testService { void extendedMethod(), + NamespacedTest.StuffStruct extendedMethod2(), +} + +service Extended2Service extends NamespacedTest.NamespacedService { + void extendedMethod3(), } + http://git-wip-us.apache.org/repos/asf/thrift/blob/d1257deb/lib/go/test/Makefile.am ---------------------------------------------------------------------- diff --git a/lib/go/test/Makefile.am b/lib/go/test/Makefile.am index b5713c0..9005e99 100644 --- a/lib/go/test/Makefile.am +++ b/lib/go/test/Makefile.am @@ -21,12 +21,13 @@ THRIFT = $(top_srcdir)/compiler/cpp/thrift THRIFTTEST = $(top_srcdir)/test/ThriftTest.thrift # Thrift for GO has problems with complex map keys: THRIFT-2063 -gopath: $(THRIFT) $(THRIFTTEST) IncludesTest.thrift +gopath: $(THRIFT) $(THRIFTTEST) IncludesTest.thrift NamespacedTest.thrift mkdir -p gopath/src grep -v list.*map.*list.*map $(THRIFTTEST) > ThriftTest.thrift $(THRIFT) --gen go:thrift_import=thrift -r IncludesTest.thrift ln -nfs ../../gen-go/ThriftTest gopath/src/ThriftTest ln -nfs ../../gen-go/IncludesTest gopath/src/IncludesTest + ln -nfs ../../gen-go/lib gopath/src/lib ln -nfs ../../../thrift gopath/src/thrift touch gopath http://git-wip-us.apache.org/repos/asf/thrift/blob/d1257deb/lib/go/test/NamespacedTest.thrift ---------------------------------------------------------------------- diff --git a/lib/go/test/NamespacedTest.thrift b/lib/go/test/NamespacedTest.thrift new file mode 100644 index 0000000..1bb2fc4 --- /dev/null +++ b/lib/go/test/NamespacedTest.thrift @@ -0,0 +1,40 @@ +# +# 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. +# + +include "ThriftTest.thrift" + +namespace go lib.go.test.NamespacedTest + +enum Stuff { + ONE = 1, + TWO = 2, +} + +const i32 THREE = 3; + +typedef i64 UserId + +struct StuffStruct { + 2: Stuff stuff, +} + +service NamespacedService { + ThriftTest.UserId getUserID(), +} +
