Commit 9b8a814c authored by Wouter van Oortmerssen's avatar Wouter van Oortmerssen

Merge pull request #3742 from evolutional/cs-partial

Added support for C# partial class generation using attribute
parents 491e9709 dbf67023
...@@ -403,6 +403,7 @@ class Parser { ...@@ -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() {
......
...@@ -659,7 +659,15 @@ static void GenStruct(const LanguageParameters &lang, const Parser &parser, ...@@ -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";
......
...@@ -6,7 +6,7 @@ namespace MyGame.Example ...@@ -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; }
......
...@@ -12,7 +12,7 @@ union Any { Monster, TestSimpleTableWithEnum } // TODO: add more elements ...@@ -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;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment