private void buildAndFindParent(
     JSONStreamObjectNodeImpl caller, boolean singleChildPolicyApplied) {
   JSONStreamObjectNodeImpl node = (JSONStreamObjectNodeImpl) m_nodes.peek();
   while (node != caller) {
     node.buildValue(null, Integer.MAX_VALUE, false);
     node.nodeBuildingCompleted(singleChildPolicyApplied);
     if (m_nodes.empty()) {
       break;
     }
     node = (JSONStreamObjectNodeImpl) m_nodes.peek();
   }
 }
 public void buildNextChild(JSONStreamObjectNodeImpl caller) {
   if (m_currentToken == JSONToken.END_TOKEN) {
     return;
   }
   buildAndFindParent(caller, true);
   caller.buildValue(null, Integer.MAX_VALUE, true);
 }
 public void buildValue(
     JSONStreamObjectNodeImpl caller, QName key, int idxToFind, boolean singleChildPolicyApplied) {
   buildAndFindParent(caller, singleChildPolicyApplied);
   caller.buildValue(key, idxToFind, false);
 }