Add $interfacename family of special variable expansions
This is a simple expansion expanding to the name of the interface and is not qualified like $javainterfacename and $csinterfacename. Expansion within typemaps is much like $javainterfacename otherwise. Note that expansion within the pure java code typemap, 'javainterfacecode' and similarly pure C# code typemap, 'csinterfacecode' works like $javaclassname/$csclassname and $&interfacename should not be used, just $interfacename.
This commit is contained in:
parent
8df8c8a97a
commit
14d2341512
4 changed files with 79 additions and 25 deletions
|
|
@ -28,10 +28,10 @@
|
|||
%typemap(csdirectorin) CTYPE *, CTYPE [] "($iminput == global::System.IntPtr.Zero) ? null : ($csinterfacename)new $csclassname($iminput, false)"
|
||||
%typemap(csdirectorin) CTYPE *const& "($iminput == global::System.IntPtr.Zero) ? null : ($*csinterfacename)new $*csclassname($iminput, false)"
|
||||
%typemap(csdirectorout) CTYPE, CTYPE *, CTYPE *const&, CTYPE [], CTYPE & "$cscall.GetInterfaceCPtr()"
|
||||
%typemap(csinterfacecode, declaration=" [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]\n global::System.Runtime.InteropServices.HandleRef GetInterfaceCPtr();\n", cptrmethod=#INTERFACE##"_GetInterfaceCPtr") CTYPE %{
|
||||
%typemap(csinterfacecode, declaration=" [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]\n global::System.Runtime.InteropServices.HandleRef GetInterfaceCPtr();\n", cptrmethod="$interfacename_GetInterfaceCPtr") CTYPE %{
|
||||
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
|
||||
global::System.Runtime.InteropServices.HandleRef INTERFACE.GetInterfaceCPtr() {
|
||||
return new global::System.Runtime.InteropServices.HandleRef(this, $imclassname.$csclazzname##INTERFACE##_GetInterfaceCPtr(swigCPtr.Handle));
|
||||
global::System.Runtime.InteropServices.HandleRef $interfacename.GetInterfaceCPtr() {
|
||||
return new global::System.Runtime.InteropServices.HandleRef(this, $imclassname.$csclazzname$interfacename_GetInterfaceCPtr(swigCPtr.Handle));
|
||||
}
|
||||
%}
|
||||
%enddef
|
||||
|
|
|
|||
|
|
@ -6,8 +6,10 @@
|
|||
%typemap(jstype) CTYPE "$&javainterfacename"
|
||||
%typemap(jstype) CTYPE *, CTYPE [], CTYPE & "$javainterfacename"
|
||||
%typemap(jstype) CTYPE *const& "$*javainterfacename"
|
||||
%typemap(javain) CTYPE, CTYPE & "$javainput." ## #INTERFACE ## "_GetInterfaceCPtr()"
|
||||
%typemap(javain) CTYPE *, CTYPE *const&, CTYPE [] "($javainput == null) ? 0 : $javainput." ## #INTERFACE ## "_GetInterfaceCPtr()"
|
||||
%typemap(javain) CTYPE "$javainput.$&interfacename_GetInterfaceCPtr()"
|
||||
%typemap(javain) CTYPE & "$javainput.$interfacename_GetInterfaceCPtr()"
|
||||
%typemap(javain) CTYPE *, CTYPE [] "($javainput == null) ? 0 : $javainput.$interfacename_GetInterfaceCPtr()"
|
||||
%typemap(javain) CTYPE *const& "($javainput == null) ? 0 : $javainput.$*interfacename_GetInterfaceCPtr()"
|
||||
%typemap(javaout) CTYPE {
|
||||
return ($&javainterfacename)new $&javaclassname($jnicall, true);
|
||||
}
|
||||
|
|
@ -27,7 +29,9 @@
|
|||
%typemap(javadirectorin) CTYPE & "($javainterfacename)new $javaclassname($jniinput, false)"
|
||||
%typemap(javadirectorin) CTYPE *, CTYPE [] "($jniinput == 0) ? null : ($javainterfacename)new $javaclassname($jniinput, false)"
|
||||
%typemap(javadirectorin) CTYPE *const& "($jniinput == 0) ? null : ($*javainterfacename)new $*javaclassname($jniinput, false)"
|
||||
%typemap(javadirectorout) CTYPE, CTYPE *, CTYPE *const&, CTYPE [], CTYPE & "$javacall." ## #INTERFACE ## "_GetInterfaceCPtr()"
|
||||
%typemap(javadirectorout) CTYPE "$javacall.$&interfacename_GetInterfaceCPtr()"
|
||||
%typemap(javadirectorout) CTYPE *, CTYPE [], CTYPE & "$javacall.$interfacename_GetInterfaceCPtr()"
|
||||
%typemap(javadirectorout) CTYPE *const& "$javacall.$*interfacename_GetInterfaceCPtr()"
|
||||
%typemap(directorin,descriptor="L$packagepath/$&javainterfacename;") CTYPE
|
||||
%{ $input = 0;
|
||||
*(($&1_ltype*)&$input) = &$1; %}
|
||||
|
|
@ -38,9 +42,9 @@
|
|||
%typemap(directorin,descriptor="L$packagepath/$*javainterfacename;") CTYPE *const&
|
||||
%{ *($&1_ltype)&$input = ($1_ltype) &$1; %}
|
||||
|
||||
%typemap(javainterfacecode, declaration=" long " ## #INTERFACE ## "_GetInterfaceCPtr();\n", cptrmethod=#INTERFACE ## "_GetInterfaceCPtr") CTYPE %{
|
||||
public long INTERFACE##_GetInterfaceCPtr() {
|
||||
return $imclassname.$javaclazzname##INTERFACE##_GetInterfaceCPtr(swigCPtr);
|
||||
%typemap(javainterfacecode, declaration=" long $interfacename_GetInterfaceCPtr();\n", cptrmethod="$interfacename_GetInterfaceCPtr") CTYPE %{
|
||||
public long $interfacename_GetInterfaceCPtr() {
|
||||
return $imclassname.$javaclazzname$interfacename_GetInterfaceCPtr(swigCPtr);
|
||||
}
|
||||
%}
|
||||
%enddef
|
||||
|
|
|
|||
|
|
@ -1673,12 +1673,12 @@ public:
|
|||
* getInterfaceName()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
String *getInterfaceName(SwigType *t) {
|
||||
String *getInterfaceName(SwigType *t, bool qualified) {
|
||||
String *interface_name = NULL;
|
||||
if (proxy_flag) {
|
||||
Node *n = classLookup(t);
|
||||
if (n && Getattr(n, "interface:name"))
|
||||
interface_name = getQualifiedInterfaceName(n);
|
||||
interface_name = qualified ? getQualifiedInterfaceName(n) : Getattr(n, "interface:name");
|
||||
}
|
||||
return interface_name;
|
||||
}
|
||||
|
|
@ -1692,7 +1692,7 @@ public:
|
|||
for (Iterator it = First(keys); it.item; it = Next(it)) {
|
||||
Node *base = Getattr(base_list, it.item);
|
||||
String *c_baseclass = SwigType_namestr(Getattr(base, "name"));
|
||||
String *interface_name = getQualifiedInterfaceName(base);
|
||||
String *interface_name = Getattr(base, "interface:name");
|
||||
if (Len(interface_list))
|
||||
Append(interface_list, ", ");
|
||||
Append(interface_list, interface_name);
|
||||
|
|
@ -1701,12 +1701,14 @@ public:
|
|||
String *interface_code = Copy(typemapLookup(base, "csinterfacecode", Getattr(base, "classtypeobj"), WARN_CSHARP_TYPEMAP_INTERFACECODE_UNDEF, attributes));
|
||||
String *cptr_method_name = 0;
|
||||
if (interface_code) {
|
||||
Replaceall(interface_code, "$interfacename", interface_name);
|
||||
Printv(interface_upcasts, interface_code, NIL);
|
||||
cptr_method_name = Copy(Getattr(attributes, "tmap:csinterfacecode:cptrmethod"));
|
||||
}
|
||||
if (!cptr_method_name)
|
||||
cptr_method_name = NewStringf("%s_GetInterfaceCPtr", interface_name);
|
||||
Replaceall(cptr_method_name, ".", "_");
|
||||
Replaceall(cptr_method_name, "$interfacename", interface_name);
|
||||
|
||||
String *upcast_method = Swig_name_member(getNSpace(), proxy_class_name, cptr_method_name);
|
||||
String *wname = Swig_name_wrapper(upcast_method);
|
||||
|
|
@ -2023,6 +2025,7 @@ public:
|
|||
if (interface_code) {
|
||||
String *interface_declaration = Copy(Getattr(attributes, "tmap:csinterfacecode:declaration"));
|
||||
if (interface_declaration) {
|
||||
Replaceall(interface_declaration, "$interfacename", interface_name);
|
||||
Printv(f_interface, interface_declaration, NIL);
|
||||
Delete(interface_declaration);
|
||||
}
|
||||
|
|
@ -3401,7 +3404,7 @@ public:
|
|||
}
|
||||
if (Strstr(tm, "$csinterfacename")) {
|
||||
SwigType *interfacenametype = Copy(strippedtype);
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$csinterfacename");
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$csinterfacename", true);
|
||||
substitution_performed = true;
|
||||
Delete(interfacenametype);
|
||||
}
|
||||
|
|
@ -3409,7 +3412,7 @@ public:
|
|||
SwigType *interfacenametype = Copy(strippedtype);
|
||||
Delete(SwigType_pop(interfacenametype));
|
||||
if (Len(interfacenametype) > 0) {
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$*csinterfacename");
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$*csinterfacename", true);
|
||||
substitution_performed = true;
|
||||
}
|
||||
Delete(interfacenametype);
|
||||
|
|
@ -3417,7 +3420,29 @@ public:
|
|||
if (Strstr(tm, "$&csinterfacename")) {
|
||||
SwigType *interfacenametype = Copy(strippedtype);
|
||||
SwigType_add_pointer(interfacenametype);
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$&csinterfacename");
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$&csinterfacename", true);
|
||||
substitution_performed = true;
|
||||
Delete(interfacenametype);
|
||||
}
|
||||
if (Strstr(tm, "$interfacename")) {
|
||||
SwigType *interfacenametype = Copy(strippedtype);
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$interfacename", false);
|
||||
substitution_performed = true;
|
||||
Delete(interfacenametype);
|
||||
}
|
||||
if (Strstr(tm, "$*interfacename")) {
|
||||
SwigType *interfacenametype = Copy(strippedtype);
|
||||
Delete(SwigType_pop(interfacenametype));
|
||||
if (Len(interfacenametype) > 0) {
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$*interfacename", false);
|
||||
substitution_performed = true;
|
||||
}
|
||||
Delete(interfacenametype);
|
||||
}
|
||||
if (Strstr(tm, "$&interfacename")) {
|
||||
SwigType *interfacenametype = Copy(strippedtype);
|
||||
SwigType_add_pointer(interfacenametype);
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$&interfacename", false);
|
||||
substitution_performed = true;
|
||||
Delete(interfacenametype);
|
||||
}
|
||||
|
|
@ -3470,9 +3495,9 @@ public:
|
|||
* substituteInterfacenameSpecialVariable()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void substituteInterfacenameSpecialVariable(SwigType *interfacenametype, String *tm, const char *interfacenamespecialvariable) {
|
||||
void substituteInterfacenameSpecialVariable(SwigType *interfacenametype, String *tm, const char *interfacenamespecialvariable, bool qualified) {
|
||||
|
||||
String *interfacename = getInterfaceName(interfacenametype);
|
||||
String *interfacename = getInterfaceName(interfacenametype, qualified);
|
||||
if (interfacename) {
|
||||
String *replacementname = Copy(interfacename);
|
||||
Replaceall(tm, interfacenamespecialvariable, replacementname);
|
||||
|
|
|
|||
|
|
@ -1755,12 +1755,12 @@ public:
|
|||
* getInterfaceName()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
String *getInterfaceName(SwigType *t) {
|
||||
String *getInterfaceName(SwigType *t, bool qualified) {
|
||||
String *interface_name = NULL;
|
||||
if (proxy_flag) {
|
||||
Node *n = classLookup(t);
|
||||
if (n && Getattr(n, "interface:name"))
|
||||
interface_name = getQualifiedInterfaceName(n);
|
||||
interface_name = qualified ? getQualifiedInterfaceName(n) : Getattr(n, "interface:name");
|
||||
}
|
||||
return interface_name;
|
||||
}
|
||||
|
|
@ -1783,12 +1783,14 @@ public:
|
|||
String *interface_code = Copy(typemapLookup(base, "javainterfacecode", Getattr(base, "classtypeobj"), WARN_JAVA_TYPEMAP_INTERFACECODE_UNDEF, attributes));
|
||||
String *cptr_method_name = 0;
|
||||
if (interface_code) {
|
||||
Replaceall(interface_code, "$interfacename", interface_name);
|
||||
Printv(interface_upcasts, interface_code, NIL);
|
||||
cptr_method_name = Copy(Getattr(attributes, "tmap:javainterfacecode:cptrmethod"));
|
||||
}
|
||||
if (!cptr_method_name)
|
||||
cptr_method_name = NewStringf("%s_GetInterfaceCPtr", interface_name);
|
||||
Replaceall(cptr_method_name, ".", "_");
|
||||
Replaceall(cptr_method_name, "$interfacename", interface_name);
|
||||
|
||||
String *upcast_method = Swig_name_member(getNSpace(), proxy_class_name, cptr_method_name);
|
||||
String *jniname = makeValidJniName(upcast_method);
|
||||
|
|
@ -2061,6 +2063,7 @@ public:
|
|||
if (interface_code) {
|
||||
String *interface_declaration = Copy(Getattr(attributes, "tmap:javainterfacecode:declaration"));
|
||||
if (interface_declaration) {
|
||||
Replaceall(interface_declaration, "$interfacename", interface_name);
|
||||
Printv(f_interface, interface_declaration, NIL);
|
||||
Delete(interface_declaration);
|
||||
}
|
||||
|
|
@ -3271,7 +3274,7 @@ public:
|
|||
}
|
||||
if (Strstr(tm, "$javainterfacename")) {
|
||||
SwigType *interfacenametype = Copy(strippedtype);
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$javainterfacename", jnidescriptor);
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$javainterfacename", jnidescriptor, true);
|
||||
substitution_performed = true;
|
||||
Delete(interfacenametype);
|
||||
}
|
||||
|
|
@ -3279,7 +3282,7 @@ public:
|
|||
SwigType *interfacenametype = Copy(strippedtype);
|
||||
Delete(SwigType_pop(interfacenametype));
|
||||
if (Len(interfacenametype) > 0) {
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$*javainterfacename", jnidescriptor);
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$*javainterfacename", jnidescriptor, true);
|
||||
substitution_performed = true;
|
||||
}
|
||||
Delete(interfacenametype);
|
||||
|
|
@ -3287,7 +3290,29 @@ public:
|
|||
if (Strstr(tm, "$&javainterfacename")) {
|
||||
SwigType *interfacenametype = Copy(strippedtype);
|
||||
SwigType_add_pointer(interfacenametype);
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$&javainterfacename", jnidescriptor);
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$&javainterfacename", jnidescriptor, true);
|
||||
substitution_performed = true;
|
||||
Delete(interfacenametype);
|
||||
}
|
||||
if (Strstr(tm, "$interfacename")) {
|
||||
SwigType *interfacenametype = Copy(strippedtype);
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$interfacename", jnidescriptor, false);
|
||||
substitution_performed = true;
|
||||
Delete(interfacenametype);
|
||||
}
|
||||
if (Strstr(tm, "$*interfacename")) {
|
||||
SwigType *interfacenametype = Copy(strippedtype);
|
||||
Delete(SwigType_pop(interfacenametype));
|
||||
if (Len(interfacenametype) > 0) {
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$*interfacename", jnidescriptor, false);
|
||||
substitution_performed = true;
|
||||
}
|
||||
Delete(interfacenametype);
|
||||
}
|
||||
if (Strstr(tm, "$&interfacename")) {
|
||||
SwigType *interfacenametype = Copy(strippedtype);
|
||||
SwigType_add_pointer(interfacenametype);
|
||||
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$&interfacename", jnidescriptor, false);
|
||||
substitution_performed = true;
|
||||
Delete(interfacenametype);
|
||||
}
|
||||
|
|
@ -3343,9 +3368,9 @@ public:
|
|||
* substituteInterfacenameSpecialVariable()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void substituteInterfacenameSpecialVariable(SwigType *interfacenametype, String *tm, const char *interfacenamespecialvariable, bool jnidescriptor) {
|
||||
void substituteInterfacenameSpecialVariable(SwigType *interfacenametype, String *tm, const char *interfacenamespecialvariable, bool jnidescriptor, bool qualified) {
|
||||
|
||||
String *interfacename = getInterfaceName(interfacenametype/*, jnidescriptor*/);
|
||||
String *interfacename = getInterfaceName(interfacenametype/*, jnidescriptor*/, qualified);
|
||||
if (interfacename) {
|
||||
String *replacementname = Copy(interfacename);
|
||||
|
||||
|
|
@ -3531,7 +3556,7 @@ public:
|
|||
if (Cmp(jtype, "long") == 0) {
|
||||
if (proxy_flag) {
|
||||
if (!GetFlag(p, "tmap:jtype:nopgcpp") && !nopgcpp_flag) {
|
||||
String *interface_name = getInterfaceName(t);
|
||||
String *interface_name = getInterfaceName(t, true);
|
||||
pgcpp_java_type = interface_name ? interface_name : getProxyName(t);
|
||||
if (!pgcpp_java_type) {
|
||||
// Look for proxy class parameters passed to C++ layer using non-default typemaps, ie not one of above types
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue