From 9ad26f51e83913bdfc88746b09ae74ec7d22747c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20St=C3=B6neberg?= Date: Sun, 16 Apr 2023 13:54:21 +0200 Subject: [PATCH] removed `CppCheck` dependency from `CppCheckExecutor::parseFromArgs()` (#4967) * made `CppCheck::getErrorMessages()` static * removed `CppCheck` dependency from `CppCheckExecutor::parseFromArgs()` --- cli/cppcheckexecutor.cpp | 22 +++++++++------------- cli/cppcheckexecutor.h | 4 ++-- gui/newsuppressiondialog.cpp | 3 +-- lib/cppcheck.cpp | 17 +++++++++-------- lib/cppcheck.h | 2 +- test/testcppcheck.cpp | 3 +-- 6 files changed, 23 insertions(+), 28 deletions(-) diff --git a/cli/cppcheckexecutor.cpp b/cli/cppcheckexecutor.cpp index 4c2152f4a..3ee72fe26 100644 --- a/cli/cppcheckexecutor.cpp +++ b/cli/cppcheckexecutor.cpp @@ -78,9 +78,8 @@ CppCheckExecutor::~CppCheckExecutor() delete mErrorOutput; } -bool CppCheckExecutor::parseFromArgs(CppCheck *cppcheck, int argc, const char* const argv[]) +bool CppCheckExecutor::parseFromArgs(Settings &settings, int argc, const char* const argv[]) { - Settings& settings = cppcheck->settings(); CmdLineParser parser(settings); const bool success = parser.parseFromArgs(argc, argv); @@ -101,7 +100,7 @@ bool CppCheckExecutor::parseFromArgs(CppCheck *cppcheck, int argc, const char* c if (parser.getShowErrorMessages()) { mShowAllErrors = true; std::cout << ErrorMessage::getXMLHeader(settings.cppcheckCfgProductName); - cppcheck->getErrorMessages(); + CppCheck::getErrorMessages(*this); std::cout << ErrorMessage::getXMLFooter() << std::endl; } @@ -199,23 +198,20 @@ int CppCheckExecutor::check(int argc, const char* const argv[]) { CheckUnusedFunctions::clear(); - CppCheck cppCheck(*this, true, executeCommand); - - const Settings& settings = cppCheck.settings(); - mSettings = &settings; - - if (!parseFromArgs(&cppCheck, argc, argv)) { - mSettings = nullptr; + Settings settings; + if (!parseFromArgs(settings, argc, argv)) { return EXIT_FAILURE; } if (Settings::terminated()) { - mSettings = nullptr; return EXIT_SUCCESS; } - int ret; + CppCheck cppCheck(*this, true, executeCommand); + cppCheck.settings() = settings; + mSettings = &settings; - if (cppCheck.settings().exceptionHandling) + int ret; + if (settings.exceptionHandling) ret = check_wrapper(cppCheck); else ret = check_internal(cppCheck); diff --git a/cli/cppcheckexecutor.h b/cli/cppcheckexecutor.h index a70a79ff7..ae7d8f54c 100644 --- a/cli/cppcheckexecutor.h +++ b/cli/cppcheckexecutor.h @@ -115,12 +115,12 @@ protected: * @brief Parse command line args and get settings and file lists * from there. * - * @param cppcheck cppcheck instance + * @param settings the settings to store into * @param argc argc from main() * @param argv argv from main() * @return false when errors are found in the input */ - bool parseFromArgs(CppCheck *cppcheck, int argc, const char* const argv[]); + bool parseFromArgs(Settings &settings, int argc, const char* const argv[]); private: diff --git a/gui/newsuppressiondialog.cpp b/gui/newsuppressiondialog.cpp index e6e322925..e47c15dc5 100644 --- a/gui/newsuppressiondialog.cpp +++ b/gui/newsuppressiondialog.cpp @@ -50,8 +50,7 @@ NewSuppressionDialog::NewSuppressionDialog(QWidget *parent) : }; QErrorLogger errorLogger; - CppCheck cppcheck(errorLogger, false, nullptr); - cppcheck.getErrorMessages(); + CppCheck::getErrorMessages(errorLogger); errorLogger.errorIds.sort(); mUI->mComboErrorId->addItems(errorLogger.errorIds); diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index 8bf9d9b7f..293ea793a 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -1649,25 +1649,26 @@ void CppCheck::reportProgress(const std::string &filename, const char stage[], c mErrorLogger.reportProgress(filename, stage, value); } -void CppCheck::getErrorMessages() +void CppCheck::getErrorMessages(ErrorLogger &errorlogger) { - Settings s(mSettings); + Settings s; s.severity.enable(Severity::warning); s.severity.enable(Severity::style); s.severity.enable(Severity::portability); s.severity.enable(Severity::performance); s.severity.enable(Severity::information); - purgedConfigurationMessage(emptyString,emptyString); - - mTooManyConfigs = true; - tooManyConfigsError(emptyString,0U); + CppCheck cppcheck(errorlogger, true, nullptr); + cppcheck.purgedConfigurationMessage(emptyString,emptyString); + cppcheck.mTooManyConfigs = true; + cppcheck.tooManyConfigsError(emptyString,0U); + // TODO: add functions to get remaining error messages // call all "getErrorMessages" in all registered Check classes for (std::list::const_iterator it = Check::instances().cbegin(); it != Check::instances().cend(); ++it) - (*it)->getErrorMessages(this, &s); + (*it)->getErrorMessages(&errorlogger, &s); - Preprocessor::getErrorMessages(this, &s); + Preprocessor::getErrorMessages(&errorlogger, &s); } void CppCheck::analyseClangTidy(const ImportProject::FileSettings &fileSettings) diff --git a/lib/cppcheck.h b/lib/cppcheck.h index db5ba0893..46ab23ae0 100644 --- a/lib/cppcheck.h +++ b/lib/cppcheck.h @@ -116,7 +116,7 @@ public: * @brief Call all "getErrorMessages" in all registered Check classes. * Also print out XML header and footer. */ - void getErrorMessages(); + static void getErrorMessages(ErrorLogger &errorlogger); void tooManyConfigsError(const std::string &file, const int numberOfConfigurations); void purgedConfigurationMessage(const std::string &file, const std::string& configuration); diff --git a/test/testcppcheck.cpp b/test/testcppcheck.cpp index dba51affe..44782bdab 100644 --- a/test/testcppcheck.cpp +++ b/test/testcppcheck.cpp @@ -75,8 +75,7 @@ private: void getErrorMessages() const { ErrorLogger2 errorLogger; - CppCheck cppCheck(errorLogger, true, nullptr); - cppCheck.getErrorMessages(); + CppCheck::getErrorMessages(errorLogger); ASSERT(!errorLogger.id.empty()); // Check if there are duplicate error ids in errorLogger.id