From 6635ddbde59c983b4cd28a26a4dbb367459dc671 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Thu, 2 Apr 2009 10:19:23 +0200
Subject: [PATCH] Introduced ICompletionCollector::isValid(editor).

---
 src/plugins/cpptools/cppcodecompletion.cpp    |  3 +++
 src/plugins/cpptools/cppcodecompletion.h      |  1 +
 src/plugins/texteditor/completionsupport.cpp  | 16 +++++++++++++---
 src/plugins/texteditor/completionsupport.h    |  1 +
 src/plugins/texteditor/icompletioncollector.h |  5 +++++
 5 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 2bdaa6445f6..9a9dd71ec3c 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -508,6 +508,9 @@ static int startOfOperator(TextEditor::ITextEditable *editor,
     return start;
 }
 
+bool CppCodeCompletion::isValid(TextEditor::ITextEditable *editor)
+{ return m_manager->isCppEditor(editor); }
+
 bool CppCodeCompletion::triggersCompletion(TextEditor::ITextEditable *editor)
 {
     if (! m_manager->isCppEditor(editor)) // ### remove me
diff --git a/src/plugins/cpptools/cppcodecompletion.h b/src/plugins/cpptools/cppcodecompletion.h
index c37e09ea03e..174e5d994f4 100644
--- a/src/plugins/cpptools/cppcodecompletion.h
+++ b/src/plugins/cpptools/cppcodecompletion.h
@@ -58,6 +58,7 @@ class CppCodeCompletion : public TextEditor::ICompletionCollector
 public:
     explicit CppCodeCompletion(CppModelManager *manager);
 
+    bool isValid(TextEditor::ITextEditable *editor);
     bool triggersCompletion(TextEditor::ITextEditable *editor);
     int startCompletion(TextEditor::ITextEditable *editor);
     void completions(QList<TextEditor::CompletionItem> *completions);
diff --git a/src/plugins/texteditor/completionsupport.cpp b/src/plugins/texteditor/completionsupport.cpp
index 2e456193ad5..ef4834c8088 100644
--- a/src/plugins/texteditor/completionsupport.cpp
+++ b/src/plugins/texteditor/completionsupport.cpp
@@ -58,10 +58,11 @@ CompletionSupport::CompletionSupport()
       m_completionList(0),
       m_startPosition(0),
       m_checkCompletionTrigger(false),
-      m_editor(0)
+      m_editor(0),
+      m_completionCollector(0)
 {
-    m_completionCollector = ExtensionSystem::PluginManager::instance()
-        ->getObject<ICompletionCollector>();
+    m_completionCollectors = ExtensionSystem::PluginManager::instance()
+        ->getObjects<ICompletionCollector>();
 }
 
 void CompletionSupport::performCompletion(const CompletionItem &item)
@@ -90,6 +91,15 @@ void CompletionSupport::cleanupCompletions()
 
 void CompletionSupport::autoComplete(ITextEditable *editor, bool forced)
 {
+    m_completionCollector = 0;
+
+    foreach (ICompletionCollector *collector, m_completionCollectors) {
+        if (collector->isValid(editor)) {
+            m_completionCollector = collector;
+            break;
+        }
+    }
+
     if (!m_completionCollector)
         return;
 
diff --git a/src/plugins/texteditor/completionsupport.h b/src/plugins/texteditor/completionsupport.h
index 7cbd5ece5b4..ebe9cbd70f3 100644
--- a/src/plugins/texteditor/completionsupport.h
+++ b/src/plugins/texteditor/completionsupport.h
@@ -69,6 +69,7 @@ private:
     int m_startPosition;
     bool m_checkCompletionTrigger;          // Whether to check for completion trigger after cleanup
     ITextEditable *m_editor;
+    QList<ICompletionCollector *> m_completionCollectors;
     ICompletionCollector *m_completionCollector;
 };
 
diff --git a/src/plugins/texteditor/icompletioncollector.h b/src/plugins/texteditor/icompletioncollector.h
index 49d70f18288..a151e4cf41f 100644
--- a/src/plugins/texteditor/icompletioncollector.h
+++ b/src/plugins/texteditor/icompletioncollector.h
@@ -77,6 +77,11 @@ public:
     ICompletionCollector(QObject *parent = 0) : QObject(parent) {}
     virtual ~ICompletionCollector() {}
 
+    /*
+     * Returns true if this completion collector can be used with the given editor.
+     */
+    virtual bool isValid(ITextEditable *editor) = 0;
+
     /* This method should return whether the cursor is at a position which could
      * trigger an autocomplete. It will be called each time a character is typed in
      * the text editor.
-- 
GitLab