You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by je...@apache.org on 2013/06/04 01:20:48 UTC
git commit: THRIFT-1977: Fix to ensure proper C# class names
Updated Branches:
refs/heads/master 3e9371146 -> d65def015
THRIFT-1977: Fix to ensure proper C# class names
Patch: Jens Geyer
Project: http://git-wip-us.apache.org/repos/asf/thrift/repo
Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/d65def01
Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/d65def01
Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/d65def01
Branch: refs/heads/master
Commit: d65def0159ce785488d9e8316d56a1d595bc1408
Parents: 3e93711
Author: Jens Geyer <je...@apache.org>
Authored: Tue Jun 4 01:18:45 2013 +0200
Committer: Jens Geyer <je...@apache.org>
Committed: Tue Jun 4 01:19:53 2013 +0200
----------------------------------------------------------------------
compiler/cpp/src/generate/t_csharp_generator.cc | 37 +++++++++++++++++-
1 files changed, 35 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/thrift/blob/d65def01/compiler/cpp/src/generate/t_csharp_generator.cc
----------------------------------------------------------------------
diff --git a/compiler/cpp/src/generate/t_csharp_generator.cc b/compiler/cpp/src/generate/t_csharp_generator.cc
index 26f1bdf..016e3f8 100644
--- a/compiler/cpp/src/generate/t_csharp_generator.cc
+++ b/compiler/cpp/src/generate/t_csharp_generator.cc
@@ -21,6 +21,8 @@
* details.
*/
+#include <cassert>
+
#include <string>
#include <fstream>
#include <iostream>
@@ -160,6 +162,8 @@ class t_csharp_generator : public t_oop_generator
std::string type_to_enum(t_type* ttype);
std::string prop_name(t_field* tfield);
std::string get_enum_class_name(t_type* type);
+
+ std::string make_valid_csharp_identifier( std::string const & fromName);
bool field_has_default(t_field* tfield) {
return tfield->get_value() != NULL;
@@ -302,7 +306,7 @@ void t_csharp_generator::generate_consts(std::vector<t_const*> consts) {
start_csharp_namespace(f_consts);
indent(f_consts) <<
- "public static class " << program_name_ << "Constants" << endl;
+ "public static class " << make_valid_csharp_identifier(program_name_) << "Constants" << endl;
scope_up(f_consts);
vector<t_const*>::iterator c_iter;
@@ -372,7 +376,7 @@ void t_csharp_generator::print_const_def_value(std::ofstream& out, string name,
}
void t_csharp_generator::print_const_constructor(std::ofstream& out, std::vector<t_const*> consts) {
- indent(out) << "static " << program_name_ << "Constants()" << endl;
+ indent(out) << "static " << make_valid_csharp_identifier(program_name_).c_str() << "Constants()" << endl;
scope_up(out);
vector<t_const*>::iterator c_iter;
for (c_iter = consts.begin(); c_iter != consts.end(); ++c_iter) {
@@ -2246,6 +2250,35 @@ void t_csharp_generator::generate_csharp_property(ofstream& out, t_field* tfield
out << endl;
}
+std::string t_csharp_generator::make_valid_csharp_identifier( std::string const & fromName) {
+ std::string str = fromName;
+ if( str.empty()) {
+ return str;
+ }
+
+ // tests rely on this
+ assert( ('A' < 'Z') && ('a' < 'z') && ('0' < '9'));
+
+ // if the first letter is a number, we add an additional underscore in front of it
+ char c = str.at(0);
+ if( ('0' <= c) && (c <= '9')) {
+ str = "_" + str;
+ }
+
+ // following chars: letter, number or underscore
+ for( size_t i = 0; i < str.size(); ++i) {
+ c = str.at(i);
+ if( (('A' > c) || (c > 'Z')) &&
+ (('a' > c) || (c > 'z')) &&
+ (('0' > c) || (c > '9')) &&
+ ('_' != c) ) {
+ str.replace( i, 1, "_");
+ }
+ }
+
+ return str;
+}
+
std::string t_csharp_generator::prop_name(t_field* tfield) {
string name (tfield->get_name());
name[0] = toupper(name[0]);