diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk index a6747a0807c..1658e509be7 100644 --- a/Examples/test-suite/common.mk +++ b/Examples/test-suite/common.mk @@ -308,6 +308,7 @@ CPP_TEST_CASES += \ nested_class \ nested_directors \ nested_comment \ + nested_ignore \ nested_scope \ nested_template_base \ nested_workaround \ diff --git a/Examples/test-suite/nested_ignore.i b/Examples/test-suite/nested_ignore.i new file mode 100644 index 00000000000..e271eca7dd1 --- /dev/null +++ b/Examples/test-suite/nested_ignore.i @@ -0,0 +1,24 @@ +%module nested_ignore +%warnfilter(SWIGWARN_PARSE_NAMED_NESTED_CLASS) B::C::D; + +%rename($ignore) B::C; + +%inline %{ +namespace B { + class C { + public: + struct D { + }; + }; + + class E { + public: + typedef C::D D; + }; + + struct F + { + const E::D foo(){ return E::D(); } + }; +} +%} diff --git a/Source/Modules/csharp.cxx b/Source/Modules/csharp.cxx index 12a502586a6..01fd5435bd6 100644 --- a/Source/Modules/csharp.cxx +++ b/Source/Modules/csharp.cxx @@ -188,8 +188,12 @@ class CSHARP:public Language { String *symname = Copy(Getattr(n, "sym:name")); if (symname && !GetFlag(n, "feature:flatnested")) { for (Node *outer_class = Getattr(n, "nested:outer"); outer_class; outer_class = Getattr(outer_class, "nested:outer")) { - Push(symname, "."); - Push(symname, Getattr(outer_class, "sym:name")); + if (String* name = Getattr(outer_class, "sym:name")) { + Push(symname, "."); + Push(symname, name); + } + else + return NULL; } } if (nspace) { diff --git a/Source/Modules/java.cxx b/Source/Modules/java.cxx index b7a5ebbfe7c..eb809ff59c3 100644 --- a/Source/Modules/java.cxx +++ b/Source/Modules/java.cxx @@ -210,10 +210,14 @@ class JAVA:public Language { String *nspace = Getattr(n, "sym:nspace"); String *symname = Copy(Getattr(n, "sym:name")); if (symname && !GetFlag(n, "feature:flatnested")) { - for (Node *outer_class = Getattr(n, "nested:outer"); outer_class; outer_class = Getattr(outer_class, "nested:outer")) { - Push(symname, jnidescriptor ? "$" : "."); - Push(symname, Getattr(outer_class, "sym:name")); - } + for (Node *outer_class = Getattr(n, "nested:outer"); outer_class; outer_class = Getattr(outer_class, "nested:outer")) { + if (String* name = Getattr(outer_class, "sym:name")) { + Push(symname, jnidescriptor ? "$" : "."); + Push(symname, name); + } + else + return NULL; + } } if (nspace) { if (package && !jnidescriptor)