diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2023-09-30 20:47:46 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2023-10-03 10:12:41 +0200 |
commit | d9e322d60f65ff20631dab87baa5a2c7c71daaa2 (patch) | |
tree | d481e5a4728363b3866b5b5f6dbe64a2780b04a6 /comphelper | |
parent | 64fc701388d1dcf8ae36ba2cc73eb5416a7c3374 (diff) |
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.cxx | 257 |
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: */ |