diff options
author | Jose <jose@zeroc.com> | 2017-11-07 22:01:17 +0100 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2017-11-07 22:01:17 +0100 |
commit | 667aa3707718d8cce9c8a7fc50874b084d5fc36c (patch) | |
tree | 494c3af2e669abe9be7f91e9cab9bcedfbb36547 /cpp/src/slice2cs/Gen.cpp | |
parent | C# build failure (diff) | |
download | ice-667aa3707718d8cce9c8a7fc50874b084d5fc36c.tar.bz2 ice-667aa3707718d8cce9c8a7fc50874b084d5fc36c.tar.xz ice-667aa3707718d8cce9c8a7fc50874b084d5fc36c.zip |
Add ice_intialize partial method to C# class and structs
Bug ICE-8193
Diffstat (limited to 'cpp/src/slice2cs/Gen.cpp')
-rw-r--r-- | cpp/src/slice2cs/Gen.cpp | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/cpp/src/slice2cs/Gen.cpp b/cpp/src/slice2cs/Gen.cpp index a5356187564..50be45d1382 100644 --- a/cpp/src/slice2cs/Gen.cpp +++ b/cpp/src/slice2cs/Gen.cpp @@ -2340,10 +2340,22 @@ Slice::Gen::TypesVisitor::visitClassDefEnd(const ClassDefPtr& p) { _out << sp << nl << "#endregion"; } + const bool isAbstract = p->isLocal() && p->isAbstract(); - if(!allDataMembers.empty()) + _out << sp << nl << "partial void ice_initialize();"; + if(allDataMembers.empty()) + { + _out << sp << nl << "#region Constructors"; + _out << sp; + emitGeneratedCodeAttribute(); + _out << nl << (isAbstract ? "protected " : "public ") << name << spar << epar; + _out << sb; + _out << nl << "ice_initialize();"; + _out << eb; + _out << sp << nl << "#endregion"; // Constructors + } + else { - const bool isAbstract = p->isLocal() && p->isAbstract(); const bool propertyMapping = p->hasMetaData("cs:property"); _out << sp << nl << "#region Constructors"; @@ -2357,6 +2369,7 @@ Slice::Gen::TypesVisitor::visitClassDefEnd(const ClassDefPtr& p) } _out << sb; writeDataMemberInitializers(dataMembers, scope, DotNet::ICloneable, propertyMapping); + _out << nl << "ice_initialize();"; _out << eb; _out << sp; @@ -2396,6 +2409,7 @@ Slice::Gen::TypesVisitor::visitClassDefEnd(const ClassDefPtr& p) } _out << " = " << paramName << ';'; } + _out << nl << "ice_initialize();"; _out << eb; _out << sp << nl << "#endregion"; // Constructors @@ -2965,7 +2979,7 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p) _out << sp << nl << "#endregion"; // Slice data members const bool isClass = !isValueType(p); - + _out << sp << nl << "partial void ice_initialize();"; _out << sp << nl << "#region Constructor"; if(isClass) { @@ -2981,6 +2995,7 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p) _out << nl << "public " << name << "()"; _out << sb; writeDataMemberInitializers(dataMembers, scope, DotNet::ICloneable, propertyMapping); + _out << nl << "ice_initialize();"; _out << eb; } @@ -3010,6 +3025,7 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p) } _out << " = " << paramName << ';'; } + _out << nl << "ice_initialize();"; _out << eb; _out << sp << nl << "#endregion"; // Constructor(s) |