directorthrows warning fixes

- Fix line number display - now the usual simpler warning message can be displayed
for WARN_TYPEMAP_DIRECTORTHROWS_UNDEF - it still points to the problem method.
- Use macro names for warning suppression in test.
This commit is contained in:
William S Fulton 2013-10-24 07:45:56 +01:00
commit fc13a24ecb
3 changed files with 15 additions and 14 deletions

View file

@ -2,6 +2,8 @@
%include <std_except.i> %include <std_except.i>
%warnfilter(SWIGWARN_TYPEMAP_DIRECTORTHROWS_UNDEF) MyNS::Foo::directorthrows_warning;
%{ %{
#if defined(_MSC_VER) #if defined(_MSC_VER)
#pragma warning(disable: 4290) // C++ exception specification ignored except to indicate a function is not __declspec(nothrow) #pragma warning(disable: 4290) // C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
@ -178,6 +180,7 @@ public:
virtual std::string ping(int excp) throw(int,MyNS::Exception2) = 0; virtual std::string ping(int excp) throw(int,MyNS::Exception2) = 0;
virtual std::string pong(int excp) /* throws MyNS::Exception1 MyNS::Exception2 MyNS::Unexpected) */ = 0; virtual std::string pong(int excp) /* throws MyNS::Exception1 MyNS::Exception2 MyNS::Unexpected) */ = 0;
virtual std::string genericpong(int excp) /* unspecified throws - exception is always DirectorException in C++, translated back to whatever thrown in java */ = 0; virtual std::string genericpong(int excp) /* unspecified throws - exception is always DirectorException in C++, translated back to whatever thrown in java */ = 0;
virtual std::string directorthrows_warning(int excp) throw(double) {}
}; };
// Make a bar from a foo, so a call to Java Bar // Make a bar from a foo, so a call to Java Bar

View file

@ -6,7 +6,7 @@
// When using namespaces with no -package, must put JNI classes into a namespace // When using namespaces with no -package, must put JNI classes into a namespace
%pragma(java) jniclasspackage=%{MyNS_JNI%} %pragma(java) jniclasspackage=%{MyNS_JNI%}
%warnfilter(826); %warnfilter(SWIGWARN_JAVA_NSPACE_WITHOUT_PACKAGE);
%{ %{
#if defined(_MSC_VER) #if defined(_MSC_VER)

View file

@ -4058,7 +4058,7 @@ public:
Printf(w->code, "jenv->%s(Swig::jclass_%s, Swig::director_methids[%s], %s);\n", methop, imclass_name, methid, jupcall_args); Printf(w->code, "jenv->%s(Swig::jclass_%s, Swig::director_methids[%s], %s);\n", methop, imclass_name, methid, jupcall_args);
// Generate code to handle any Java exception thrown by director delegation // Generate code to handle any Java exception thrown by director delegation
directorExceptHandler(n, catches_list ? catches_list : throw_parm_list, w, c_classname, name); directorExceptHandler(n, catches_list ? catches_list : throw_parm_list, w);
if (!is_void) { if (!is_void) {
String *jresult_str = NewString("jresult"); String *jresult_str = NewString("jresult");
@ -4164,7 +4164,7 @@ public:
* This is generated after the Java method upcall. * This is generated after the Java method upcall.
* ------------------------------------------------------------ */ * ------------------------------------------------------------ */
void directorExceptHandler(Node *n, ParmList *throw_parm_list, Wrapper *w, String *c_classname, String *name) { void directorExceptHandler(Node *n, ParmList *throw_parm_list, Wrapper *w) {
String *featdirexcp = Getattr(n, "feature:director:except"); String *featdirexcp = Getattr(n, "feature:director:except");
if (!featdirexcp) { if (!featdirexcp) {
@ -4189,19 +4189,17 @@ public:
String *directorthrowshandlers_code = NewString(""); String *directorthrowshandlers_code = NewString("");
for (Parm *p = throw_parm_list; p; p = nextSibling(p)) { for (Parm *p = throw_parm_list; p; p = nextSibling(p)) {
String *tmapdirthrows = Getattr(p, "tmap:directorthrows"); String *tm = Getattr(p, "tmap:directorthrows");
String *excptype = Getattr(p,"type"); String *t = Getattr(p,"type");
if (!tmapdirthrows) { if (tm) {
Swig_warning(WARN_TYPEMAP_DIRECTORTHROWS_UNDEF, input_file, line_number, String *directorthrows = Copy(tm);
"Feature director:except on %s::%s with $directorthrowshandlers requires directorthrows typemap for exception %s.\n",
SwigType_namestr(c_classname),SwigType_namestr(name), excptype);
} else {
// replace $packagepath // replace $packagepath
tmapdirthrows = Copy(tmapdirthrows); substituteClassnameAndPackagePath(t, directorthrows, true, p);
substituteClassnameAndPackagePath(excptype, tmapdirthrows, true, p); Printv(directorthrowshandlers_code, directorthrows, NIL);
Printv(directorthrowshandlers_code, tmapdirthrows, NIL); Delete(directorthrows);
Delete(tmapdirthrows); } else {
Swig_warning(WARN_TYPEMAP_DIRECTORTHROWS_UNDEF, Getfile(n), Getline(n), "No directorthrows typemap defined for %s\n", SwigType_str(t, 0));
} }
} }
Replaceall(featdirexcp, "$directorthrowshandlers", directorthrowshandlers_code); Replaceall(featdirexcp, "$directorthrowshandlers", directorthrowshandlers_code);