aboutsummaryrefslogtreecommitdiff
path: root/Examples/test-suite/destructor_methodmodifiers.i
blob: 93db7f2cc6fdf1d09c67b1036c2235e3a5b5d343 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
%module destructor_methodmodifiers

// This test changes the proxy classes so that they cannot be inherited from in the target language
// Previously the %csmethodmodifiers, %dmethodmodifiers, %javamethodmodifiers on destructors were ignored
// Now they can control the dispose/Dispose/delete method modifiers

#if defined(SWIGCSHARP)

// remove all use of protected and virtual keywords
%typemap(csclassmodifiers) NotForDeriving1, NotForDeriving2 "public sealed class"
%csmethodmodifiers NotForDeriving1::~NotForDeriving1 "public /*not virtual nor override*/";
%csmethodmodifiers NotForDeriving2::~NotForDeriving2 "public /*not virtual nor override*/";

// remove protected keyword to remove compiler warning
%typemap(csbody) NotForDeriving1, NotForDeriving2 %{
  private global::System.Runtime.InteropServices.HandleRef swigCPtr;
  private /*protected*/ bool swigCMemOwn;

  internal $csclassname(global::System.IntPtr cPtr, bool cMemoryOwn) {
    swigCMemOwn = cMemoryOwn;
    swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
  }

  internal static global::System.Runtime.InteropServices.HandleRef getCPtr($csclassname obj) {
    return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
  }
%}

#elif defined(SWIGD)

%typemap(dclassmodifiers) NotForDeriving1, NotForDeriving2 "final class"
%dmethodmodifiers NotForDeriving1::~NotForDeriving1 "public final";
%dmethodmodifiers NotForDeriving2::~NotForDeriving2 "public final";

#elif defined(SWIGJAVA)

%typemap(javaclassmodifiers) NotForDeriving1, NotForDeriving2 "public final class"
%javamethodmodifiers NotForDeriving1::~NotForDeriving1 "public synchronized final";
%javamethodmodifiers NotForDeriving2::~NotForDeriving2 "public synchronized final";

#endif

%inline %{
//#include <iostream>
struct NotForDeriving1 {
  void notvirtual() {}
  ~NotForDeriving1() {
//    std::cout << "~NotForDeriving1 called" << std::endl;
  }
};
struct NotForDeriving2 {
  void notvirtual() {}
#if defined(SWIG)
%extend {
  ~NotForDeriving2() {
//    std::cout << "~NotForDeriving2 called" << std::endl;
  }
}
#endif
};
%}