Skip to content

Commit 16b6a7a

Browse files
author
Daniel Marjamäki
committed
refactoring: loop through all Check instances and execute the runChecks function
1 parent 47d7ff9 commit 16b6a7a

File tree

5 files changed

+37
-17
lines changed

5 files changed

+37
-17
lines changed

cppcheck.cbp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
<Unit filename="gui/resultsview.h" />
4444
<Unit filename="gui/settingsdialog.cpp" />
4545
<Unit filename="gui/settingsdialog.h" />
46+
<Unit filename="src/check.h" />
4647
<Unit filename="src/checkbufferoverrun.cpp" />
4748
<Unit filename="src/checkbufferoverrun.h" />
4849
<Unit filename="src/checkclass.cpp" />

src/check.h

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,34 @@
2121
#define checkH
2222

2323
#include "settings.h"
24+
#include <list>
2425

2526
class Tokenizer;
2627
class ErrorLogger;
2728

2829
class Check
2930
{
3031
public:
31-
32-
Check(const Tokenizer * const tokenizer, const Settings &settings, ErrorLogger *errorLogger)
33-
: _tokenizer(tokenizer), _settings(settings), _errorLogger(errorLogger)
34-
{ }
32+
// This constructor is used when registering the CheckClass
33+
Check()
34+
{
35+
instances().push_back(this);
36+
}
3537

3638
virtual ~Check()
37-
{ }
39+
{
40+
instances().remove(this);
41+
}
3842

39-
/** run checks.. */
40-
virtual void runChecks() = 0;
43+
/** get instances of this */
44+
static std::list<Check *> &instances()
45+
{
46+
static std::list<Check *> _instances;
47+
return _instances;
48+
}
4149

42-
protected:
43-
const Tokenizer * const _tokenizer;
44-
const Settings &_settings;
45-
ErrorLogger *_errorLogger;
50+
/** run checks.. */
51+
virtual void runChecks(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger) = 0;
4652
};
4753

4854
#endif

src/checkstl.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@
2222
#include "token.h"
2323

2424

25+
// Create a static instance of this
26+
static CheckStl instance;
27+
28+
2529
void CheckStl::iterators()
2630
{
2731
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next())

src/checkstl.h

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,12 @@ class CheckStl : public Check
3131
{
3232
public:
3333

34-
CheckStl(const Tokenizer * const tokenizer, const Settings &settings, ErrorLogger *errorLogger)
35-
: Check(tokenizer, settings, errorLogger)
34+
void runChecks(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger)
3635
{
36+
_tokenizer = tokenizer;
37+
_settings = settings;
38+
_errorLogger = errorLogger;
3739

38-
}
39-
40-
void runChecks()
41-
{
4240
stlOutOfBounds();
4341
iterators();
4442
erase();
@@ -76,6 +74,10 @@ class CheckStl : public Check
7674
* @param it iterator token
7775
*/
7876
void eraseCheckLoop(const Token *it);
77+
78+
const Tokenizer *_tokenizer;
79+
const Settings *_settings;
80+
ErrorLogger *_errorLogger;
7981
};
8082

8183
//---------------------------------------------------------------------------

src/cppcheck.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
#include "checkfunctionusage.h"
3131
#include "filelister.h"
3232

33+
#include "check.h"
34+
3335
#include <algorithm>
3436
#include <iostream>
3537
#include <sstream>
@@ -481,6 +483,11 @@ void CppCheck::checkFile(const std::string &code, const char FileName[])
481483
// Unusual pointer arithmetic
482484
if (ErrorLogger::strPlusChar())
483485
checkOther.strPlusChar();
486+
487+
for (std::list<Check *>::iterator it = Check::instances().begin(); it != Check::instances().end(); ++it)
488+
{
489+
(*it)->runChecks(&_tokenizer, &_settings, this);
490+
}
484491
}
485492

486493
Settings CppCheck::settings() const

0 commit comments

Comments
 (0)