forked from qt-creator/qt-creator
C++: improve support for anonymous classes
Fix: * highlighting * find usages * follow symbol * code completion Task-number: QTCREATORBUG-6497 Task-number: QTCREATORBUG-8963 Task-number: QTCREATORBUG-3610 Task-number: QTCREATORBUG-7579 Change-Id: I3dcaf1c515d0199c3e6bee72284fbb40064686ee Reviewed-by: Petar Perisin <petar.perisin@gmail.com> Reviewed-by: Orgad Shaneh <orgads@gmail.com> Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com> Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
committed by
Erik Verbruggen
parent
a2b2857b44
commit
080bf4ecb8
17
src/libs/3rdparty/cplusplus/Control.cpp
vendored
17
src/libs/3rdparty/cplusplus/Control.cpp
vendored
@@ -101,6 +101,14 @@ template <> struct Compare<ArrayType>
|
||||
}
|
||||
};
|
||||
|
||||
template <> struct Compare<AnonymousNameId>
|
||||
{
|
||||
bool operator()(const AnonymousNameId &name, const AnonymousNameId &otherName) const
|
||||
{
|
||||
return name.classTokenIndex() < otherName.classTokenIndex();
|
||||
}
|
||||
};
|
||||
|
||||
template <> struct Compare<DestructorNameId>
|
||||
{
|
||||
bool operator()(const DestructorNameId &name, const DestructorNameId &otherName) const
|
||||
@@ -219,6 +227,11 @@ public:
|
||||
delete_array_entries(symbols);
|
||||
}
|
||||
|
||||
const AnonymousNameId *findOrInsertAnonymousNameId(unsigned classTokenIndex)
|
||||
{
|
||||
return anonymousNameIds.intern(AnonymousNameId(classTokenIndex));
|
||||
}
|
||||
|
||||
template <typename _Iterator>
|
||||
const TemplateNameId *findOrInsertTemplateNameId(const Identifier *id, bool isSpecialization,
|
||||
_Iterator first, _Iterator last)
|
||||
@@ -475,6 +488,7 @@ public:
|
||||
// ### replace std::map with lookup tables. ASAP!
|
||||
|
||||
// names
|
||||
Table<AnonymousNameId> anonymousNameIds;
|
||||
Table<DestructorNameId> destructorNameIds;
|
||||
Table<OperatorNameId> operatorNameIds;
|
||||
Table<ConversionNameId> conversionNameIds;
|
||||
@@ -550,6 +564,9 @@ DiagnosticClient *Control::diagnosticClient() const
|
||||
void Control::setDiagnosticClient(DiagnosticClient *diagnosticClient)
|
||||
{ d->diagnosticClient = diagnosticClient; }
|
||||
|
||||
const AnonymousNameId *Control::anonymousNameId(unsigned classTokenIndex)
|
||||
{ return d->findOrInsertAnonymousNameId(classTokenIndex); }
|
||||
|
||||
const OperatorNameId *Control::findOperatorNameId(OperatorNameId::Kind operatorId) const
|
||||
{
|
||||
Table<OperatorNameId>::const_iterator i = d->operatorNameIds.find(operatorId);
|
||||
|
||||
Reference in New Issue
Block a user