Browse Source

Fix regressed overloaded potential setters

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1261/head
Dimitar Dobrev 6 years ago
parent
commit
0e0513feaa
  1. 11
      src/Generator/Passes/GetterSetterToPropertyPass.cs
  2. 2
      tests/Common/Common.Tests.cs
  3. 10
      tests/Common/Common.cpp
  4. 3
      tests/Common/Common.h

11
src/Generator/Passes/GetterSetterToPropertyPass.cs

@ -138,7 +138,7 @@ namespace CppSharp.Passes
Class @class = (Class) method.Namespace; Class @class = (Class) method.Namespace;
Property property = @class.Properties.Find( Property property = @class.Properties.Find(
p => p.Field == null && p => p.Field == null &&
(p.Name == name || ((!isSetter && p.HasSetter && p.Name == name) ||
(isSetter && p.HasGetter && (isSetter && p.HasGetter &&
GetReadWritePropertyName(p.GetMethod, name) == name)) && GetReadWritePropertyName(p.GetMethod, name) == name)) &&
((p.HasGetter && ((p.HasGetter &&
@ -189,6 +189,15 @@ namespace CppSharp.Passes
continue; continue;
} }
Property conflict = newProperties.LastOrDefault(
p => p.Name == property.Name && p != property &&
p.ExplicitInterfaceImpl == property.ExplicitInterfaceImpl);
if (conflict != null && conflict.GetMethod != null)
{
conflict.GetMethod.GenerationKind = GenerationKind.Generate;
conflict.GetMethod = null;
}
RenameConflictingMethods(@class, property); RenameConflictingMethods(@class, property);
CombineComments(property); CombineComments(property);
} }

2
tests/Common/Common.Tests.cs

@ -527,6 +527,8 @@ public class CommonTests : GeneratorTestFixture
Assert.That(prop.StartWithVerb, Is.EqualTo(25)); Assert.That(prop.StartWithVerb, Is.EqualTo(25));
prop.StartWithVerb = 5; prop.StartWithVerb = 5;
Assert.That(prop.Contains('a'), Is.EqualTo(prop.Contains1("a")));
} }
using (var prop = new HasOverridenSetter()) using (var prop = new HasOverridenSetter())
{ {

10
tests/Common/Common.cpp

@ -642,6 +642,16 @@ void TestProperties::setStartWithVerb(int value)
{ {
} }
bool TestProperties::contains(char c)
{
return true;
}
bool TestProperties::contains(const char* str)
{
return true;
}
HasOverridenSetter::HasOverridenSetter() HasOverridenSetter::HasOverridenSetter()
{ {
} }

3
tests/Common/Common.h

@ -619,6 +619,9 @@ public:
int startWithVerb(); int startWithVerb();
void setStartWithVerb(int value); void setStartWithVerb(int value);
bool contains(char c);
bool contains(const char* str);
private: private:
int FieldValue; int FieldValue;
double _refToPrimitiveInSetter; double _refToPrimitiveInSetter;

Loading…
Cancel
Save