Added support for C# partial class generation when the csharp_partial attribute is used on a table/struct.

This commit is contained in:
Oli Wilkinson
2016-01-21 15:30:13 +00:00
parent 491e970943
commit dbf6702371
4 changed files with 12 additions and 3 deletions

View File

@@ -403,6 +403,7 @@ class Parser {
known_attributes_.insert("bit_flags"); known_attributes_.insert("bit_flags");
known_attributes_.insert("original_order"); known_attributes_.insert("original_order");
known_attributes_.insert("nested_flatbuffer"); known_attributes_.insert("nested_flatbuffer");
known_attributes_.insert("csharp_partial");
} }
~Parser() { ~Parser() {

View File

@@ -659,7 +659,15 @@ static void GenStruct(const LanguageParameters &lang, const Parser &parser,
// int o = __offset(offset); return o != 0 ? bb.getType(o + i) : default; // int o = __offset(offset); return o != 0 ? bb.getType(o + i) : default;
// } // }
GenComment(struct_def.doc_comment, code_ptr, &lang.comment_config); GenComment(struct_def.doc_comment, code_ptr, &lang.comment_config);
code += std::string("public ") + lang.unsubclassable_decl; code += "public ";
if (lang.language == IDLOptions::kCSharp &&
struct_def.attributes.Lookup("csharp_partial")) {
// generate a partial class for this C# struct/table
code += "partial ";
}
else {
code += lang.unsubclassable_decl;
}
code += "class " + struct_def.name + lang.inheritance_marker; code += "class " + struct_def.name + lang.inheritance_marker;
code += struct_def.fixed ? "Struct" : "Table"; code += struct_def.fixed ? "Struct" : "Table";
code += " {\n"; code += " {\n";

View File

@@ -6,7 +6,7 @@ namespace MyGame.Example
using System; using System;
using FlatBuffers; using FlatBuffers;
public sealed class TestSimpleTableWithEnum : Table { public partial class TestSimpleTableWithEnum : Table {
public static TestSimpleTableWithEnum GetRootAsTestSimpleTableWithEnum(ByteBuffer _bb) { return GetRootAsTestSimpleTableWithEnum(_bb, new TestSimpleTableWithEnum()); } public static TestSimpleTableWithEnum GetRootAsTestSimpleTableWithEnum(ByteBuffer _bb) { return GetRootAsTestSimpleTableWithEnum(_bb, new TestSimpleTableWithEnum()); }
public static TestSimpleTableWithEnum GetRootAsTestSimpleTableWithEnum(ByteBuffer _bb, TestSimpleTableWithEnum obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } public static TestSimpleTableWithEnum GetRootAsTestSimpleTableWithEnum(ByteBuffer _bb, TestSimpleTableWithEnum obj) { return (obj.__init(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
public TestSimpleTableWithEnum __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; } public TestSimpleTableWithEnum __init(int _i, ByteBuffer _bb) { bb_pos = _i; bb = _bb; return this; }

View File

@@ -12,7 +12,7 @@ union Any { Monster, TestSimpleTableWithEnum } // TODO: add more elements
struct Test { a:short; b:byte; } struct Test { a:short; b:byte; }
table TestSimpleTableWithEnum { table TestSimpleTableWithEnum (csharp_partial) {
color: Color = Green; color: Color = Green;
} }