From 0c3c00daeca8bf1e730afddc35433cf6b07b77e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sat, 10 Jan 2009 13:08:44 +0000 Subject: [PATCH] errmsg: Added errormessage for 'the class 'classname' doesn't have a constructor' --- Makefile | 2 +- src/checkclass.cpp | 9 ++++----- src/cppcheck.cpp | 3 ++- src/errormessage.h | 9 +++++++++ test/testconstructors.cpp | 2 +- tools/errmsg.cpp | 3 +++ 6 files changed, 20 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index dd8644326..985855622 100644 --- a/Makefile +++ b/Makefile @@ -89,7 +89,7 @@ install: cppcheck src/checkbufferoverrun.o: src/checkbufferoverrun.cpp src/checkbufferoverrun.h src/tokenize.h src/settings.h src/errorlogger.h src/token.h g++ $(CXXFLAGS) -c -o src/checkbufferoverrun.o src/checkbufferoverrun.cpp -src/checkclass.o: src/checkclass.cpp src/checkclass.h src/tokenize.h src/settings.h src/errorlogger.h src/token.h +src/checkclass.o: src/checkclass.cpp src/checkclass.h src/tokenize.h src/settings.h src/errorlogger.h src/token.h src/errormessage.h g++ $(CXXFLAGS) -c -o src/checkclass.o src/checkclass.cpp src/checkfunctionusage.o: src/checkfunctionusage.cpp src/checkfunctionusage.h src/tokenize.h src/settings.h src/errorlogger.h src/token.h diff --git a/src/checkclass.cpp b/src/checkclass.cpp index 108e405d8..7076921ba 100644 --- a/src/checkclass.cpp +++ b/src/checkclass.cpp @@ -19,6 +19,8 @@ //--------------------------------------------------------------------------- #include "checkclass.h" +#include "errormessage.h" + #include #include @@ -69,7 +71,7 @@ struct CheckClass::VAR *CheckClass::ClassChecking_GetVarList(const Token *tok1) if (indentlevel != 1) continue; - // "private:" "public:" "protected:" etc + // "private:" "public:" "protected:" etc bool b = bool((*tok->strAt(0) != ':') && strchr(tok->strAt(0), ':') != 0); // Search for start of statement.. @@ -385,10 +387,7 @@ void CheckClass::constructors() struct VAR *varlist = ClassChecking_GetVarList(tok1); if (varlist) { - std::ostringstream ostr; - ostr << _tokenizer->fileLine(tok1); - ostr << " The class '" << classNameToken->str() << "' has no constructor"; - _errorLogger->reportErr(ostr.str()); + _errorLogger->reportErr(ErrorMessage::noConstructor(_tokenizer, tok1, classNameToken->str())); } // Delete the varlist.. while (varlist) diff --git a/src/cppcheck.cpp b/src/cppcheck.cpp index 55067c3a4..3d1cfafac 100644 --- a/src/cppcheck.cpp +++ b/src/cppcheck.cpp @@ -271,7 +271,8 @@ void CppCheck::checkFile(const std::string &code, const char FileName[]) checkMemoryLeak.CheckMemoryLeak(); // Check that all class constructors are ok. - checkClass.constructors(); + if (ErrorMessage::noConstructor(_settings)) + checkClass.constructors(); // Check that all base classes have virtual destructors checkClass.virtualDestructor(); diff --git a/src/errormessage.h b/src/errormessage.h index 61399079d..32f602336 100644 --- a/src/errormessage.h +++ b/src/errormessage.h @@ -30,6 +30,15 @@ private: ErrorMessage() { } static std::string msg1(const Tokenizer *tokenizer, const Token *Location); public: + static std::string noConstructor(const Tokenizer *tokenizer, const Token *Location, const std::string &classname) + { + return msg1(tokenizer, Location) + "The class '" + classname + "' has no constructor"; + } + static bool noConstructor(const Settings &s) + { + return s._checkCodingStyle; + } + static std::string memleak(const Tokenizer *tokenizer, const Token *Location, const std::string &varname) { return msg1(tokenizer, Location) + "Memory leak: " + varname + ""; diff --git a/test/testconstructors.cpp b/test/testconstructors.cpp index 185547d05..e804275f3 100644 --- a/test/testconstructors.cpp +++ b/test/testconstructors.cpp @@ -83,7 +83,7 @@ private: " int i;\n" "};\n"); std::string actual(errout.str()); - std::string expected("[test.cpp:1] The class 'Fred' has no constructor\n"); + std::string expected("[test.cpp:1]: The class 'Fred' has no constructor\n"); ASSERT_EQUALS(expected, actual); } diff --git a/tools/errmsg.cpp b/tools/errmsg.cpp index 9d39ee153..34b566f79 100644 --- a/tools/errmsg.cpp +++ b/tools/errmsg.cpp @@ -50,6 +50,9 @@ int main() // Error messages.. std::list err; + // checkclass.cpp.. + err.push_back(Message("noConstructor", Message::STYLE, "The class '%1' has no constructor", "classname")); + // checkmemoryleak.cpp.. err.push_back(Message("memleak", 0, "Memory leak: %1", "varname")); err.push_back(Message("resourceLeak", 0, "Resource leak: %1", "varname"));