@@ -95,6 +95,73 @@ public TokenFilter filterStartObject() {
9595 }
9696 }
9797
98+ static class LoggingFilter extends TokenFilter
99+ {
100+ final TokenFilter _parent ;
101+ final ArrayList <String > _log ;
102+
103+ LoggingFilter (final TokenFilter parent ) {
104+ _parent = parent ;
105+ _log = new ArrayList <>();
106+ }
107+
108+ LoggingFilter (final TokenFilter parent , final ArrayList <String > log ) {
109+ _parent = parent ;
110+ _log = log ;
111+ }
112+
113+ TokenFilter rewrap (final TokenFilter filter ) {
114+ if (filter == null ) {
115+ return null ;
116+ } else if (filter == TokenFilter .INCLUDE_ALL ) {
117+ return TokenFilter .INCLUDE_ALL ;
118+ }
119+ return new LoggingFilter (filter , _log );
120+ }
121+
122+ @ Override
123+ public TokenFilter includeElement (final int index ) {
124+ _log .add ("includeElement: " + index );
125+ return rewrap (_parent .includeElement (index ));
126+ }
127+
128+ @ Override
129+ public TokenFilter includeProperty (final String name ) {
130+ _log .add ("includeProperty: " + name );
131+ return rewrap (_parent .includeProperty (name ));
132+ }
133+
134+ @ Override
135+ public TokenFilter filterStartObject () {
136+ _log .add ("filterStartObject" );
137+ return rewrap (_parent .filterStartObject ());
138+ }
139+
140+ @ Override
141+ public TokenFilter filterStartArray () {
142+ _log .add ("filterStartArray" );
143+ return rewrap (_parent .filterStartArray ());
144+ }
145+
146+ @ Override
147+ public void filterFinishObject () {
148+ _log .add ("filterFinishObject" );
149+ _parent .filterFinishObject ();
150+ }
151+
152+ @ Override
153+ public void filterFinishArray () {
154+ _log .add ("filterFinishArray" );
155+ _parent .filterFinishArray ();
156+ }
157+
158+ @ Override
159+ protected boolean _includeScalar () {
160+ _log .add ("_includeScalar" );
161+ return _parent ._includeScalar ();
162+ }
163+ }
164+
98165 static final TokenFilter INCLUDE_EMPTY_IF_NOT_FILTERED = new TokenFilter () {
99166 @ Override
100167 public boolean includeEmptyArray (boolean contentsFiltered ) {
@@ -763,4 +830,21 @@ public void testExcludeLastArrayInsideArray() throws Exception {
763830 );
764831 assertEquals (a2q ("[[]]" ), readAndWrite (JSON_F , p ));
765832 }
833+
834+ public void testCallbacksFromFilteringParserDelegate1 () throws Exception {
835+ LoggingFilter loggingFilter = new LoggingFilter (new JsonPointerBasedFilter ("/parent" ));
836+
837+ JsonParser p0 = JSON_F .createParser (a2q (
838+ "{'parent':{'child':1}}" ));
839+ JsonParser p = new FilteringParserDelegate (p0 ,
840+ loggingFilter ,
841+ Inclusion .ONLY_INCLUDE_ALL ,
842+ true
843+ );
844+ assertEquals (a2q ("{'child':1}" ), readAndWrite (JSON_F , p ));
845+
846+ assertEquals (
847+ Arrays .asList ("filterStartObject" , "includeProperty: parent" , "filterFinishObject" ),
848+ loggingFilter ._log );
849+ }
766850}
0 commit comments