From e558909fcfea06a2f7517d760417f52f274c0db9 Mon Sep 17 00:00:00 2001 From: Benjamin Paassen Date: Fri, 13 Feb 2015 20:18:33 +0100 Subject: improved error messages of DocumentChildHandler::data --- src/core/parser/stack/DocumentHandler.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src/core/parser/stack/DocumentHandler.cpp') diff --git a/src/core/parser/stack/DocumentHandler.cpp b/src/core/parser/stack/DocumentHandler.cpp index b47b3d4..ba7430d 100644 --- a/src/core/parser/stack/DocumentHandler.cpp +++ b/src/core/parser/stack/DocumentHandler.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -218,12 +219,13 @@ void DocumentChildHandler::data(const std::string &data, int fieldIdx) */ // retrieve all fields. NodeVector fields = desc->getDefaultFields(); + std::vector forks; for (auto field : fields) { // then try to parse the content using the type specification. - LoggerFork loggerFork = logger().fork(); - auto res = convertData(field, loggerFork, data); + forks.emplace_back(logger().fork()); + auto res = convertData(field, forks.back(), data); if (res.first) { - loggerFork.commit(); + forks.back().commit(); // if that worked, construct the necessary path. auto pathRes = desc->pathTo(field, logger()); assert(pathRes.second); @@ -234,9 +236,12 @@ void DocumentChildHandler::data(const std::string &data, int fieldIdx) return; } } - logger().error( - "Could not read the data with any of the possible fields.", - location()); + logger().error("Could not read data with any of the possible fields:"); + for (size_t f = 0; f < fields.size(); f++) { + logger().note(Utils::join(fields[f]->path(), ".") + ":", + SourceLocation{}, MessageMode::NO_CONTEXT); + forks[f].commit(); + } } } -- cgit v1.2.3