summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodecompletion.cpp
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>2009-02-17 11:09:07 +0100
committerThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>2009-02-17 11:25:58 +0100
commita26bef5ff41ba4389fad3aacfa9d74d15e0423e0 (patch)
treea0a70610899fc861546f95c67aa64177eeb52b4d /src/plugins/cpptools/cppcodecompletion.cpp
parentd94dd392cb3cbb0c39ec9eb5cce4deba4afc4c02 (diff)
downloadqt-creator-a26bef5ff41ba4389fad3aacfa9d74d15e0423e0.tar.gz
Ignore undefined macros in macro completion
Done with Roberto Raggi
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 b9dc55f0b9..81cc4741b5 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -819,33 +819,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);