diff --git a/src/bin/eolian_mono/eolian/mono/events.hh b/src/bin/eolian_mono/eolian/mono/events.hh index 2e4ca32c66..ea37c9ccfe 100644 --- a/src/bin/eolian_mono/eolian/mono/events.hh +++ b/src/bin/eolian_mono/eolian/mono/events.hh @@ -247,16 +247,62 @@ struct event_argument_wrapper_generator std::string evt_name = name_helpers::managed_event_name(evt.name); - return as_generator("/// Event argument wrapper for event .\n" - << "[Efl.Eo.BindingEntity]\n" - << "public class " << name_helpers::managed_event_args_short_name(evt) << " : EventArgs {\n" - << scope_tab << "/// Actual event payload.\n" - << scope_tab << "/// " << documentation_string << "\n" - << scope_tab << "public " << type << " arg { get; set; }\n" - << "}\n\n" - ).generate(sink, std::make_tuple(evt.documentation.summary, *etype), context); + if (!as_generator("/// Event argument wrapper for event .\n" + ).generate(sink, nullptr, context)) + return false; + + std::string since; + + if (!evt.is_beta) + { + since = evt.documentation.since; + + if (since.empty()) + { + auto unit = (const Eolian_Unit*) context_find_tag(context).state; + attributes::klass_def klass(get_klass(evt.klass, unit), unit); + since = klass.documentation.since; + } + + if (!since.empty()) + { + + if (!as_generator( + lit("/// Since EFL ") << evt.documentation.since << ".\n" + ).generate(sink, nullptr, context)) + return false; + } + else + { + EINA_CXX_DOM_LOG_ERR(eolian_mono::domain) << "Event " << evt.name << " of class " << evt.klass.eolian_name + << " is stable but has no 'Since' information."; + // We do not bail out here because there are some cases of this happening upstream. + } + } + + if (!as_generator(lit("/// \n") + << "[Efl.Eo.BindingEntity]\n" + << "public class " << name_helpers::managed_event_args_short_name(evt) << " : EventArgs {\n" + << scope_tab << "/// Actual event payload.\n" + ).generate(sink, nullptr, context)) + return false; + + if (since != "") + { + if (!as_generator(scope_tab << "/// Since EFL " << since << ".\n").generate(sink, nullptr, context)) + return false; + } + + if (!as_generator(scope_tab << "/// \n" + << scope_tab << "/// " << documentation_string << "\n" + << scope_tab << "public " << type << " arg { get; set; }\n" + << "}\n\n" + ).generate(sink, std::make_tuple(evt.documentation.summary, *etype), context)) + return false; + + return true; } } const event_argument_wrapper {}; @@ -413,8 +459,41 @@ struct event_definition_generator { auto library_name = context_find_tag(context).actual_library_name(klass.filename); std::string upper_c_name = utils::to_uppercase(evt.c_name); + if (!as_generator( - scope_tab << "/// Method to raise event "<< event_name << ".\n" + scope_tab << "/// Method to raise event "<< event_name << ".\n" + ).generate(sink, nullptr, context)) + return false; + + if (!evt.is_beta) + { + std::string since = evt.documentation.since; + + if (since.empty()) + { + auto unit = (const Eolian_Unit*) context_find_tag(context).state; + attributes::klass_def klass(get_klass(evt.klass, unit), unit); + since = klass.documentation.since; + } + + if (!since.empty()) + { + + if (!as_generator( + scope_tab << "/// Since EFL " << evt.documentation.since << ".\n" + ).generate(sink, nullptr, context)) + return false; + } + else + { + EINA_CXX_DOM_LOG_ERR(eolian_mono::domain) << "Event " << evt.name << " of class " << evt.klass.eolian_name + << " is stable but has no 'Since' information."; + // We do not bail out here because there are some cases of this happening upstream. + } + } + + if (!as_generator( + scope_tab << "/// \n" << scope_tab << "/// Event to raise.\n" << scope_tab << "public void On" << event_name << "(" << event_args_type << " e)\n" << scope_tab << "{\n" diff --git a/src/tests/efl_mono/dummy_test_iface.eo b/src/tests/efl_mono/dummy_test_iface.eo index a8dd405271..a88147e3d3 100644 --- a/src/tests/efl_mono/dummy_test_iface.eo +++ b/src/tests/efl_mono/dummy_test_iface.eo @@ -1,5 +1,9 @@ interface Dummy.Test_Iface { + [[ Sample interface + + @since 1.23 + ]] methods { emit_nonconflicted { } diff --git a/src/tests/efl_mono/dummy_test_object.eo b/src/tests/efl_mono/dummy_test_object.eo index 6daf07f1a7..1852160623 100644 --- a/src/tests/efl_mono/dummy_test_object.eo +++ b/src/tests/efl_mono/dummy_test_object.eo @@ -101,6 +101,9 @@ function Dummy.FormatCb { }; class Dummy.Test_Object extends Efl.Object implements Dummy.Test_Iface { + [[ Simple test class + + @since 1.23 ]] methods { return_object { return: Dummy.Test_Object;