summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/cppeditor/cppquickfixassistant.cpp5
-rw-r--r--src/plugins/cppeditor/cppquickfixassistant.h1
-rw-r--r--src/plugins/qmljseditor/qmljsquickfixassist.cpp5
-rw-r--r--src/plugins/qmljseditor/qmljsquickfixassist.h1
-rw-r--r--src/plugins/texteditor/circularclipboardassist.cpp5
-rw-r--r--src/plugins/texteditor/circularclipboardassist.h1
-rw-r--r--src/plugins/texteditor/codeassist/codeassistant.cpp38
-rw-r--r--src/plugins/texteditor/codeassist/iassistprovider.cpp6
-rw-r--r--src/plugins/texteditor/codeassist/iassistprovider.h1
9 files changed, 44 insertions, 19 deletions
diff --git a/src/plugins/cppeditor/cppquickfixassistant.cpp b/src/plugins/cppeditor/cppquickfixassistant.cpp
index 2c6d7e3217..4ca8d0e0a6 100644
--- a/src/plugins/cppeditor/cppquickfixassistant.cpp
+++ b/src/plugins/cppeditor/cppquickfixassistant.cpp
@@ -46,6 +46,11 @@ using namespace CPlusPlus;
// -------------------------
// CppQuickFixAssistProvider
// -------------------------
+bool CppQuickFixAssistProvider::isAsynchronous() const
+{
+ return false;
+}
+
bool CppQuickFixAssistProvider::supportsEditor(const Core::Id &editorId) const
{
return editorId == CppEditor::Constants::CPPEDITOR_ID;
diff --git a/src/plugins/cppeditor/cppquickfixassistant.h b/src/plugins/cppeditor/cppquickfixassistant.h
index fbdea6d1de..cfc921d00d 100644
--- a/src/plugins/cppeditor/cppquickfixassistant.h
+++ b/src/plugins/cppeditor/cppquickfixassistant.h
@@ -86,6 +86,7 @@ private:
class CppQuickFixAssistProvider : public TextEditor::QuickFixAssistProvider
{
public:
+ virtual bool isAsynchronous() const;
virtual bool supportsEditor(const Core::Id &editorId) const;
virtual TextEditor::IAssistProcessor *createProcessor() const;
diff --git a/src/plugins/qmljseditor/qmljsquickfixassist.cpp b/src/plugins/qmljseditor/qmljsquickfixassist.cpp
index fef38fadd4..29a1a86185 100644
--- a/src/plugins/qmljseditor/qmljsquickfixassist.cpp
+++ b/src/plugins/qmljseditor/qmljsquickfixassist.cpp
@@ -96,6 +96,11 @@ QmlJSQuickFixAssistProvider::QmlJSQuickFixAssistProvider()
QmlJSQuickFixAssistProvider::~QmlJSQuickFixAssistProvider()
{}
+bool QmlJSQuickFixAssistProvider::isAsynchronous() const
+{
+ return false;
+}
+
bool QmlJSQuickFixAssistProvider::supportsEditor(const Core::Id &editorId) const
{
return editorId == Constants::C_QMLJSEDITOR_ID;
diff --git a/src/plugins/qmljseditor/qmljsquickfixassist.h b/src/plugins/qmljseditor/qmljsquickfixassist.h
index 98a6fc8a85..af2e51d197 100644
--- a/src/plugins/qmljseditor/qmljsquickfixassist.h
+++ b/src/plugins/qmljseditor/qmljsquickfixassist.h
@@ -77,6 +77,7 @@ public:
QmlJSQuickFixAssistProvider();
virtual ~QmlJSQuickFixAssistProvider();
+ virtual bool isAsynchronous() const;
virtual bool supportsEditor(const Core::Id &editorId) const;
virtual TextEditor::IAssistProcessor *createProcessor() const;
diff --git a/src/plugins/texteditor/circularclipboardassist.cpp b/src/plugins/texteditor/circularclipboardassist.cpp
index e742ae01a8..046f1b836d 100644
--- a/src/plugins/texteditor/circularclipboardassist.cpp
+++ b/src/plugins/texteditor/circularclipboardassist.cpp
@@ -112,6 +112,11 @@ public:
} // namespace Internal
} // namespace TextEditor
+bool ClipboardAssistProvider::isAsynchronous() const
+{
+ return false;
+}
+
bool ClipboardAssistProvider::supportsEditor(const Core::Id &/*editorId*/) const
{
return true;
diff --git a/src/plugins/texteditor/circularclipboardassist.h b/src/plugins/texteditor/circularclipboardassist.h
index ff495ff63c..307f9f4ce7 100644
--- a/src/plugins/texteditor/circularclipboardassist.h
+++ b/src/plugins/texteditor/circularclipboardassist.h
@@ -38,6 +38,7 @@ namespace Internal {
class ClipboardAssistProvider: public IAssistProvider
{
public:
+ bool isAsynchronous() const;
virtual bool supportsEditor(const Core::Id &editorId) const;
virtual IAssistProcessor *createProcessor() const;
};
diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp
index 753c8e7945..36762e4e58 100644
--- a/src/plugins/texteditor/codeassist/codeassistant.cpp
+++ b/src/plugins/texteditor/codeassist/codeassistant.cpp
@@ -123,7 +123,7 @@ private:
CompletionAssistProvider *m_completionProvider;
QList<QuickFixAssistProvider *> m_quickFixProviders;
Internal::ProcessorRunner *m_requestRunner;
- CompletionAssistProvider *m_requestProvider;
+ IAssistProvider *m_requestProvider;
AssistKind m_assistKind;
IAssistProposalWidget *m_proposalWidget;
QScopedPointer<IAssistProposal> m_proposal;
@@ -258,22 +258,18 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason,
if (!assistInterface)
return;
- if (kind == Completion) {
- CompletionAssistProvider *completionProvider =
- static_cast<CompletionAssistProvider *>(provider);
- if (completionProvider->isAsynchronous()) {
- m_requestProvider = completionProvider;
- m_requestRunner = new ProcessorRunner;
- connect(m_requestRunner, SIGNAL(finished()), this, SLOT(proposalComputed()));
- connect(m_requestRunner, SIGNAL(finished()), this, SLOT(finalizeRequest()));
- connect(m_requestRunner, SIGNAL(finished()), this, SIGNAL(finished()));
- assistInterface->prepareForAsyncUse();
- m_requestRunner->setReason(reason);
- m_requestRunner->setProcessor(processor);
- m_requestRunner->setAssistInterface(assistInterface);
- m_requestRunner->start();
- return;
- }
+ if (provider->isAsynchronous()) {
+ m_requestProvider = provider;
+ m_requestRunner = new ProcessorRunner;
+ connect(m_requestRunner, SIGNAL(finished()), this, SLOT(proposalComputed()));
+ connect(m_requestRunner, SIGNAL(finished()), this, SLOT(finalizeRequest()));
+ connect(m_requestRunner, SIGNAL(finished()), this, SIGNAL(finished()));
+ assistInterface->prepareForAsyncUse();
+ m_requestRunner->setReason(reason);
+ m_requestRunner->setProcessor(processor);
+ m_requestRunner->setAssistInterface(assistInterface);
+ m_requestRunner->start();
+ return;
}
if (IAssistProposal *newProposal = processor->perform(assistInterface))
@@ -502,12 +498,16 @@ bool CodeAssistantPrivate::eventFilter(QObject *o, QEvent *e)
} else if (type == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e);
const QString &keyText = keyEvent->text();
+
+ CompletionAssistProvider *completionProvider = 0;
if ((keyText.isEmpty()
&& keyEvent->key() != Qt::LeftArrow
&& keyEvent->key() != Qt::RightArrow
&& keyEvent->key() != Qt::Key_Shift)
- || (!keyText.isEmpty() &&
- !m_requestProvider->isContinuationChar(keyText.at(0)))) {
+ || (!keyText.isEmpty()
+ && (((completionProvider = dynamic_cast<CompletionAssistProvider *>(m_requestProvider))
+ ? !completionProvider->isContinuationChar(keyText.at(0))
+ : false)))) {
destroyContext();
} else if (!keyText.isEmpty() && !m_receivedContentWhileWaiting) {
m_receivedContentWhileWaiting = true;
diff --git a/src/plugins/texteditor/codeassist/iassistprovider.cpp b/src/plugins/texteditor/codeassist/iassistprovider.cpp
index 2dac112c7f..935cda9bf6 100644
--- a/src/plugins/texteditor/codeassist/iassistprovider.cpp
+++ b/src/plugins/texteditor/codeassist/iassistprovider.cpp
@@ -50,6 +50,12 @@ using namespace TextEditor;
*/
/*!
+ \fn bool TextEditor::IAssistProvider::isAsynchronous() const;
+
+ Returns whether this provider runs asynchronously.
+*/
+
+/*!
\fn bool TextEditor::IAssistProvider::supportsEditor(const Core::Id &editorId) const
Returns whether this provider supports the editor which has the \a editorId.
diff --git a/src/plugins/texteditor/codeassist/iassistprovider.h b/src/plugins/texteditor/codeassist/iassistprovider.h
index 761b64a46a..11a074273d 100644
--- a/src/plugins/texteditor/codeassist/iassistprovider.h
+++ b/src/plugins/texteditor/codeassist/iassistprovider.h
@@ -46,6 +46,7 @@ class TEXTEDITOR_EXPORT IAssistProvider : public QObject
public:
IAssistProvider() {}
+ virtual bool isAsynchronous() const = 0;
virtual bool supportsEditor(const Core::Id &editorId) const = 0;
virtual IAssistProcessor *createProcessor() const = 0;
};