summaryrefslogtreecommitdiffstats
path: root/comphelper
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2023-09-30 20:47:46 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2023-10-03 10:12:41 +0200
commitd9e322d60f65ff20631dab87baa5a2c7c71daaa2 (patch)
treed481e5a4728363b3866b5b5f6dbe64a2780b04a6 /comphelper
parenttdf#141908: CppUnittests: replace usage of sal_Int32 with colors (diff)
downloadcore-d9e322d60f65ff20631dab87baa5a2c7c71daaa2.tar.gz
core-d9e322d60f65ff20631dab87baa5a2c7c71daaa2.zip
replace ErrorInfo with simpler mechanism
Instead of returning ErrCode class everywhere, return a new class ErrrCodeMsg, which combines an ErrCode with the other parameters that are used to control the error reporting. I do not change everything that uses ErrCode here, I started from SfxBaseController/SfxMedium and worked outwards. This change serves two purposes (1) Replace the extremely whacky ErrorInfo mechanism we were using to smuggle information into the error handler reporting mechanism with a very straightforward approach of just combining it into the error class. (2) Allow us to capture the source location that produced the error, which makes debugging the source of a problem soooo much easier. Change-Id: I978b8f00c9851b41a216c7ebdef2ef94251d5519 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157440 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'comphelper')
-rw-r--r--comphelper/source/misc/errcode.cxx257
1 files changed, 136 insertions, 121 deletions
diff --git a/comphelper/source/misc/errcode.cxx b/comphelper/source/misc/errcode.cxx
index 77d58ac364be..e7b667745808 100644
--- a/comphelper/source/misc/errcode.cxx
+++ b/comphelper/source/misc/errcode.cxx
@@ -19,135 +19,129 @@
#include <comphelper/errcode.hxx>
#include <rtl/ustrbuf.hxx>
+#include <o3tl/runtimetooustring.hxx>
COMPHELPER_DLLPUBLIC OUString ErrCode::toString() const
{
- OUStringBuffer buf(128);
- buf.append(toHexString() + "(");
+ std::u16string_view pWarningError;
if (IsWarning())
- buf.append("Warning");
- else
- buf.append("Error");
- if (IsDynamic())
- buf.append(" Dynamic");
+ pWarningError = u"Warning";
else
+ pWarningError = u"Error";
+
+ std::u16string_view pArea;
+ switch (GetArea())
{
- std::u16string_view pArea;
- switch (GetArea())
- {
- case ErrCodeArea::Io:
- pArea = u"Io";
- break;
- case ErrCodeArea::Sfx:
- pArea = u"Sfx";
- break;
- case ErrCodeArea::Inet:
- pArea = u"Inet";
- break;
- case ErrCodeArea::Vcl:
- pArea = u"Vcl";
- break;
- case ErrCodeArea::Svx:
- pArea = u"Svx";
- break;
- case ErrCodeArea::So:
- pArea = u"So";
- break;
- case ErrCodeArea::Sbx:
- pArea = u"Sbx";
- break;
- case ErrCodeArea::Uui:
- pArea = u"Uui";
- break;
- case ErrCodeArea::Sc:
- pArea = u"Sc";
- break;
- case ErrCodeArea::Sd:
- pArea = u"Sd";
- break;
- case ErrCodeArea::Sw:
- pArea = u"Sw";
- break;
- }
- buf.append(OUString::Concat(" Area:") + pArea);
+ case ErrCodeArea::Io:
+ pArea = u"Io";
+ break;
+ case ErrCodeArea::Sfx:
+ pArea = u"Sfx";
+ break;
+ case ErrCodeArea::Inet:
+ pArea = u"Inet";
+ break;
+ case ErrCodeArea::Vcl:
+ pArea = u"Vcl";
+ break;
+ case ErrCodeArea::Svx:
+ pArea = u"Svx";
+ break;
+ case ErrCodeArea::So:
+ pArea = u"So";
+ break;
+ case ErrCodeArea::Sbx:
+ pArea = u"Sbx";
+ break;
+ case ErrCodeArea::Uui:
+ pArea = u"Uui";
+ break;
+ case ErrCodeArea::Sc:
+ pArea = u"Sc";
+ break;
+ case ErrCodeArea::Sd:
+ pArea = u"Sd";
+ break;
+ case ErrCodeArea::Sw:
+ pArea = u"Sw";
+ break;
+ }
- std::u16string_view pClass;
- switch (GetClass())
- {
- case ErrCodeClass::NONE:
- pClass = u"NONE";
- break;
- case ErrCodeClass::Abort:
- pClass = u"Abort";
- break;
- case ErrCodeClass::General:
- pClass = u"General";
- break;
- case ErrCodeClass::NotExists:
- pClass = u"NotExists";
- break;
- case ErrCodeClass::AlreadyExists:
- pClass = u"AlreadyExists";
- break;
- case ErrCodeClass::Access:
- pClass = u"Access";
- break;
- case ErrCodeClass::Path:
- pClass = u"Path";
- break;
- case ErrCodeClass::Locking:
- pClass = u"Locking";
- break;
- case ErrCodeClass::Parameter:
- pClass = u"Parameter";
- break;
- case ErrCodeClass::Space:
- pClass = u"Space";
- break;
- case ErrCodeClass::NotSupported:
- pClass = u"NotSupported";
- break;
- case ErrCodeClass::Read:
- pClass = u"Read";
- break;
- case ErrCodeClass::Write:
- pClass = u"Write";
- break;
- case ErrCodeClass::Unknown:
- pClass = u"Unknown";
- break;
- case ErrCodeClass::Version:
- pClass = u"Version";
- break;
- case ErrCodeClass::Format:
- pClass = u"Format";
- break;
- case ErrCodeClass::Create:
- pClass = u"Create";
- break;
- case ErrCodeClass::Import:
- pClass = u"Import";
- break;
- case ErrCodeClass::Export:
- pClass = u"Export";
- break;
- case ErrCodeClass::So:
- pClass = u"So";
- break;
- case ErrCodeClass::Sbx:
- pClass = u"Sbx";
- break;
- case ErrCodeClass::Runtime:
- pClass = u"Runtime";
- break;
- case ErrCodeClass::Compiler:
- pClass = u"Compiler";
- break;
- }
- buf.append(OUString::Concat(" Class:") + pClass + " Code:" + OUString::number(GetCode()));
+ std::u16string_view pClass;
+ switch (GetClass())
+ {
+ case ErrCodeClass::NONE:
+ pClass = u"NONE";
+ break;
+ case ErrCodeClass::Abort:
+ pClass = u"Abort";
+ break;
+ case ErrCodeClass::General:
+ pClass = u"General";
+ break;
+ case ErrCodeClass::NotExists:
+ pClass = u"NotExists";
+ break;
+ case ErrCodeClass::AlreadyExists:
+ pClass = u"AlreadyExists";
+ break;
+ case ErrCodeClass::Access:
+ pClass = u"Access";
+ break;
+ case ErrCodeClass::Path:
+ pClass = u"Path";
+ break;
+ case ErrCodeClass::Locking:
+ pClass = u"Locking";
+ break;
+ case ErrCodeClass::Parameter:
+ pClass = u"Parameter";
+ break;
+ case ErrCodeClass::Space:
+ pClass = u"Space";
+ break;
+ case ErrCodeClass::NotSupported:
+ pClass = u"NotSupported";
+ break;
+ case ErrCodeClass::Read:
+ pClass = u"Read";
+ break;
+ case ErrCodeClass::Write:
+ pClass = u"Write";
+ break;
+ case ErrCodeClass::Unknown:
+ pClass = u"Unknown";
+ break;
+ case ErrCodeClass::Version:
+ pClass = u"Version";
+ break;
+ case ErrCodeClass::Format:
+ pClass = u"Format";
+ break;
+ case ErrCodeClass::Create:
+ pClass = u"Create";
+ break;
+ case ErrCodeClass::Import:
+ pClass = u"Import";
+ break;
+ case ErrCodeClass::Export:
+ pClass = u"Export";
+ break;
+ case ErrCodeClass::So:
+ pClass = u"So";
+ break;
+ case ErrCodeClass::Sbx:
+ pClass = u"Sbx";
+ break;
+ case ErrCodeClass::Runtime:
+ pClass = u"Runtime";
+ break;
+ case ErrCodeClass::Compiler:
+ pClass = u"Compiler";
+ break;
}
- buf.append(")");
- return buf.makeStringAndClear();
+ return toHexString() + "(" + pWarningError + " Area:" + pArea + " Class:" + pClass
+ + " Code:" + OUString::number(GetCode()) + ")";
}
COMPHELPER_DLLPUBLIC std::ostream& operator<<(std::ostream& os, const ErrCode& err)
@@ -156,4 +150,25 @@ COMPHELPER_DLLPUBLIC std::ostream& operator<<(std::ostream& os, const ErrCode& e
return os;
}
+COMPHELPER_DLLPUBLIC OUString ErrCodeMsg::toString() const
+{
+ OUString s = mnCode.toString();
+ if (!maArg1.isEmpty())
+ s += " arg1=" + maArg1;
+ if (!maArg2.isEmpty())
+ s += " arg2=" + maArg2;
+#ifdef LIBO_ERRMSG_USE_SOURCE_LOCATION
+ if (!moLoc)
+ s += OUString::Concat(" func=") + o3tl::runtimeToOUString(moLoc->function_name()) + " src="
+ + o3tl::runtimeToOUString(moLoc->file_name()) + ":" + OUString::number(moLoc->line());
+#endif
+ return s;
+}
+
+COMPHELPER_DLLPUBLIC std::ostream& operator<<(std::ostream& os, const ErrCodeMsg& err)
+{
+ os << err.toString();
+ return os;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */