3030class SimpleTreeDecoder : public AbstractTreeDecoder {
3131 public:
3232 SimpleTreeDecoder (InStream &input);
33+
34+ virtual void readScanProps (
35+ TScanProps *pDst,
36+ const pt::ptree *root);
37+
3338 virtual bool readNode (Defect *def, pt::ptree::const_iterator defIter);
3439
3540 private:
@@ -104,13 +109,6 @@ JsonParser::JsonParser(InStream &input):
104109 // parse JSON
105110 read_json (input.str (), d->root );
106111
107- // read scan properties if available (csdiff-native JSON format only)
108- pt::ptree emp;
109- pt::ptree scanNode =
110- d->root .get_child_optional (" scan" ).get_value_or (emp);
111- for (const pt::ptree::value_type &item : scanNode)
112- d->scanProps [item.first ] = item.second .data ();
113-
114112 // recognize inner format of the JSON document
115113 pt::ptree *node = nullptr ;
116114 if (findChildOf (&node, d->root , " defects" ))
@@ -122,6 +120,9 @@ JsonParser::JsonParser(InStream &input):
122120 else
123121 throw pt::ptree_error (" unknown JSON format" );
124122
123+ // read scan properties if available
124+ d->decoder ->readScanProps (&d->scanProps , &d->root );
125+
125126 // process the root node
126127 d->decoder ->readRoot (&d->defList , node);
127128
@@ -235,6 +236,18 @@ void SimpleTreeDecoder::reportUnknownNodes(ENodeKind nk, const pt::ptree &node)
235236 }
236237}
237238
239+ void SimpleTreeDecoder::readScanProps (
240+ TScanProps *pDst,
241+ const pt::ptree *root)
242+ {
243+ const pt::ptree emp;
244+ const pt::ptree &scanNode =
245+ root->get_child_optional (" scan" ).get_value_or (emp);
246+
247+ for (const pt::ptree::value_type &item : scanNode)
248+ (*pDst)[item.first ] = item.second .data ();
249+ }
250+
238251bool SimpleTreeDecoder::readNode (
239252 Defect *def,
240253 pt::ptree::const_iterator defIter)
0 commit comments