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
Write("{0}", @class.Name); Write("{0}", @class.Name);
if (@class.IsStatic)
Write(" abstract sealed");
if (@class.IsOpaque) if (@class.IsOpaque)
{ {
WriteLine(";"); WriteLine(";");

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

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

1
tests/Basic/Basic.Tests.cs

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

9
tests/Basic/Basic.h

@ -291,6 +291,15 @@ private:
int TestStaticClass::Add(int a, int b) { return a + b; } 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 class HasIgnoredField
{ {

Loading…
Cancel
Save