From 4b44fa5f4ad4941d27e96f40b269367da2cfbf22 Mon Sep 17 00:00:00 2001
From: Erik Verbruggen <erik.verbruggen@nokia.com>
Date: Fri, 9 Oct 2009 15:22:57 +0200
Subject: [PATCH] Added Objective-C @-keywords to the completion.

---
 src/plugins/cpptools/cppcodecompletion.cpp | 23 ++++++++++++++++++++--
 src/plugins/cpptools/cppcodecompletion.h   |  6 ++++++
 2 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 0a30af6f78c..ea3da03360e 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -30,6 +30,7 @@
 #include "cppcodecompletion.h"
 #include "cppmodelmanager.h"
 #include "cppdoxygen.h"
+#include "cpptoolsconstants.h"
 #include "cpptoolseditorsupport.h"
 
 #include <Control.h>
@@ -52,6 +53,7 @@
 #include <cplusplus/TokenUnderCursor.h>
 
 #include <coreplugin/icore.h>
+#include <coreplugin/mimedatabase.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <texteditor/itexteditor.h>
 #include <texteditor/itexteditable.h>
@@ -510,7 +512,8 @@ CppCodeCompletion::CppCodeCompletion(CppModelManager *manager)
       m_caseSensitivity(Qt::CaseSensitive),
       m_autoInsertBrackets(true),
       m_forcedCompletion(false),
-      m_completionOperator(T_EOF_SYMBOL)
+      m_completionOperator(T_EOF_SYMBOL),
+      m_objcEnabled(true)
 {
 }
 
@@ -1151,8 +1154,12 @@ bool CppCodeCompletion::completeScope(const QList<TypeOfExpression::Result> &res
 
 void CppCodeCompletion::addKeywords()
 {
+    int keywordLimit = T_FIRST_OBJC_AT_KEYWORD;
+    if (objcKeywordsWanted())
+        keywordLimit = T_LAST_OBJC_AT_KEYWORD + 1;
+
     // keyword completion items.
-    for (int i = T_FIRST_KEYWORD; i < T_FIRST_OBJC_AT_KEYWORD; ++i) {
+    for (int i = T_FIRST_KEYWORD; i < keywordLimit; ++i) {
         TextEditor::CompletionItem item(this);
         item.text = QLatin1String(Token::name(i));
         item.icon = m_icons.keywordIcon();
@@ -1610,4 +1617,16 @@ int CppCodeCompletion::findStartOfName(int pos) const
     return pos + 1;
 }
 
+bool CppCodeCompletion::objcKeywordsWanted() const
+{
+    if (!m_objcEnabled)
+        return false;
+
+    Core::IFile *file = m_editor->file();
+    QString fileName = file->fileName();
+
+    const Core::MimeDatabase *mdb = Core::ICore::instance()->mimeDatabase();
+    return mdb->findByFile(fileName).type() == CppTools::Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE;
+}
+
 #include "cppcodecompletion.moc"
diff --git a/src/plugins/cpptools/cppcodecompletion.h b/src/plugins/cpptools/cppcodecompletion.h
index afe8a168215..3532a816a14 100644
--- a/src/plugins/cpptools/cppcodecompletion.h
+++ b/src/plugins/cpptools/cppcodecompletion.h
@@ -82,6 +82,9 @@ class CppCodeCompletion : public TextEditor::ICompletionCollector
 public:
     explicit CppCodeCompletion(CppModelManager *manager);
 
+    void setObjcEnabled(bool objcEnabled)
+    { m_objcEnabled = objcEnabled; }
+
     bool supportsEditor(TextEditor::ITextEditable *editor);
     bool triggersCompletion(TextEditor::ITextEditable *editor);
     int startCompletion(TextEditor::ITextEditable *editor);
@@ -163,6 +166,9 @@ private:
     unsigned m_completionOperator;
 
     QPointer<FunctionArgumentWidget> m_functionArgumentWidget;
+
+    bool objcKeywordsWanted() const;
+    bool m_objcEnabled;
 };
 
 } // namespace Internal
-- 
GitLab