From e33767205bd2663b90d1fedbba43bef6fbcf9835 Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Wed, 8 Sep 2010 10:11:44 +0200 Subject: [PATCH] Introduced SemanticInfo::isValid(). --- src/plugins/qmljseditor/qmljscodecompletion.cpp | 5 ++--- src/plugins/qmljseditor/qmljseditor.cpp | 16 ++++++++++++++++ src/plugins/qmljseditor/qmljseditor.h | 1 + src/plugins/qmljseditor/qmljshoverhandler.cpp | 2 +- src/plugins/qmljseditor/qmljsmodelmanager.cpp | 7 ++++++- src/plugins/qmljseditor/qmljsmodelmanager.h | 1 + src/plugins/qmljseditor/qmljsquickfix.cpp | 2 +- src/plugins/qmljseditor/qmloutlinemodel.cpp | 2 ++ 8 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/plugins/qmljseditor/qmljscodecompletion.cpp b/src/plugins/qmljseditor/qmljscodecompletion.cpp index 2454502c2e9..f27ca6bfb02 100644 --- a/src/plugins/qmljseditor/qmljscodecompletion.cpp +++ b/src/plugins/qmljseditor/qmljscodecompletion.cpp @@ -678,12 +678,11 @@ int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor) m_completions.clear(); const SemanticInfo semanticInfo = edit->semanticInfo(); - const QmlJS::Snapshot snapshot = semanticInfo.snapshot; - const Document::Ptr document = semanticInfo.document; - if (!document) + if (! semanticInfo.isValid()) return -1; + const Document::Ptr document = semanticInfo.document; const QFileInfo currentFileInfo(fileName); bool isQmlFile = false; diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp index d1f9832e926..333a0f1fcdd 100644 --- a/src/plugins/qmljseditor/qmljseditor.cpp +++ b/src/plugins/qmljseditor/qmljseditor.cpp @@ -556,6 +556,11 @@ QList<AST::Node *> SemanticInfo::astPath(int cursorPosition) const LookupContext::Ptr SemanticInfo::lookupContext(const QList<QmlJS::AST::Node *> &path) const { + Q_ASSERT(! m_context.isNull()); + + if (m_context.isNull()) + return LookupContext::create(document, snapshot, path); + return LookupContext::create(document, snapshot, *m_context, path); } @@ -610,6 +615,14 @@ AST::Node *SemanticInfo::nodeUnderCursor(int pos) const return 0; } +bool SemanticInfo::isValid() const +{ + if (document && m_context) + return true; + + return false; +} + int SemanticInfo::revision() const { if (document) @@ -1360,6 +1373,9 @@ void QmlJSTextEditor::createToolBar(QmlJSEditorEditable *editable) TextEditor::BaseTextEditor::Link QmlJSTextEditor::findLinkAt(const QTextCursor &cursor, bool /*resolveTarget*/) { const SemanticInfo semanticInfo = m_semanticInfo; + if (! semanticInfo.isValid()) + return Link(); + const unsigned cursorPosition = cursor.position(); AST::Node *node = semanticInfo.nodeUnderCursor(cursorPosition); diff --git a/src/plugins/qmljseditor/qmljseditor.h b/src/plugins/qmljseditor/qmljseditor.h index 7e83fd8c7c4..b95cd0d7efd 100644 --- a/src/plugins/qmljseditor/qmljseditor.h +++ b/src/plugins/qmljseditor/qmljseditor.h @@ -121,6 +121,7 @@ class SemanticInfo public: SemanticInfo() {} + bool isValid() const; int revision() const; // Returns the declaring member diff --git a/src/plugins/qmljseditor/qmljshoverhandler.cpp b/src/plugins/qmljseditor/qmljshoverhandler.cpp index 100d8fb34fa..5e7f24ddf0c 100644 --- a/src/plugins/qmljseditor/qmljshoverhandler.cpp +++ b/src/plugins/qmljseditor/qmljshoverhandler.cpp @@ -110,7 +110,7 @@ void HoverHandler::identifyMatch(TextEditor::ITextEditor *editor, int pos) if (!matchDiagnosticMessage(qmlEditor, pos)) { const SemanticInfo &semanticInfo = qmlEditor->semanticInfo(); - if (semanticInfo.revision() != qmlEditor->editorRevision()) + if (! semanticInfo.isValid() || semanticInfo.revision() != qmlEditor->editorRevision()) return; QList<AST::Node *> astPath = semanticInfo.astPath(pos); diff --git a/src/plugins/qmljseditor/qmljsmodelmanager.cpp b/src/plugins/qmljseditor/qmljsmodelmanager.cpp index 6bbe8a0b7f2..b6b3ffeb9d9 100644 --- a/src/plugins/qmljseditor/qmljsmodelmanager.cpp +++ b/src/plugins/qmljseditor/qmljsmodelmanager.cpp @@ -80,7 +80,12 @@ ModelManager::ModelManager(QObject *parent): void ModelManager::loadQmlTypeDescriptions() { - const QString resourcePath = Core::ICore::instance()->resourcePath(); + loadQmlTypeDescriptions(Core::ICore::instance()->resourcePath()); + loadQmlTypeDescriptions(Core::ICore::instance()->userResourcePath()); +} + +void ModelManager::loadQmlTypeDescriptions(const QString &resourcePath) +{ const QDir typeFileDir(resourcePath + QLatin1String("/qml-type-descriptions")); const QStringList xmlExtensions = QStringList() << QLatin1String("*.xml"); const QFileInfoList xmlFiles = typeFileDir.entryInfoList(xmlExtensions, diff --git a/src/plugins/qmljseditor/qmljsmodelmanager.h b/src/plugins/qmljseditor/qmljsmodelmanager.h index 7b5ca21242a..b6350f7604e 100644 --- a/src/plugins/qmljseditor/qmljsmodelmanager.h +++ b/src/plugins/qmljseditor/qmljsmodelmanager.h @@ -101,6 +101,7 @@ protected: bool emitDocChangedOnDisk); void loadQmlTypeDescriptions(); + void loadQmlTypeDescriptions(const QString &path); void updateImportPaths(); diff --git a/src/plugins/qmljseditor/qmljsquickfix.cpp b/src/plugins/qmljseditor/qmljsquickfix.cpp index 476bf4f488a..3b5ce360f98 100644 --- a/src/plugins/qmljseditor/qmljsquickfix.cpp +++ b/src/plugins/qmljseditor/qmljsquickfix.cpp @@ -136,7 +136,7 @@ TextEditor::QuickFixState *QmlJSQuickFixCollector::initializeCompletion(TextEdit if (QmlJSTextEditor *qmljsEditor = qobject_cast<QmlJSTextEditor *>(editor)) { const SemanticInfo info = qmljsEditor->semanticInfo(); - if (qmljsEditor->isOutdated()) { + if (! info.isValid() || qmljsEditor->isOutdated()) { // outdated qWarning() << "TODO: outdated semantic info, force a reparse."; return 0; diff --git a/src/plugins/qmljseditor/qmloutlinemodel.cpp b/src/plugins/qmljseditor/qmloutlinemodel.cpp index f6662b9f750..a04fe75e201 100644 --- a/src/plugins/qmljseditor/qmloutlinemodel.cpp +++ b/src/plugins/qmljseditor/qmloutlinemodel.cpp @@ -330,6 +330,8 @@ Document::Ptr QmlOutlineModel::document() const void QmlOutlineModel::update(const SemanticInfo &semanticInfo) { m_semanticInfo = semanticInfo; + if (! m_semanticInfo.isValid()) + return; m_treePos.clear(); m_treePos.append(0); -- GitLab