Browse Source

Generated valid code when C++ changes method access when overriding.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/534/head
Dimitar Dobrev 10 years ago
parent
commit
b7187c80c7
  1. 11
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs
  2. 3
      tests/CSharpTemp/CSharpTemp.Tests.cs
  3. 18
      tests/CSharpTemp/CSharpTemp.cpp
  4. 10
      tests/CSharpTemp/CSharpTemp.h

11
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -2223,14 +2223,9 @@ namespace CppSharp.Generators.CSharp
private static AccessSpecifier GetValidMethodAccess(Method method) private static AccessSpecifier GetValidMethodAccess(Method method)
{ {
switch (method.Access) return method.IsOverride
{ ? ((Class) method.Namespace).GetRootBaseMethod(method).Access
case AccessSpecifier.Public: : method.Access;
return AccessSpecifier.Public;
default:
return method.IsOverride ?
((Class) method.Namespace).GetRootBaseMethod(method).Access : method.Access;
}
} }
private static AccessSpecifier GetValidPropertyAccess(Property property) private static AccessSpecifier GetValidPropertyAccess(Property property)

3
tests/CSharpTemp/CSharpTemp.Tests.cs

@ -210,7 +210,8 @@ public class CSharpTempTests : GeneratorTestFixture
[Test] [Test]
public void TestPrivateOverride() public void TestPrivateOverride()
{ {
new HasPrivateOverride().PrivateOverride(); using (var hasOverridesWithChangedAccess = new HasOverridesWithChangedAccess())
hasOverridesWithChangedAccess.PrivateOverride();
} }
[Test] [Test]

18
tests/CSharpTemp/CSharpTemp.cpp

@ -469,15 +469,27 @@ int MethodsWithDefaultValues::getA()
return m_foo.A; return m_foo.A;
} }
void HasPrivateOverrideBase::privateOverride(int i) HasOverridesWithChangedAccessBase::HasOverridesWithChangedAccessBase()
{ {
} }
HasPrivateOverride::HasPrivateOverride() void HasOverridesWithChangedAccessBase::privateOverride(int i)
{ {
} }
void HasPrivateOverride::privateOverride(int i) void HasOverridesWithChangedAccessBase::publicOverride()
{
}
HasOverridesWithChangedAccess::HasOverridesWithChangedAccess()
{
}
void HasOverridesWithChangedAccess::privateOverride(int i)
{
}
void HasOverridesWithChangedAccess::publicOverride()
{ {
} }

10
tests/CSharpTemp/CSharpTemp.h

@ -363,16 +363,20 @@ private:
Foo m_foo; Foo m_foo;
}; };
class DLL_API HasPrivateOverrideBase class DLL_API HasOverridesWithChangedAccessBase
{ {
public: public:
HasOverridesWithChangedAccessBase();
virtual void privateOverride(int i = 5); virtual void privateOverride(int i = 5);
protected:
virtual void publicOverride();
}; };
class DLL_API HasPrivateOverride : public HasPrivateOverrideBase class DLL_API HasOverridesWithChangedAccess : public HasOverridesWithChangedAccessBase
{ {
public: public:
HasPrivateOverride(); HasOverridesWithChangedAccess();
void publicOverride();
private: private:
virtual void privateOverride(int i); virtual void privateOverride(int i);
}; };

Loading…
Cancel
Save