Browse Source

Prepended 'get' and 'on' to methods and events respectively when there's a conflict with a newly generated property.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/280/head
Dimitar Dobrev 11 years ago
parent
commit
cbf4afae1f
  1. 24
      src/Generator/Passes/GetterSetterToPropertyAdvancedPass.cs
  2. 7
      tests/CSharpTemp/CSharpTemp.Tests.cs
  3. 5
      tests/CSharpTemp/CSharpTemp.cpp
  4. 2
      tests/CSharpTemp/CSharpTemp.h

24
src/Generator/Passes/GetterSetterToPropertyAdvancedPass.cs

@ -15,13 +15,15 @@ namespace CppSharp.Passes @@ -15,13 +15,15 @@ namespace CppSharp.Passes
{
private class PropertyGenerator
{
private readonly IDiagnosticConsumer log;
private readonly List<Method> getters = new List<Method>();
private readonly List<Method> setters = new List<Method>();
private readonly List<Method> setMethods = new List<Method>();
private readonly List<Method> nonSetters = new List<Method>();
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 @@ -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 @@ -258,7 +274,7 @@ namespace CppSharp.Passes
{
bool result = base.VisitClassDecl(@class);
new PropertyGenerator(@class).GenerateProperties();
new PropertyGenerator(@class, Log).GenerateProperties();
return result;
}

7
tests/CSharpTemp/CSharpTemp.Tests.cs

@ -117,4 +117,11 @@ public class CSharpTempTests : GeneratorTestFixture @@ -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();
}
}

5
tests/CSharpTemp/CSharpTemp.cpp

@ -180,6 +180,11 @@ void P::setTest(bool value) @@ -180,6 +180,11 @@ void P::setTest(bool value)
}
void P::test()
{
}
bool P::isBool()
{
return false;

2
tests/CSharpTemp/CSharpTemp.h

@ -128,6 +128,8 @@ public: @@ -128,6 +128,8 @@ public:
bool isTest();
void setTest(bool value);
void test();
bool isBool();
void setIsBool(bool value);

Loading…
Cancel
Save