From 70b64280ee38cf6327ed2733a41a13413b08df26 Mon Sep 17 00:00:00 2001
From: Leandro Melo <leandro.melo@nokia.com>
Date: Fri, 10 Feb 2012 12:58:05 +0100
Subject: [PATCH] Improve code-assist API isSortable

Now IGenericProposalModel::isSortable also takes the current prefix
as a parameter. This is particularly useful for cases like in the C++
completion: For global completions it will only sort if there's
already a content prefix - Notice, however, that the "sorting threshold"
for a maximum number of items is still kept in IGenericProposalModel::sort.

Task-number: QTCREATORBUG-6404
Change-Id: I3c2f282aa565287b8b4989930b6a27093862ef25
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
---
 src/plugins/cpptools/cppcompletionassist.cpp     | 16 +++++++++-------
 .../profilecompletionassist.cpp                  |  2 +-
 .../qt4projectmanager/profilecompletionassist.h  |  2 +-
 .../codeassist/basicproposalitemlistmodel.cpp    |  4 +++-
 .../codeassist/basicproposalitemlistmodel.h      |  2 +-
 .../codeassist/genericproposalwidget.cpp         |  2 +-
 .../codeassist/igenericproposalmodel.h           |  2 +-
 7 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp
index 5999c6570b2..fa4d7fd1642 100644
--- a/src/plugins/cpptools/cppcompletionassist.cpp
+++ b/src/plugins/cpptools/cppcompletionassist.cpp
@@ -183,16 +183,14 @@ class CppAssistProposalModel : public TextEditor::BasicProposalItemListModel
 public:
     CppAssistProposalModel()
         : TextEditor::BasicProposalItemListModel()
-        , m_sortable(false)
         , m_completionOperator(T_EOF_SYMBOL)
         , m_replaceDotForArrow(false)
         , m_typeOfExpression(new TypeOfExpression)
     {}
 
-    virtual bool isSortable() const { return m_sortable; }
+    virtual bool isSortable(const QString &prefix) const;
     virtual IAssistProposalItem *proposalItem(int index) const;
 
-    bool m_sortable;
     unsigned m_completionOperator;
     bool m_replaceDotForArrow;
     QSharedPointer<TypeOfExpression> m_typeOfExpression;
@@ -229,6 +227,14 @@ private:
 
 Q_DECLARE_METATYPE(CppTools::Internal::CompleteFunctionDeclaration)
 
+bool CppAssistProposalModel::isSortable(const QString &prefix) const
+{
+    if (m_completionOperator != T_EOF_SYMBOL)
+        return true;
+
+    return !prefix.isEmpty();
+}
+
 IAssistProposalItem *CppAssistProposalModel::proposalItem(int index) const
 {
     BasicProposalItem *item =
@@ -699,10 +705,6 @@ IAssistProposal * CppCompletionAssistProcessor::perform(const IAssistInterface *
         if (m_hintProposal)
             return m_hintProposal;
 
-        if (m_model->m_completionOperator != T_EOF_SYMBOL)
-            m_model->m_sortable = true;
-        else
-            m_model->m_sortable = false;
         return createContentProposal();
     }
 
diff --git a/src/plugins/qt4projectmanager/profilecompletionassist.cpp b/src/plugins/qt4projectmanager/profilecompletionassist.cpp
index 874e3999523..94f998ea67a 100644
--- a/src/plugins/qt4projectmanager/profilecompletionassist.cpp
+++ b/src/plugins/qt4projectmanager/profilecompletionassist.cpp
@@ -225,7 +225,7 @@ ProFileAssistProposalModel::ProFileAssistProposalModel(
 ProFileAssistProposalModel::~ProFileAssistProposalModel()
 {}
 
-bool ProFileAssistProposalModel::isSortable() const
+bool ProFileAssistProposalModel::isSortable(const QString &prefix) const
 {
     return false;
 }
diff --git a/src/plugins/qt4projectmanager/profilecompletionassist.h b/src/plugins/qt4projectmanager/profilecompletionassist.h
index a08521a40b1..260e1e825f3 100644
--- a/src/plugins/qt4projectmanager/profilecompletionassist.h
+++ b/src/plugins/qt4projectmanager/profilecompletionassist.h
@@ -97,7 +97,7 @@ public:
     ProFileAssistProposalModel(const QList<TextEditor::BasicProposalItem *> &items);
     virtual ~ProFileAssistProposalModel();
 
-    virtual bool isSortable() const;
+    virtual bool isSortable(const QString &prefix) const;
 };
 
 } // Internal
diff --git a/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.cpp b/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.cpp
index ca4e6ba977c..a2cdeadf504 100644
--- a/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.cpp
+++ b/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.cpp
@@ -216,8 +216,10 @@ void BasicProposalItemListModel::filter(const QString &prefix)
     }
 }
 
-bool BasicProposalItemListModel::isSortable() const
+bool BasicProposalItemListModel::isSortable(const QString &prefix) const
 {
+    Q_UNUSED(prefix);
+
     if (m_currentItems.size() < kMaxSort)
         return true;
     return false;
diff --git a/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.h b/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.h
index 8029d4e42f4..0ea79c2872b 100644
--- a/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.h
+++ b/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.h
@@ -60,7 +60,7 @@ public:
     virtual int persistentId(int index) const;
     virtual void removeDuplicates();
     virtual void filter(const QString &prefix);
-    virtual bool isSortable() const;
+    virtual bool isSortable(const QString &prefix) const;
     virtual void sort();
     virtual bool supportsPrefixExpansion() const;
     virtual QString proposalPrefix() const;
diff --git a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp
index a06891da3a9..8b0951ee848 100644
--- a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp
+++ b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp
@@ -437,7 +437,7 @@ bool GenericProposalWidget::updateAndCheck(const QString &prefix)
         abort();
         return false;
     }
-    if (d->m_model->isSortable())
+    if (d->m_model->isSortable(prefix))
         d->m_model->sort();
     d->m_completionListView->reset();
 
diff --git a/src/plugins/texteditor/codeassist/igenericproposalmodel.h b/src/plugins/texteditor/codeassist/igenericproposalmodel.h
index d5ba9550225..746b9242a9b 100644
--- a/src/plugins/texteditor/codeassist/igenericproposalmodel.h
+++ b/src/plugins/texteditor/codeassist/igenericproposalmodel.h
@@ -55,7 +55,7 @@ public:
     virtual int persistentId(int index) const = 0;
     virtual void removeDuplicates() = 0;
     virtual void filter(const QString &prefix) = 0;
-    virtual bool isSortable() const = 0;
+    virtual bool isSortable(const QString &prefix) const = 0;
     virtual void sort() = 0;
     virtual bool supportsPrefixExpansion() const = 0;
     virtual QString proposalPrefix() const = 0;
-- 
GitLab