diff --git a/Lib/java/feature_interface.i b/Lib/java/feature_interface.i index e6dd9ba27..a6b46effa 100644 --- a/Lib/java/feature_interface.i +++ b/Lib/java/feature_interface.i @@ -17,6 +17,10 @@ %typemap(javadirectorin) CTYPE, CTYPE & "(INTERFACE)new IMPL($jniinput, false)" %typemap(javadirectorin) CTYPE *, CTYPE *const&, CTYPE [] "($jniinput == 0) ? null : (INTERFACE)new IMPL($jniinput, false)" %typemap(javadirectorout) CTYPE, CTYPE *, CTYPE *const&, CTYPE [], CTYPE & "$javacall." ## #INTERFACE ## "_SWIGInterfaceUpcast()" +%typemap(directorin, descriptor="L$packagepath/" ## #INTERFACE ## ";") CTYPE *, CTYPE &, CTYPE *const&, CTYPE [], CTYPE & +%{ $input = 0; + *(($&1_ltype*)&$input) = &$1; +%} SWIG_JAVABODY_PROXY(public, protected, CTYPE) %enddef diff --git a/Source/Modules/csharp.cxx b/Source/Modules/csharp.cxx index 963a8dcfb..fab7aa4b3 100644 --- a/Source/Modules/csharp.cxx +++ b/Source/Modules/csharp.cxx @@ -2070,7 +2070,6 @@ public: destructor_call = NewString(""); proxy_class_constants_code = NewString(""); - Swig_propagate_interface_methods(n); if (Getattr(n, "feature:interface")) { interface_class_code = NewStringEmpty(); String *iname = Getattr(n, "feature:interface:name"); @@ -4271,6 +4270,8 @@ public: String *old_director_delegate_instances = director_delegate_instances; String *old_director_method_types = director_method_types; String *old_director_connect_parms = director_connect_parms; + if (proxy_flag) + Swig_propagate_interface_methods(n); int ret = Language::classDeclaration(n); diff --git a/Source/Modules/java.cxx b/Source/Modules/java.cxx index 4696cf968..437e9437b 100644 --- a/Source/Modules/java.cxx +++ b/Source/Modules/java.cxx @@ -2037,7 +2037,13 @@ public: Printf(f_interface, " long %s_SWIGInterfaceUpcast();\n", iname); } - /* ---------------------------------------------------------------------- + int classDeclaration(Node *n) { + if (proxy_flag) + Swig_propagate_interface_methods(n); + return Language::classDeclaration(n); + } + + /* ---------------------------------------------------------------------- * classHandler() * ---------------------------------------------------------------------- */ @@ -2141,7 +2147,6 @@ public: destructor_throws_clause = NewString(""); proxy_class_constants_code = NewString(""); - Swig_propagate_interface_methods(n); if (Getattr(n, "feature:interface")) { interface_class_code = NewStringEmpty(); String *iname = Getattr(n, "feature:interface:name");