diff --git a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs index 03756f81..eea86a11 100644 --- a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs +++ b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs @@ -446,8 +446,6 @@ namespace CppSharp.Generators.CSharp NewLine(); WriteStartBraceIndent(); - GenerateDeclContext(@class); - foreach (var method in @class.Methods.Where(m => !ASTUtils.CheckIgnoreMethod(m, Options) && m.Access == AccessSpecifier.Public)) { diff --git a/src/Generator/Passes/MultipleInheritancePass.cs b/src/Generator/Passes/MultipleInheritancePass.cs index 0c7d8450..b2945dcf 100644 --- a/src/Generator/Passes/MultipleInheritancePass.cs +++ b/src/Generator/Passes/MultipleInheritancePass.cs @@ -147,6 +147,8 @@ namespace CppSharp.Passes select new Property(property) { Namespace = @interface }); @interface.Fields.AddRange(@base.Fields); + // avoid conflicts when potentially renaming later + @interface.Declarations.AddRange(@base.Declarations); if (@interface.Bases.Count == 0) { diff --git a/src/Generator/Passes/RenamePass.cs b/src/Generator/Passes/RenamePass.cs index c500e397..70b86224 100644 --- a/src/Generator/Passes/RenamePass.cs +++ b/src/Generator/Passes/RenamePass.cs @@ -37,7 +37,33 @@ namespace CppSharp.Passes Targets = targets; } - public abstract bool Rename(string name, out string newName); + public virtual bool Rename(Declaration decl, out string newName) + { + var method = decl as Method; + if (method != null) + { + var rootBaseMethod = ((Class) method.Namespace).GetRootBaseMethod(method); + if (rootBaseMethod != null && rootBaseMethod != method) + { + newName = rootBaseMethod.Name; + return true; + } + } + + var property = decl as Property; + if (property != null) + { + var rootBaseProperty = ((Class) property.Namespace).GetRootBaseProperty(property); + if (rootBaseProperty != null && rootBaseProperty != property) + { + newName = rootBaseProperty.Name; + return true; + } + } + + newName = decl.Name; + return false; + } public bool IsRenameableDecl(Declaration decl) { @@ -93,7 +119,7 @@ namespace CppSharp.Passes private bool Rename(Declaration decl) { string newName; - if (Rename(decl.Name, out newName) && !AreThereConflicts(decl, newName)) + if (Rename(decl, out newName) && !AreThereConflicts(decl, newName)) decl.Name = newName; return true; } @@ -147,7 +173,7 @@ namespace CppSharp.Passes return false; string newName; - if (Rename(item.Name, out newName)) + if (Rename(item, out newName)) { item.Name = newName; return true; @@ -262,11 +288,13 @@ namespace CppSharp.Passes Targets = targets; } - public override bool Rename(string name, out string newName) + public override bool Rename(Declaration decl, out string newName) { - var replace = Regex.Replace(name, Pattern, Replacement); + if (base.Rename(decl, out newName)) return true; - if (!name.Equals(replace)) + var replace = Regex.Replace(decl.Name, Pattern, Replacement); + + if (!decl.Name.Equals(replace)) { newName = replace; return true; @@ -296,17 +324,17 @@ namespace CppSharp.Passes Pattern = pattern; } - public override bool Rename(string name, out string newName) + public override bool Rename(Declaration decl, out string newName) { - newName = null; + if (base.Rename(decl, out newName)) return true; switch (Pattern) { case RenameCasePattern.LowerCamelCase: - newName = ConvertCaseString(name, RenameCasePattern.LowerCamelCase); + newName = ConvertCaseString(decl.Name, RenameCasePattern.LowerCamelCase); return true; case RenameCasePattern.UpperCamelCase: - newName = ConvertCaseString(name, RenameCasePattern.UpperCamelCase); + newName = ConvertCaseString(decl.Name, RenameCasePattern.UpperCamelCase); return true; } diff --git a/tests/CSharpTemp/CSharpTemp.cpp b/tests/CSharpTemp/CSharpTemp.cpp index 8ce166c6..b06d4816 100644 --- a/tests/CSharpTemp/CSharpTemp.cpp +++ b/tests/CSharpTemp/CSharpTemp.cpp @@ -483,6 +483,10 @@ void SecondaryBase::setProperty(int value) { } +void SecondaryBase::function() +{ +} + void TestOverrideFromSecondaryBase::VirtualMember() { } diff --git a/tests/CSharpTemp/CSharpTemp.h b/tests/CSharpTemp/CSharpTemp.h index d4050719..9cb24b22 100644 --- a/tests/CSharpTemp/CSharpTemp.h +++ b/tests/CSharpTemp/CSharpTemp.h @@ -482,9 +482,21 @@ protected: class DLL_API SecondaryBase { public: + enum Property + { + P1, + P2 + }; + enum Function + { + M1, + M2 + }; + virtual void VirtualMember(); int property(); void setProperty(int value); + void function(); }; class DLL_API TestOverrideFromSecondaryBase : public Foo, public SecondaryBase