Symbol Database: Don't use it when it is not needed
This commit is contained in:
parent
9e7b087832
commit
54121a74ff
|
@ -41,8 +41,20 @@ CheckClass instance;
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
CheckClass::CheckClass(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger)
|
CheckClass::CheckClass(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger)
|
||||||
: Check(tokenizer, settings, errorLogger)
|
: Check(tokenizer, settings, errorLogger),
|
||||||
|
hasSymbolDatabase(false)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CheckClass::createSymbolDatabase()
|
||||||
|
{
|
||||||
|
// Multiple calls => bail out
|
||||||
|
if (hasSymbolDatabase)
|
||||||
|
return;
|
||||||
|
|
||||||
|
hasSymbolDatabase = true;
|
||||||
|
|
||||||
// find all namespaces (class,struct and namespace)
|
// find all namespaces (class,struct and namespace)
|
||||||
SpaceInfo *info = 0;
|
SpaceInfo *info = 0;
|
||||||
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next())
|
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next())
|
||||||
|
@ -815,6 +827,8 @@ void CheckClass::constructors()
|
||||||
if (!_settings->_checkCodingStyle)
|
if (!_settings->_checkCodingStyle)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
createSymbolDatabase();
|
||||||
|
|
||||||
std::multimap<std::string, SpaceInfo *>::iterator i;
|
std::multimap<std::string, SpaceInfo *>::iterator i;
|
||||||
|
|
||||||
for (i = spaceInfoMMap.begin(); i != spaceInfoMMap.end(); ++i)
|
for (i = spaceInfoMMap.begin(); i != spaceInfoMMap.end(); ++i)
|
||||||
|
@ -1161,6 +1175,8 @@ void CheckClass::operatorEq()
|
||||||
if (!_settings->_checkCodingStyle)
|
if (!_settings->_checkCodingStyle)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
createSymbolDatabase();
|
||||||
|
|
||||||
std::multimap<std::string, SpaceInfo *>::const_iterator i;
|
std::multimap<std::string, SpaceInfo *>::const_iterator i;
|
||||||
|
|
||||||
for (i = spaceInfoMMap.begin(); i != spaceInfoMMap.end(); ++i)
|
for (i = spaceInfoMMap.begin(); i != spaceInfoMMap.end(); ++i)
|
||||||
|
@ -1188,6 +1204,8 @@ void CheckClass::operatorEqRetRefThis()
|
||||||
if (!_settings->_checkCodingStyle)
|
if (!_settings->_checkCodingStyle)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
createSymbolDatabase();
|
||||||
|
|
||||||
std::multimap<std::string, SpaceInfo *>::const_iterator i;
|
std::multimap<std::string, SpaceInfo *>::const_iterator i;
|
||||||
|
|
||||||
for (i = spaceInfoMMap.begin(); i != spaceInfoMMap.end(); ++i)
|
for (i = spaceInfoMMap.begin(); i != spaceInfoMMap.end(); ++i)
|
||||||
|
@ -1834,6 +1852,8 @@ void CheckClass::checkConst()
|
||||||
if (!_settings->_checkCodingStyle)
|
if (!_settings->_checkCodingStyle)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
createSymbolDatabase();
|
||||||
|
|
||||||
std::multimap<std::string, SpaceInfo *>::iterator it;
|
std::multimap<std::string, SpaceInfo *>::iterator it;
|
||||||
|
|
||||||
for (it = spaceInfoMMap.begin(); it != spaceInfoMMap.end(); ++it)
|
for (it = spaceInfoMMap.begin(); it != spaceInfoMMap.end(); ++it)
|
||||||
|
|
|
@ -36,7 +36,7 @@ class CheckClass : public Check
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/** @brief This constructor is used when registering the CheckClass */
|
/** @brief This constructor is used when registering the CheckClass */
|
||||||
CheckClass() : Check()
|
CheckClass() : Check(), hasSymbolDatabase(false)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
/** @brief This constructor is used when running checks. */
|
/** @brief This constructor is used when running checks. */
|
||||||
|
@ -112,6 +112,22 @@ public:
|
||||||
enum AccessControl { Public, Protected, Private };
|
enum AccessControl { Public, Protected, Private };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
/**
|
||||||
|
* @brief Create symbol database. For performance reasons, only call
|
||||||
|
* it if it's needed.
|
||||||
|
*/
|
||||||
|
void createSymbolDatabase();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Prevent creating symbol database more than once.
|
||||||
|
*
|
||||||
|
* Initialize this flag to false in the constructors. If this flag
|
||||||
|
* is true the createSymbolDatabase should just bail out. If it is
|
||||||
|
* false the createSymbolDatabase will set it to true and create
|
||||||
|
* the symbol database.
|
||||||
|
*/
|
||||||
|
bool hasSymbolDatabase;
|
||||||
|
|
||||||
/** @brief Information about a member variable. Used when checking for uninitialized variables */
|
/** @brief Information about a member variable. Used when checking for uninitialized variables */
|
||||||
class Var
|
class Var
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue