diff --git a/src/bin/eolian_mono/eolian/mono/klass.hh b/src/bin/eolian_mono/eolian/mono/klass.hh
index f1b89abc71..c10bfb3fda 100644
--- a/src/bin/eolian_mono/eolian/mono/klass.hh
+++ b/src/bin/eolian_mono/eolian/mono/klass.hh
@@ -398,7 +398,7 @@ struct klass
context);
auto native_inherit_name = name_helpers::klass_native_inherit_name(cls);
auto inherit_name = name_helpers::klass_inherit_name(cls);
- auto implementable_methods = helpers::get_all_implementable_methods(cls, context);
+ auto implementable_methods = cls.functions;
bool root = !helpers::has_regular_ancestor(cls);
auto const& indent = current_indentation(inative_cxt);
@@ -430,7 +430,7 @@ struct klass
if(!as_generator(
indent << scope_tab << "/// Gets the list of Eo operations to override.\n"
<< indent << scope_tab << "/// The list of Eo operations to be overload.\n"
- << indent << scope_tab << "public override System.Collections.Generic.List GetEoOps(System.Type type)\n"
+ << indent << scope_tab << "public override System.Collections.Generic.List GetEoOps(System.Type type, bool includeInherited)\n"
<< indent << scope_tab << "{\n"
<< indent << scope_tab << scope_tab << "var descs = new System.Collections.Generic.List();\n"
)
@@ -452,8 +452,22 @@ struct klass
).generate(sink, attributes::unused, inative_cxt))
return false;
+ if(!as_generator(
+ indent << scope_tab << scope_tab << "if (includeInherited)\n"
+ << indent << scope_tab(2) << "{\n"
+ << indent << scope_tab(3) << "var all_interfaces = type.GetInterfaces();\n"
+ << indent << scope_tab(3) << "foreach (var iface in all_interfaces)\n"
+ << indent << scope_tab(3) << "{\n"
+ << indent << scope_tab(4) << "var moredescs = ((Efl.Eo.NativeClass)iface.GetCustomAttributes(false)?.FirstOrDefault(attr => attr is Efl.Eo.NativeClass))?.GetEoOps(type, false);\n"
+ << indent << scope_tab(4) << "if (moredescs != null)\n"
+ << indent << scope_tab(5) << "descs.AddRange(moredescs);\n"
+ << indent << scope_tab(3) << "}\n"
+ << indent << scope_tab(2) << "}\n"
+ ).generate(sink, attributes::unused, inative_cxt))
+ return false;
+
if (!root || context_find_tag(context).current_wrapper_kind != class_context::concrete)
- if(!as_generator(indent << scope_tab << scope_tab << "descs.AddRange(base.GetEoOps(type));\n").generate(sink, attributes::unused, inative_cxt))
+ if(!as_generator(indent << scope_tab << scope_tab << "descs.AddRange(base.GetEoOps(type, false));\n").generate(sink, attributes::unused, inative_cxt))
return false;
if(!as_generator(
diff --git a/src/bindings/mono/eo_mono/EoWrapper.cs b/src/bindings/mono/eo_mono/EoWrapper.cs
index 688de85cae..1805071175 100644
--- a/src/bindings/mono/eo_mono/EoWrapper.cs
+++ b/src/bindings/mono/eo_mono/EoWrapper.cs
@@ -357,7 +357,7 @@ public abstract class EoWrapper : IWrapper, IDisposable
/// Gets the list of Eo operations to override.
/// The list of Eo operations to be overload.
- public override System.Collections.Generic.List GetEoOps(Type type)
+ public override System.Collections.Generic.List GetEoOps(Type type, bool includeInherited)
{
var descs = new System.Collections.Generic.List();
diff --git a/src/bindings/mono/eo_mono/iwrapper.cs b/src/bindings/mono/eo_mono/iwrapper.cs
index 6b7719e61f..a03e48a326 100644
--- a/src/bindings/mono/eo_mono/iwrapper.cs
+++ b/src/bindings/mono/eo_mono/iwrapper.cs
@@ -351,26 +351,8 @@ public class Globals
if (nativeClass != null)
{
Eina.Log.Debug("nativeClass != null");
- var descs = nativeClass.GetEoOps(type);
+ var descs = nativeClass.GetEoOps(type, true);
var count = descs.Count;
-
- var all_interfaces = type.GetInterfaces();
- var base_interfaces = type.BaseType.GetInterfaces();
- foreach (var iface in all_interfaces)
- {
- if (!System.Array.Exists(base_interfaces, element => element == iface))
- {
- var nc = GetNativeClass(iface);
- if (nc != null)
- {
- var moredescs = nc.GetEoOps(type);
- Eina.Log.Debug($"adding {moredescs.Count} more descs to registration");
- descs.AddRange(moredescs);
- count = descs.Count;
- }
- }
- }
-
IntPtr descs_ptr = IntPtr.Zero;
if (count > 0)
@@ -753,7 +735,7 @@ public static class Config
public abstract class NativeClass : System.Attribute
{
public abstract IntPtr GetEflClass();
- public abstract System.Collections.Generic.List GetEoOps(System.Type type);
+ public abstract System.Collections.Generic.List GetEoOps(System.Type type, bool includeInherited);
}
/// Attribute for private native classes.
@@ -766,7 +748,7 @@ public class PrivateNativeClass : NativeClass
return IntPtr.Zero;
}
- public override System.Collections.Generic.List GetEoOps(System.Type type)
+ public override System.Collections.Generic.List GetEoOps(System.Type type, bool includeInherited)
{
return null;
}