summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hartmann <Thomas.Hartmann@digia.com>2014-09-08 12:08:00 +0200
committerThomas Hartmann <Thomas.Hartmann@digia.com>2014-09-08 12:36:29 +0200
commit8c17e3b3a26fd33ce14c0ae9c0980ce6e3f04c28 (patch)
treea50efaebabb79ecb2acc22af6546e48d6713e5a5
parentb66155cf179dcdbf86c6379d6c9eed1446b47fa3 (diff)
downloadqt-creator-8c17e3b3a26fd33ce14c0ae9c0980ce6e3f04c28.tar.gz
QmlDesigner: Fix regression for import paths
The imports paths used by the sub component manger and meta info system were not correctly resolved. The main reason was that the textDocument in the text modifiers are just plain text buffers and do not containt any url for the document. This patch removes importPaths() from the TextModifier. The ViewerContext can be stored in the TextToModelMerger and does not have to be recreated when needed. Change-Id: I17281caee23ddd51f6e36d5346bc3bd7c53005e8 Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
-rw-r--r--src/plugins/qmldesigner/designercore/include/componenttextmodifier.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/plaintexteditmodifier.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/rewriterview.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/textmodifier.h1
-rw-r--r--src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp3
-rw-r--r--src/plugins/qmldesigner/designercore/model/model.cpp9
-rw-r--r--src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp14
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriterview.cpp5
-rw-r--r--src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp13
-rw-r--r--src/plugins/qmldesigner/designercore/model/texttomodelmerger.h4
10 files changed, 22 insertions, 33 deletions
diff --git a/src/plugins/qmldesigner/designercore/include/componenttextmodifier.h b/src/plugins/qmldesigner/designercore/include/componenttextmodifier.h
index b31d6506a3..6314568fe4 100644
--- a/src/plugins/qmldesigner/designercore/include/componenttextmodifier.h
+++ b/src/plugins/qmldesigner/designercore/include/componenttextmodifier.h
@@ -58,8 +58,6 @@ public:
virtual void deactivateChangeSignals();
virtual void reactivateChangeSignals();
- virtual QStringList importPaths() const;
-
virtual bool renameId(const QString & /* oldId */, const QString & /* newId */) { return false; }
public slots:
diff --git a/src/plugins/qmldesigner/designercore/include/plaintexteditmodifier.h b/src/plugins/qmldesigner/designercore/include/plaintexteditmodifier.h
index 730722ea1e..d5b28558e8 100644
--- a/src/plugins/qmldesigner/designercore/include/plaintexteditmodifier.h
+++ b/src/plugins/qmldesigner/designercore/include/plaintexteditmodifier.h
@@ -73,8 +73,6 @@ public:
virtual void deactivateChangeSignals();
virtual void reactivateChangeSignals();
- virtual QStringList importPaths() const;
-
virtual bool renameId(const QString & /* oldId */, const QString & /* newId */) { return false; }
protected:
diff --git a/src/plugins/qmldesigner/designercore/include/rewriterview.h b/src/plugins/qmldesigner/designercore/include/rewriterview.h
index 9721792907..770b242464 100644
--- a/src/plugins/qmldesigner/designercore/include/rewriterview.h
+++ b/src/plugins/qmldesigner/designercore/include/rewriterview.h
@@ -203,6 +203,8 @@ public:
QString pathForImport(const Import &import);
+ QStringList importDirectories() const;
+
signals:
void errorsChanged(const QList<RewriterView::Error> &errors);
diff --git a/src/plugins/qmldesigner/designercore/include/textmodifier.h b/src/plugins/qmldesigner/designercore/include/textmodifier.h
index d95405e047..c9187baf98 100644
--- a/src/plugins/qmldesigner/designercore/include/textmodifier.h
+++ b/src/plugins/qmldesigner/designercore/include/textmodifier.h
@@ -84,7 +84,6 @@ public:
virtual void reactivateChangeSignals() = 0;
static QmlJS::Snapshot qmljsSnapshot();
- virtual QStringList importPaths() const = 0;
virtual bool renameId(const QString &oldId, const QString &newId) = 0;
diff --git a/src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp b/src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp
index d78a03e6f2..1d0b047598 100644
--- a/src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp
+++ b/src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp
@@ -128,6 +128,3 @@ void ComponentTextModifier::reactivateChangeSignals()
void ComponentTextModifier::contentsChange(int /*position*/, int /*charsRemoved*/, int /*charsAdded*/)
{
}
-
-QStringList ComponentTextModifier::importPaths() const
-{ return m_originalModifier->importPaths(); }
diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp
index 2fe40bd15e..94b19ee38a 100644
--- a/src/plugins/qmldesigner/designercore/model/model.cpp
+++ b/src/plugins/qmldesigner/designercore/model/model.cpp
@@ -61,6 +61,8 @@
#include "invalididexception.h"
#include "textmodifier.h"
+#include <qmljs/qmljsmodelmanagerinterface.h>
+
/*!
\defgroup CoreModel
*/
@@ -1823,6 +1825,9 @@ QString Model::pathForImport(const Import &import)
QStringList Model::importPaths() const
{
+ if (rewriterView())
+ return rewriterView()->importDirectories();
+
QStringList importPathList;
QString documentDirectoryPath = QFileInfo(fileUrl().toLocalFile()).absolutePath();
@@ -1830,10 +1835,6 @@ QStringList Model::importPaths() const
if (!documentDirectoryPath.isEmpty())
importPathList.append(documentDirectoryPath);
- if (textModifier()) {
- importPathList.append(textModifier()->importPaths());
- }
-
return importPathList;
}
diff --git a/src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp b/src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp
index 71c22c9d3d..62354bfe6e 100644
--- a/src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp
+++ b/src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp
@@ -196,17 +196,3 @@ void PlainTextEditModifier::reactivateChangeSignals()
emit textChanged();
}
}
-
-QStringList PlainTextEditModifier::importPaths() const
-{
- QmlJS::ModelManagerInterface *modelManager = QmlJS::ModelManagerInterface::instance();
- if (modelManager && textDocument()) {
- QString documentFilePath = textDocument()->baseUrl().toLocalFile();
- if (!documentFilePath.isEmpty()) {
- QmlJS::Document::Ptr qmljsDocument = modelManager->snapshot().document(documentFilePath);
- return modelManager->defaultVContext(QmlJS::Language::Qml, qmljsDocument, true).paths;
- }
- }
-
- return QStringList();
-}
diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
index 9711723f85..7498f0fb25 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
@@ -745,6 +745,11 @@ QString RewriterView::pathForImport(const Import &import)
return QString();
}
+QStringList RewriterView::importDirectories() const
+{
+ return m_textToModelMerger->vContext().paths;
+}
+
void RewriterView::qmlTextChanged()
{
if (inErrorState())
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index b13e359c93..dc646979fc 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -715,7 +715,7 @@ void TextToModelMerger::setupImports(const Document::Ptr &doc,
if (!import->fileName.isEmpty()) {
const QString strippedFileName = stripQuotes(import->fileName.toString());
const Import newImport = Import::createFileImport(strippedFileName,
- version, as, m_rewriterView->textModifier()->importPaths());
+ version, as, m_rewriterView->importDirectories());
if (!existingImports.removeOne(newImport))
differenceHandler.modelMissesImport(newImport);
@@ -727,7 +727,7 @@ void TextToModelMerger::setupImports(const Document::Ptr &doc,
}
const Import newImport =
- Import::createLibraryImport(importUri, version, as, m_rewriterView->textModifier()->importPaths());
+ Import::createLibraryImport(importUri, version, as, m_rewriterView->importDirectories());
if (!existingImports.removeOne(newImport))
differenceHandler.modelMissesImport(newImport);
@@ -833,9 +833,8 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH
// qDebug() << "TextToModelMerger::load with data:" << data;
const QUrl url = m_rewriterView->model()->fileUrl();
- const QStringList importPaths = m_rewriterView->textModifier()->importPaths();
- setActive(true);
+ setActive(true);
try {
Snapshot snapshot = m_rewriterView->textModifier()->qmljsSnapshot();
@@ -853,8 +852,8 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH
return false;
}
snapshot.insert(doc);
- QmlJS::ViewerContext vContext = QmlJS::ModelManagerInterface::instance()->defaultVContext(Language::Qml, doc, true);
- ReadingContext ctxt(snapshot, doc, vContext);
+ m_vContext = QmlJS::ModelManagerInterface::instance()->defaultVContext(Language::Qml, doc, true);
+ ReadingContext ctxt(snapshot, doc, m_vContext);
m_scopeChain = QSharedPointer<const ScopeChain>(
new ScopeChain(ctxt.scopeChain()));
m_document = doc;
@@ -867,7 +866,7 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH
}
setupImports(doc, differenceHandler);
- setupPossibleImports(snapshot, vContext);
+ setupPossibleImports(snapshot, m_vContext);
if (m_rewriterView->model()->imports().isEmpty()) {
const QmlJS::DiagnosticMessage diagnosticMessage(QmlJS::Severity::Error, AST::SourceLocation(0, 0, 0, 0), QCoreApplication::translate("QmlDesigner::TextToModelMerger", "No import statements found"));
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h
index 833cdc7cfb..0e98fade2c 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h
@@ -72,6 +72,9 @@ public:
const QmlJS::Document *document() const
{ return m_document.data(); }
+ const QmlJS::ViewerContext &vContext() const
+ { return m_vContext; }
+
protected:
void setActive(bool active);
@@ -145,6 +148,7 @@ private:
QTimer m_setupTimer;
QSet<ModelNode> m_setupComponentList;
QSet<ModelNode> m_setupCustomParserList;
+ QmlJS::ViewerContext m_vContext;
};
class DifferenceHandler