another small fix to generator-side filteirng
diff --git a/src/main/java/com/fasterxml/jackson/core/filter/FilteringParserDelegate.java b/src/main/java/com/fasterxml/jackson/core/filter/FilteringParserDelegate.java
index 84e8a54..ae26808 100644
--- a/src/main/java/com/fasterxml/jackson/core/filter/FilteringParserDelegate.java
+++ b/src/main/java/com/fasterxml/jackson/core/filter/FilteringParserDelegate.java
@@ -8,6 +8,8 @@
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.util.JsonParserDelegate;
+import static com.fasterxml.jackson.core.JsonTokenId.*;
+
/**
* Specialized {@link JsonParserDelegate} that allows use of
* {@link TokenFilter} for outputting a subset of content that
@@ -231,16 +233,68 @@
}
}
- // If not, need to
+ // If not, need to read more. If we got any:
JsonToken t = delegate.nextToken();
if (t == null) {
-
+ // no strict need to close, since we have no state here
+ return (_currToken = t);
}
+ // otherwise... to include or not?
+ switch (_currToken.id()) {
+ case ID_START_ARRAY:
+ if (_itemFilter == null) {
+ delegate.skipChildren();
+ break;
+ }
+ if (_itemFilter == TokenFilter.INCLUDE_ALL) {
+ _headContext = _headContext.createChildArrayContext(_itemFilter, true);
+ return (_currToken = t);
+ }
+ // TODO
+
+ case ID_START_OBJECT:
+ if (_itemFilter == null) {
+ delegate.skipChildren();
+ break;
+ }
+ if (_itemFilter == TokenFilter.INCLUDE_ALL) {
+ _headContext = _headContext.createChildObjectContext(_itemFilter, true);
+ return (_currToken = t);
+ }
+ // TODO
+
+ case ID_END_ARRAY:
+ case ID_END_OBJECT:
+ {
+ boolean returnEnd = _headContext.isStartHandled();
+ TokenFilter f = _headContext.getFilter();
+ if ((f != null) && (f != TokenFilter.INCLUDE_ALL)) {
+ f.filterFinishArray();
+ }
+ _headContext = _headContext.getParent();
+ _itemFilter = _headContext.getFilter();
+ if (returnEnd) {
+ return (_currToken = t);
+ }
+ }
+ break;
+
+ case ID_FIELD_NAME:
+
+ default: // scalar value
+ }
+
+ // We get here if token was not yet found; offlined handling
+ return _nextToken2();
+ }
+
+ protected final JsonToken _nextToken2() throws IOException
+ {
// !!! TODO
return null;
}
-
+
@Override
public JsonToken nextValue() throws IOException {
// Re-implemented same as ParserMinimalBase: