summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodecompletion.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-02-17 11:52:56 +0100
committerRoberto Raggi <roberto.raggi@nokia.com>2009-02-17 11:52:56 +0100
commitc2f61a76e127e218f8d3d0d82da162e7c0fc86e4 (patch)
tree4d36d36119563f16164cce375727d62502c502b1 /src/plugins/cpptools/cppcodecompletion.cpp
parentc020250556d3ae210acb174901754452922356bd (diff)
parent7774977e5d506ea7f414daca362edd9a333f6de5 (diff)
downloadqt-creator-c2f61a76e127e218f8d3d0d82da162e7c0fc86e4.tar.gz
Merge branch '1.0.0' of git@scm.dev.nokia.troll.no:creator/mainline
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r--src/plugins/cpptools/cppcodecompletion.cpp50
1 files changed, 31 insertions, 19 deletions
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index dacce4a180..af81980578 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -829,33 +829,45 @@ void CppCodeCompletion::addKeywords()
void CppCodeCompletion::addMacros(const LookupContext &context)
{
- // macro completion items.
- QSet<QByteArray> macroNames;
QSet<QString> processed;
- QList<QString> todo;
- todo.append(context.thisDocument()->fileName());
- while (! todo.isEmpty()) {
- QString fn = todo.last();
- todo.removeLast();
- if (processed.contains(fn))
- continue;
- processed.insert(fn);
- if (Document::Ptr doc = context.document(fn)) {
- foreach (const Macro &macro, doc->definedMacros()) {
- macroNames.insert(macro.name());
- }
- todo += doc->includedFiles();
- }
- }
+ QSet<QString> definedMacros;
- foreach (const QByteArray &macroName, macroNames) {
+ addMacros_helper(context, context.thisDocument()->fileName(),
+ &processed, &definedMacros);
+
+ foreach (const QString &macroName, definedMacros) {
TextEditor::CompletionItem item(this);
- item.m_text = QString::fromUtf8(macroName.constData(), macroName.length());
+ item.m_text = macroName;
item.m_icon = m_icons.macroIcon();
m_completions.append(item);
}
}
+void CppCodeCompletion::addMacros_helper(const LookupContext &context,
+ const QString &fileName,
+ QSet<QString> *processed,
+ QSet<QString> *definedMacros)
+{
+ Document::Ptr doc = context.document(fileName);
+
+ if (! doc || processed->contains(doc->fileName()))
+ return;
+
+ processed->insert(doc->fileName());
+
+ foreach (const Document::Include &i, doc->includes()) {
+ addMacros_helper(context, i.fileName(), processed, definedMacros);
+ }
+
+ foreach (const Macro &macro, doc->definedMacros()) {
+ const QString macroName = QString::fromUtf8(macro.name().constData(), macro.name().length());
+ if (! macro.isHidden())
+ definedMacros->insert(macroName);
+ else
+ definedMacros->remove(macroName);
+ }
+}
+
void CppCodeCompletion::addCompletionItem(Symbol *symbol)
{
ConvertToCompletionItem toCompletionItem(this);