diff --git a/Examples/test-suite/director_nested_class.i b/Examples/test-suite/director_nested_class.i index 99eecfcc8..f3d627f3c 100644 --- a/Examples/test-suite/director_nested_class.i +++ b/Examples/test-suite/director_nested_class.i @@ -2,15 +2,24 @@ %feature("director") DirectorOuter::DirectorInner; +%feature("director") DirectorOuter::DirectorInner::DirectorInnerInner; %inline %{ struct DirectorOuter { struct DirectorInner { virtual ~DirectorInner() {} virtual int vmethod(int input) const = 0; + struct DirectorInnerInner { + DirectorInnerInner(DirectorInner *din = 0) {} + virtual ~DirectorInnerInner() {} + virtual int innervmethod(int input) const = 0; + }; }; static int callMethod(const DirectorInner &di, int value) { return di.vmethod(value); } + static int callInnerInnerMethod(const DirectorInner::DirectorInnerInner &di, int value) { + return di.innervmethod(value); + } }; %} diff --git a/Examples/test-suite/java/director_nested_class_runme.java b/Examples/test-suite/java/director_nested_class_runme.java index 5d330fb46..5144413b7 100644 --- a/Examples/test-suite/java/director_nested_class_runme.java +++ b/Examples/test-suite/java/director_nested_class_runme.java @@ -19,6 +19,12 @@ public class director_nested_class_runme { if (DirectorOuter.callMethod(d, 999) != 9990) { throw new RuntimeException("callMethod(999) failed"); } + + director_nested_class_DerivedInnerInner dinner = new director_nested_class_DerivedInnerInner(); + + if (DirectorOuter.callInnerInnerMethod(dinner, 999) != 999000) { + throw new RuntimeException("callMethod(999) failed"); + } } } @@ -28,3 +34,8 @@ class director_nested_class_Derived extends DirectorOuter.DirectorInner { } } +class director_nested_class_DerivedInnerInner extends DirectorOuter.DirectorInner.DirectorInnerInner { + public int innervmethod(int input) { + return input * 1000; + } +}