Skip to content

Commit b7187c8

Browse files
committed
Generated valid code when C++ changes method access when overriding.
Signed-off-by: Dimitar Dobrev <[email protected]>
1 parent a2b8614 commit b7187c8

File tree

4 files changed

+27
-15
lines changed

4 files changed

+27
-15
lines changed

src/Generator/Generators/CSharp/CSharpTextTemplate.cs

+3-8
Original file line numberDiff line numberDiff line change
@@ -2223,14 +2223,9 @@ private void CheckArgumentRange(Function method)
22232223

22242224
private static AccessSpecifier GetValidMethodAccess(Method method)
22252225
{
2226-
switch (method.Access)
2227-
{
2228-
case AccessSpecifier.Public:
2229-
return AccessSpecifier.Public;
2230-
default:
2231-
return method.IsOverride ?
2232-
((Class) method.Namespace).GetRootBaseMethod(method).Access : method.Access;
2233-
}
2226+
return method.IsOverride
2227+
? ((Class) method.Namespace).GetRootBaseMethod(method).Access
2228+
: method.Access;
22342229
}
22352230

22362231
private static AccessSpecifier GetValidPropertyAccess(Property property)

tests/CSharpTemp/CSharpTemp.Tests.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,8 @@ public void TestGenerationOfAnotherUnitInSameFile()
210210
[Test]
211211
public void TestPrivateOverride()
212212
{
213-
new HasPrivateOverride().PrivateOverride();
213+
using (var hasOverridesWithChangedAccess = new HasOverridesWithChangedAccess())
214+
hasOverridesWithChangedAccess.PrivateOverride();
214215
}
215216

216217
[Test]

tests/CSharpTemp/CSharpTemp.cpp

+15-3
Original file line numberDiff line numberDiff line change
@@ -469,15 +469,27 @@ int MethodsWithDefaultValues::getA()
469469
return m_foo.A;
470470
}
471471

472-
void HasPrivateOverrideBase::privateOverride(int i)
472+
HasOverridesWithChangedAccessBase::HasOverridesWithChangedAccessBase()
473473
{
474474
}
475475

476-
HasPrivateOverride::HasPrivateOverride()
476+
void HasOverridesWithChangedAccessBase::privateOverride(int i)
477477
{
478478
}
479479

480-
void HasPrivateOverride::privateOverride(int i)
480+
void HasOverridesWithChangedAccessBase::publicOverride()
481+
{
482+
}
483+
484+
HasOverridesWithChangedAccess::HasOverridesWithChangedAccess()
485+
{
486+
}
487+
488+
void HasOverridesWithChangedAccess::privateOverride(int i)
489+
{
490+
}
491+
492+
void HasOverridesWithChangedAccess::publicOverride()
481493
{
482494
}
483495

tests/CSharpTemp/CSharpTemp.h

+7-3
Original file line numberDiff line numberDiff line change
@@ -363,16 +363,20 @@ class DLL_API MethodsWithDefaultValues : public Quux
363363
Foo m_foo;
364364
};
365365

366-
class DLL_API HasPrivateOverrideBase
366+
class DLL_API HasOverridesWithChangedAccessBase
367367
{
368368
public:
369+
HasOverridesWithChangedAccessBase();
369370
virtual void privateOverride(int i = 5);
371+
protected:
372+
virtual void publicOverride();
370373
};
371374

372-
class DLL_API HasPrivateOverride : public HasPrivateOverrideBase
375+
class DLL_API HasOverridesWithChangedAccess : public HasOverridesWithChangedAccessBase
373376
{
374377
public:
375-
HasPrivateOverride();
378+
HasOverridesWithChangedAccess();
379+
void publicOverride();
376380
private:
377381
virtual void privateOverride(int i);
378382
};

0 commit comments

Comments
 (0)