Browse Source

Fixed the renaming of methods in forwarded types from secondary bases in dependencies.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/906/head
Dimitar Dobrev 9 years ago
parent
commit
d2426a7db6
  1. 4
      src/Generator/Passes/RenamePass.cs
  2. 12
      tests/NamespacesBase/NamespacesBase.cpp
  3. 11
      tests/NamespacesBase/NamespacesBase.h
  4. 11
      tests/NamespacesDerived/NamespacesDerived.Tests.cs
  5. 8
      tests/NamespacesDerived/NamespacesDerived.cpp
  6. 7
      tests/NamespacesDerived/NamespacesDerived.h

4
src/Generator/Passes/RenamePass.cs

@ -30,6 +30,7 @@ namespace CppSharp.Passes
protected RenamePass() protected RenamePass()
{ {
VisitOptions.VisitFunctionParameters = false;
VisitOptions.VisitFunctionReturnType = false; VisitOptions.VisitFunctionReturnType = false;
VisitOptions.VisitTemplateArguments = false; VisitOptions.VisitTemplateArguments = false;
// these need to be visited but in a different order (see VisitClassDecl) so disable the default order // these need to be visited but in a different order (see VisitClassDecl) so disable the default order
@ -226,6 +227,9 @@ namespace CppSharp.Passes
if (!base.VisitClassDecl(@class)) if (!base.VisitClassDecl(@class))
return false; return false;
if (@class.OriginalClass != null)
VisitClassDecl(@class.OriginalClass);
foreach (var property in @class.Properties.OrderByDescending(p => p.Access)) foreach (var property in @class.Properties.OrderByDescending(p => p.Access))
VisitProperty(property); VisitProperty(property);

12
tests/NamespacesBase/NamespacesBase.cpp

@ -36,3 +36,15 @@ int HasVirtualInCore::virtualInCore(int parameter)
{ {
return 1; return 1;
} }
SecondaryBase::SecondaryBase()
{
}
SecondaryBase::~SecondaryBase()
{
}
void SecondaryBase::function()
{
}

11
tests/NamespacesBase/NamespacesBase.h

@ -65,3 +65,14 @@ public:
HasVirtualInCore(); HasVirtualInCore();
virtual int virtualInCore(int parameter); virtual int virtualInCore(int parameter);
}; };
class DLL_API DerivedFromSecondaryBaseInDependency;
typedef DerivedFromSecondaryBaseInDependency RenameDerivedBeforeBase;
class DLL_API SecondaryBase
{
public:
SecondaryBase();
~SecondaryBase();
void function();
};

11
tests/NamespacesDerived/NamespacesDerived.Tests.cs

@ -4,6 +4,12 @@ using NUnit.Framework;
[TestFixture] [TestFixture]
public class NamespaceDerivedTests public class NamespaceDerivedTests
{ {
[Test]
public void TestCodeGeneration()
{
using (new DerivedFromSecondaryBaseInDependency()) { }
}
[Test] [Test]
public void TestNonRenamedMethod() public void TestNonRenamedMethod()
{ {
@ -27,9 +33,6 @@ public class NamespaceDerivedTests
private class OverrideMethodFromDependency : HasVirtualInDependency private class OverrideMethodFromDependency : HasVirtualInDependency
{ {
public override int VirtualInCore(int parameter) public override int VirtualInCore(int parameter) => 2;
{
return 2;
}
} }
} }

8
tests/NamespacesDerived/NamespacesDerived.cpp

@ -70,3 +70,11 @@ int HasVirtualInDependency::callManagedOverride()
{ {
return managedObject->virtualInCore(0); return managedObject->virtualInCore(0);
} }
DerivedFromSecondaryBaseInDependency::DerivedFromSecondaryBaseInDependency()
{
}
DerivedFromSecondaryBaseInDependency::~DerivedFromSecondaryBaseInDependency()
{
}

7
tests/NamespacesDerived/NamespacesDerived.h

@ -71,6 +71,13 @@ public:
int callManagedOverride(); int callManagedOverride();
}; };
class DLL_API DerivedFromSecondaryBaseInDependency : public Derived, public SecondaryBase
{
public:
DerivedFromSecondaryBaseInDependency();
~DerivedFromSecondaryBaseInDependency();
};
namespace NamespacesBase namespace NamespacesBase
{ {
class DLL_API ClassInNamespaceNamedAfterDependency class DLL_API ClassInNamespaceNamedAfterDependency

Loading…
Cancel
Save