| %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 |
| }; |
| %} |