C++: Do type and name equality checking in a safe manner.

Change the TypeMatcher to also match names, and use two "block" lists
in SafeMatcher to prevent infinite recursion.

Task-number: QTCREATORBUG-11240
Change-Id: I0367ae795ee6be579b83aeb8d46723c877e4aa75
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
This commit is contained in:
Erik Verbruggen
2014-03-24 16:06:39 +01:00
committed by Erik Verbruggen
parent 186570a259
commit b0618281ec
27 changed files with 768 additions and 328 deletions

View File

@@ -1,6 +1,8 @@
#ifndef CPLUSPLUS_ALREADYCONSIDEREDCLASSCONTAINER_H
#define CPLUSPLUS_ALREADYCONSIDEREDCLASSCONTAINER_H
#include <cplusplus/SafeMatcher.h>
#include <QSet>
namespace CPlusPlus {
@@ -21,8 +23,9 @@ public:
if (_container.contains(item))
return true;
SafeMatcher matcher;
foreach (const T *existingItem, _container) {
if (existingItem->isEqualTo(item))
if (Matcher::match(existingItem, item, &matcher))
return true;
}