Browse Source

Reworked static class support in CLI and C#.

pull/249/head
triton 12 years ago
parent
commit
af06f32fd5
  1. 3
      src/Generator/Generators/CLI/CLIHeadersTemplate.cs
  2. 16
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs
  3. 1
      tests/Basic/Basic.Tests.cs
  4. 9
      tests/Basic/Basic.h

3
src/Generator/Generators/CLI/CLIHeadersTemplate.cs

@ -563,6 +563,9 @@ namespace CppSharp.Generators.CLI @@ -563,6 +563,9 @@ namespace CppSharp.Generators.CLI
Write("{0}", @class.Name);
if (@class.IsStatic)
Write(" abstract sealed");
if (@class.IsOpaque)
{
WriteLine(";");

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

@ -488,6 +488,9 @@ namespace CppSharp.Generators.CSharp @@ -488,6 +488,9 @@ namespace CppSharp.Generators.CSharp
foreach (var ctor in @class.Constructors)
{
if (@class.IsStatic)
continue;
if (ctor.IsMoveConstructor)
continue;
@ -497,7 +500,7 @@ namespace CppSharp.Generators.CSharp @@ -497,7 +500,7 @@ namespace CppSharp.Generators.CSharp
tryAddOverload(ctor);
}
if (@class.HasNonTrivialDestructor)
if (@class.HasNonTrivialDestructor && !@class.IsStatic)
foreach (var dtor in @class.Destructors)
tryAddOverload(dtor);
@ -698,6 +701,8 @@ namespace CppSharp.Generators.CSharp @@ -698,6 +701,8 @@ namespace CppSharp.Generators.CSharp
public static bool ShouldGenerateClassNativeField(Class @class)
{
if (@class.IsStatic)
return false;
return @class.IsRefType && (!@class.HasBase || !HasRefBase(@class));
}
@ -712,6 +717,10 @@ namespace CppSharp.Generators.CSharp @@ -712,6 +717,10 @@ namespace CppSharp.Generators.CSharp
if (Driver.Options.GenerateAbstractImpls && @class.IsAbstract)
Write("abstract ");
if (@class.IsStatic)
Write("static ");
// This token needs to directly precede the "class" token.
if (Options.GeneratePartialClasses)
Write("partial ");
@ -743,7 +752,7 @@ namespace CppSharp.Generators.CSharp @@ -743,7 +752,7 @@ namespace CppSharp.Generators.CSharp
}
}
if (bases.Count > 0)
if (bases.Count > 0 && !@class.IsStatic)
Write(" : {0}", string.Join(", ", bases));
}
@ -1750,6 +1759,9 @@ namespace CppSharp.Generators.CSharp @@ -1750,6 +1759,9 @@ namespace CppSharp.Generators.CSharp
public void GenerateClassConstructors(Class @class)
{
if (@class.IsStatic)
return;
// Output a default constructor that takes the native pointer.
GenerateNativeConstructor(@class);

1
tests/Basic/Basic.Tests.cs

@ -205,6 +205,7 @@ public class BasicTests : GeneratorTestFixture @@ -205,6 +205,7 @@ public class BasicTests : GeneratorTestFixture
public void TestStaticClasses()
{
Assert.That(TestStaticClass.Add(1, 2), Is.EqualTo(3));
Assert.That(TestStaticClassDerived.Foo(), Is.EqualTo(0));
}
[Test, Ignore]

9
tests/Basic/Basic.h

@ -291,6 +291,15 @@ private: @@ -291,6 +291,15 @@ private:
int TestStaticClass::Add(int a, int b) { return a + b; }
struct DLL_API TestStaticClassDerived : TestStaticClass
{
static int Foo();
private:
TestStaticClassDerived();
};
int TestStaticClassDerived::Foo() { return 0; }
class HasIgnoredField
{

Loading…
Cancel
Save