diff --git a/src/Generator/Passes/GetterSetterToPropertyAdvancedPass.cs b/src/Generator/Passes/GetterSetterToPropertyAdvancedPass.cs index d8695414..8fb47dec 100644 --- a/src/Generator/Passes/GetterSetterToPropertyAdvancedPass.cs +++ b/src/Generator/Passes/GetterSetterToPropertyAdvancedPass.cs @@ -15,13 +15,15 @@ namespace CppSharp.Passes { private class PropertyGenerator { + private readonly IDiagnosticConsumer log; private readonly List getters = new List(); private readonly List setters = new List(); private readonly List setMethods = new List(); private readonly List nonSetters = new List(); - public PropertyGenerator(Class @class) + public PropertyGenerator(Class @class, IDiagnosticConsumer log) { + this.log = log; foreach (var method in @class.Methods.Where( m => !m.IsConstructor && !m.IsDestructor && !m.IsOperator && !m.IsSynthetized)) DistributeMethod(method); @@ -57,9 +59,23 @@ namespace CppSharp.Passes var name = GetReadWritePropertyName(getter, afterSet); if (name == afterSet && GetUnderlyingType(getter.OriginalReturnType).Equals( - GetUnderlyingType(setter.Parameters[0].QualifiedType)) && - !type.Methods.Any(m => m != getter && name == m.Name)) + GetUnderlyingType(setter.Parameters[0].QualifiedType))) { + Method g = getter; + foreach (var method in type.Methods.Where(m => m != g && m.Name == name)) + { + var oldName = method.Name; + method.Name = string.Format("get{0}{1}", + char.ToUpperInvariant(method.Name[0]), method.Name.Substring(1)); + log.Debug("Method {0}::{1} renamed to {2}", method.Namespace.Name, oldName, method.Name); + } + foreach (var @event in type.Events.Where(e => e.Name == name)) + { + var oldName = @event.Name; + @event.Name = string.Format("on{0}{1}", + char.ToUpperInvariant(@event.Name[0]), @event.Name.Substring(1)); + log.Debug("Event {0}::{1} renamed to {2}", @event.Namespace.Name, oldName, @event.Name); + } getter.Name = name; GenerateProperty(getter.Namespace, getter, readOnly ? null : setter); goto next; @@ -258,7 +274,7 @@ namespace CppSharp.Passes { bool result = base.VisitClassDecl(@class); - new PropertyGenerator(@class).GenerateProperties(); + new PropertyGenerator(@class, Log).GenerateProperties(); return result; } diff --git a/tests/CSharpTemp/CSharpTemp.Tests.cs b/tests/CSharpTemp/CSharpTemp.Tests.cs index 64691b18..c8200aef 100644 --- a/tests/CSharpTemp/CSharpTemp.Tests.cs +++ b/tests/CSharpTemp/CSharpTemp.Tests.cs @@ -117,4 +117,11 @@ public class CSharpTempTests : GeneratorTestFixture Assert.That(testCopyConstructorVal.A, Is.EqualTo(copyBar.A)); Assert.That(testCopyConstructorVal.B, Is.EqualTo(copyBar.B)); } + + public void TestPropertiesConflictingWithMethod() + { + var p = new P((IQux) new Qux()) { Test = true }; + Assert.That(p.Test, Is.True); + p.GetTest(); + } } \ No newline at end of file diff --git a/tests/CSharpTemp/CSharpTemp.cpp b/tests/CSharpTemp/CSharpTemp.cpp index acad1852..19b5862c 100644 --- a/tests/CSharpTemp/CSharpTemp.cpp +++ b/tests/CSharpTemp/CSharpTemp.cpp @@ -180,6 +180,11 @@ void P::setTest(bool value) } +void P::test() +{ + +} + bool P::isBool() { return false; diff --git a/tests/CSharpTemp/CSharpTemp.h b/tests/CSharpTemp/CSharpTemp.h index 2a0106a7..e8f7aa15 100644 --- a/tests/CSharpTemp/CSharpTemp.h +++ b/tests/CSharpTemp/CSharpTemp.h @@ -128,6 +128,8 @@ public: bool isTest(); void setTest(bool value); + void test(); + bool isBool(); void setIsBool(bool value);