From 934a93e39fea7ec157421af91f5cfc5ec94047b0 Mon Sep 17 00:00:00 2001 From: Yeongjong Lee Date: Mon, 23 Dec 2019 08:18:02 +0000 Subject: [PATCH] eolian_mono: check extension part/property existence before generate ExtensionMethods Empty ExtensionMethods class won't be generated. Reviewed-by: Felipe Magno de Almeida Differential Revision: https://phab.enlightenment.org/D10954 --- src/bin/eolian_mono/eolian/mono/klass.hh | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/bin/eolian_mono/eolian/mono/klass.hh b/src/bin/eolian_mono/eolian/mono/klass.hh index e26121c05d..478c6a9c80 100644 --- a/src/bin/eolian_mono/eolian/mono/klass.hh +++ b/src/bin/eolian_mono/eolian/mono/klass.hh @@ -385,7 +385,16 @@ struct klass std::copy(c.properties.begin(), c.properties.end(), std::back_inserter(implementable_properties)); } - if (implementable_properties.size() == 0 && cls.parts.size() == 0) + std::stringstream extension_method_stream; + std::ostream_iterator extension_method_iterator(extension_method_stream); + + if (!as_generator + (*property_extension_method_definition(cls) + << *part_extension_method_definition(cls)) + .generate(extension_method_iterator, std::make_tuple(implementable_properties, cls.parts), context)) + return false; + + if (extension_method_stream.tellp() <= 0) return true; if(!as_generator @@ -393,12 +402,11 @@ struct klass << "#pragma warning disable CS1591\n" // Disabling warnings as DocFx will hide these classes <<"public static class " << (string % "_") << name_helpers::klass_inherit_name(cls) << "_ExtensionMethods {\n" - << *(property_extension_method_definition(cls)) - << *(part_extension_method_definition(cls)) + << extension_method_stream.str() << "}\n" << "#pragma warning restore CS1591\n" << "#endif\n") - .generate(sink, std::make_tuple(cls.namespaces, implementable_properties, cls.parts), context)) + .generate(sink, cls.namespaces, context)) return false; return true;