From a7eef85a89d8772b7ab97a4ba378cc7e78c988cc Mon Sep 17 00:00:00 2001 From: albert-github Date: Wed, 4 Mar 2015 18:01:28 +0100 Subject: [PATCH] Better error message in case of IDL inconsistency In case of an IDL internal doxygen inconsistency ("error: Internal inconsistency: namespace in IDL not module, library or constant group ", see forum report: http://doxygen.10944.n7.nabble.com/Internal-inconsistency-Which-file-td7057.html) it is hard to find out which file causes the problem. In this case the comment block with @namespace was the "problem"). This patch solves this by adding the file and line number of the source file causing the problem. --- src/message.cpp | 10 +++++++++- src/message.h | 1 + src/namespacedef.cpp | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/message.cpp b/src/message.cpp index 415672081e7..919f3a0649c 100644 --- a/src/message.cpp +++ b/src/message.cpp @@ -151,7 +151,7 @@ static void format_warn(const char *file,int line,const char *text) static void do_warn(const char *tag, const char *file, int line, const char *prefix, const char *fmt, va_list args) { - if (!Config_getBool(tag)) return; // warning type disabled + if (tag && !Config_getBool(tag)) return; // warning type disabled const int bufSize = 40960; char text[bufSize]; int l=0; @@ -216,6 +216,14 @@ void err(const char *fmt, ...) va_end(args); } +extern void err_full(const char *file,int line,const char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + do_warn(NULL, file, line, error_str, fmt, args); + va_end(args); +} + void printlex(int dbg, bool enter, const char *lexName, const char *fileName) { const char *enter_txt = "entering"; diff --git a/src/message.h b/src/message.h index 481e8bf54ab..70811fbc4ea 100644 --- a/src/message.h +++ b/src/message.h @@ -29,6 +29,7 @@ extern void warn_undoc(const char *file,int line,const char *fmt, ...); extern void warn_doc_error(const char *file,int line,const char *fmt, ...); extern void warn_uncond(const char *fmt, ...); extern void err(const char *fmt, ...); +extern void err_full(const char *file,int line,const char *fmt, ...); void initWarningFormat(); extern void printlex(int dbg, bool enter, const char *lexName, const char *fileName); diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index 8001544d0e3..cce32afc5e9 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -1188,7 +1188,7 @@ QCString NamespaceDef::compoundTypeString() const } else { - err("Internal inconsistency: namespace in IDL not module, library or constant group\n"); + err_full(getDefFileName(),getDefLine(),"Internal inconsistency: namespace in IDL not module, library or constant group"); } } return "";