Browse Source

Fixes classes wrongly being assigned as static classes.

Closes #348.
pull/355/head
triton 11 years ago
parent
commit
100d43c2b0
  1. 12
      src/Generator/Passes/CheckStaticClass.cs
  2. 1
      tests/Basic/Basic.Tests.cs
  3. 17
      tests/Basic/Basic.h

12
src/Generator/Passes/CheckStaticClass.cs

@ -45,14 +45,17 @@ namespace CppSharp.Passes @@ -45,14 +45,17 @@ namespace CppSharp.Passes
{
var returnType = function.ReturnType.Type.Desugar();
TagType tag;
if (!returnType.IsPointerTo(out tag))
var tag = returnType as TagType;
if (tag == null)
returnType.IsPointerTo(out tag);
if (tag == null)
return false;
var @class = (Class) function.Namespace;
var decl = tag.Declaration;
if (decl is Class)
if (!(decl is Class))
return false;
return @class.QualifiedOriginalName == decl.QualifiedOriginalName;
@ -79,7 +82,8 @@ namespace CppSharp.Passes @@ -79,7 +82,8 @@ namespace CppSharp.Passes
// If one exists, we assume it's a factory function and the class is
// not meant to be static. It's a simple heuristic but it should be
// good enough for the time being.
if (@class.Functions.Any(ReturnsClassInstance))
if (@class.Functions.Any(ReturnsClassInstance) ||
@class.Methods.Any(ReturnsClassInstance))
return false;
// TODO: We should take C++ friends into account here, they might allow

1
tests/Basic/Basic.Tests.cs

@ -284,6 +284,7 @@ public class BasicTests : GeneratorTestFixture @@ -284,6 +284,7 @@ public class BasicTests : GeneratorTestFixture
Assert.That(TestStaticClass.Add(1, 2), Is.EqualTo(3));
Assert.That(TestStaticClass.OneTwoThree, Is.EqualTo(123));
Assert.That(TestStaticClassDerived.Foo(), Is.EqualTo(0));
TestNotStaticClass.StaticFunction();
}
[Test, Ignore]

17
tests/Basic/Basic.h

@ -347,6 +347,23 @@ private: @@ -347,6 +347,23 @@ private:
int TestStaticClassDerived::Foo() { return 0; }
class DLL_API TestNotStaticClass
{
public:
static TestNotStaticClass StaticFunction();
private:
TestNotStaticClass();
};
TestNotStaticClass::TestNotStaticClass()
{
}
TestNotStaticClass TestNotStaticClass::StaticFunction()
{
return TestNotStaticClass();
}
class HasIgnoredField
{
Base<Derived> fieldOfIgnoredType;

Loading…
Cancel
Save