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;