diff --git a/src/AST/ClassExtensions.cs b/src/AST/ClassExtensions.cs index bfb3075e..79142a54 100644 --- a/src/AST/ClassExtensions.cs +++ b/src/AST/ClassExtensions.cs @@ -15,6 +15,20 @@ namespace CppSharp.AST return @class.Methods.Where(method => method.Name == function.Name); } + public static bool HasClassInHierarchy(this Class @class, string name) + { + return @class.FindHierarchy(c => c.OriginalName == name || c.Name == name); + } + + public static bool FindHierarchy(this Class @class, + Func func) + { + bool FindHierarchyImpl(Class c, Func f) => func(c) || + c.Bases.Any(b => b.IsClass && FindHierarchyImpl(b.Class, f)); + + return @class.Bases.Any(b => b.IsClass && FindHierarchyImpl(b.Class, func)); + } + public static IEnumerable FindHierarchy(this Class @class, Func> func) where T : Declaration