@@ -95,6 +95,73 @@ public TokenFilter filterStartObject() {
95
95
}
96
96
}
97
97
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
+
98
165
static final TokenFilter INCLUDE_EMPTY_IF_NOT_FILTERED = new TokenFilter () {
99
166
@ Override
100
167
public boolean includeEmptyArray (boolean contentsFiltered ) {
@@ -763,4 +830,21 @@ public void testExcludeLastArrayInsideArray() throws Exception {
763
830
);
764
831
assertEquals (a2q ("[[]]" ), readAndWrite (JSON_F , p ));
765
832
}
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
+ }
766
850
}
0 commit comments