From 067ae2439b83997656e5fb1523809cd9e485ad28 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 19 Nov 2013 16:18:27 +0100 Subject: [PATCH 01/56] CppTools: Fix crash on shutdown We need to wait for the document parser, otherwise the CppModelManager object might get destroyed first and will be referenced later in CppEditorSupport::parse(). Change-Id: I1b591640c1da3e63e49ac0b4b8af41aae31b3d43 Reviewed-by: Friedemann Kleint Reviewed-by: Erik Verbruggen --- src/plugins/cpptools/cpptoolseditorsupport.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/cpptools/cpptoolseditorsupport.cpp b/src/plugins/cpptools/cpptoolseditorsupport.cpp index 89e787d081c..85c304cad63 100644 --- a/src/plugins/cpptools/cpptoolseditorsupport.cpp +++ b/src/plugins/cpptools/cpptoolseditorsupport.cpp @@ -169,6 +169,7 @@ CppEditorSupport::~CppEditorSupport() m_highlighter.cancel(); m_futureSemanticInfo.cancel(); + m_documentParser.waitForFinished(); m_highlighter.waitForFinished(); m_futureSemanticInfo.waitForFinished(); } From 473905671c324de52739390cbc6b9f54b6095d00 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 12 Nov 2013 16:19:22 +0100 Subject: [PATCH 02/56] Debugger: Improve QModelIndex dumper An unavailable display value doesn't mean an invalid index Change-Id: I68baa09c9d6176dcd1a3f983ec375414292d7026 Reviewed-by: Eike Ziller --- share/qtcreator/debugger/qttypes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index 3bd07d5506e..fba8d299874 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -165,7 +165,7 @@ def qdump__QModelIndex(d, value): v = val["d"]["data"]["ptr"] d.putStringValue(d.makeValue(ns + 'QString', v)) except: - d.putValue("(invalid)") + d.putValue("") d.putNumChild(rowCount * columnCount) if d.isExpanded(): From 17f7557d2d7d2139901760a177502a4131b8d752 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 20 Nov 2013 02:19:54 +0100 Subject: [PATCH 03/56] Debugger: Sort thread model directly Change-Id: I776687b6abdf45b86cf879d6c7d1164da37ac04f Reviewed-by: hjk --- src/plugins/debugger/threadshandler.cpp | 97 ++++++++++++++++--------- src/plugins/debugger/threadshandler.h | 10 +-- 2 files changed, 66 insertions(+), 41 deletions(-) diff --git a/src/plugins/debugger/threadshandler.cpp b/src/plugins/debugger/threadshandler.cpp index 4996d34752a..ede8b5aee85 100644 --- a/src/plugins/debugger/threadshandler.cpp +++ b/src/plugins/debugger/threadshandler.cpp @@ -36,12 +36,11 @@ #include #include -#include namespace Debugger { namespace Internal { -void mergeThreadData(ThreadData &data, const ThreadData &other) +static void mergeThreadData(ThreadData &data, const ThreadData &other) { if (!other.core.isEmpty()) data.core = other.core; @@ -67,6 +66,40 @@ void mergeThreadData(ThreadData &data, const ThreadData &other) data.lineNumber = other.lineNumber; } +static QVariant threadPart(const ThreadData &thread, int column) +{ + switch (column) { + case ThreadData::IdColumn: + return thread.id.raw(); + case ThreadData::FunctionColumn: + return thread.function; + case ThreadData::FileColumn: + return thread.fileName.isEmpty() ? thread.module : thread.fileName; + case ThreadData::LineColumn: + return thread.lineNumber >= 0 + ? QString::number(thread.lineNumber) : QString(); + case ThreadData::AddressColumn: + return thread.address > 0 + ? QLatin1String("0x") + QString::number(thread.address, 16) + : QString(); + case ThreadData::CoreColumn: + return thread.core; + case ThreadData::StateColumn: + return thread.state; + case ThreadData::TargetIdColumn: + if (thread.targetId.startsWith(QLatin1String("Thread "))) + return thread.targetId.mid(7); + return thread.targetId; + case ThreadData::NameColumn: + return thread.name; + case ThreadData::DetailsColumn: + return thread.details; + case ThreadData::ComboNameColumn: + return QString::fromLatin1("#%1 %2").arg(thread.id.raw()).arg(thread.name); + } + return QVariant(); +} + //////////////////////////////////////////////////////////////////////// // // ThreadsHandler @@ -137,8 +170,6 @@ ThreadsHandler::ThreadsHandler() { m_resetLocationScheduled = false; setObjectName(QLatin1String("ThreadsModel")); - m_proxyModel = new QSortFilterProxyModel(this); - m_proxyModel->setSourceModel(this); } int ThreadsHandler::currentThreadIndex() const @@ -168,35 +199,7 @@ QVariant ThreadsHandler::data(const QModelIndex &index, int role) const switch (role) { case Qt::DisplayRole: - switch (index.column()) { - case ThreadData::IdColumn: - return thread.id.raw(); - case ThreadData::FunctionColumn: - return thread.function; - case ThreadData::FileColumn: - return thread.fileName.isEmpty() ? thread.module : thread.fileName; - case ThreadData::LineColumn: - return thread.lineNumber >= 0 - ? QString::number(thread.lineNumber) : QString(); - case ThreadData::AddressColumn: - return thread.address > 0 - ? QLatin1String("0x") + QString::number(thread.address, 16) - : QString(); - case ThreadData::CoreColumn: - return thread.core; - case ThreadData::StateColumn: - return thread.state; - case ThreadData::TargetIdColumn: - if (thread.targetId.startsWith(QLatin1String("Thread "))) - return thread.targetId.mid(7); - return thread.targetId; - case ThreadData::NameColumn: - return thread.name; - case ThreadData::DetailsColumn: - return thread.details; - case ThreadData::ComboNameColumn: - return QString::fromLatin1("#%1 %2").arg(thread.id.raw()).arg(thread.name); - } + return threadPart(thread, index.column()); case Qt::ToolTipRole: return threadToolTip(thread); case Qt::DecorationRole: @@ -250,6 +253,32 @@ Qt::ItemFlags ThreadsHandler::flags(const QModelIndex &index) const return stopped ? QAbstractTableModel::flags(index) : Qt::ItemFlags(0); } +struct Sorter +{ + Sorter(int column, Qt::SortOrder order) + : m_column(column), m_order(order) + {} + + bool operator()(const ThreadData &t1, const ThreadData &t2) const + { + const QVariant v1 = threadPart(t1, m_column); + const QVariant v2 = threadPart(t2, m_column); + if (v1 == v2) + return false; + return (v1 < v2) ^ (m_order == Qt::DescendingOrder); + } + + int m_column; + Qt::SortOrder m_order; +}; + +void ThreadsHandler::sort(int column, Qt::SortOrder order) +{ + layoutAboutToBeChanged(); + qSort(m_threads.begin(), m_threads.end(), Sorter(column, order)); + layoutChanged(); +} + ThreadId ThreadsHandler::currentThread() const { return m_currentId; @@ -490,7 +519,7 @@ void ThreadsHandler::resetLocation() QAbstractItemModel *ThreadsHandler::model() { - return m_proxyModel; + return this; } } // namespace Internal diff --git a/src/plugins/debugger/threadshandler.h b/src/plugins/debugger/threadshandler.h index 1bf9ef6da9a..30f458ee36a 100644 --- a/src/plugins/debugger/threadshandler.h +++ b/src/plugins/debugger/threadshandler.h @@ -30,14 +30,10 @@ #ifndef THREADSHANDLER_H #define THREADSHANDLER_H -#include -#include - #include "threaddata.h" -QT_BEGIN_NAMESPACE -class QSortFilterProxyModel; -QT_END_NAMESPACE +#include +#include //////////////////////////////////////////////////////////////////////// // @@ -92,6 +88,7 @@ private: QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; Qt::ItemFlags flags(const QModelIndex &index) const; + void sort(int, Qt::SortOrder); void updateThreadBox(); void threadDataChanged(ThreadId id); @@ -101,7 +98,6 @@ private: const QIcon m_emptyIcon; bool m_resetLocationScheduled; - QSortFilterProxyModel *m_proxyModel; }; } // namespace Internal From f744372ed35fb7c99312df5b7bc3e6124d9cae36 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Tue, 19 Nov 2013 18:34:26 +0100 Subject: [PATCH 04/56] Android: Fix crash in CreateAndroidManifestWizard Task-number: QTCREATORBUG-10833 Change-Id: I574f6c72b38e76f424b179919fee14a132b3ed4f Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/plugins/android/createandroidmanifestwizard.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/android/createandroidmanifestwizard.cpp b/src/plugins/android/createandroidmanifestwizard.cpp index 84def920653..be51fb1c77d 100644 --- a/src/plugins/android/createandroidmanifestwizard.cpp +++ b/src/plugins/android/createandroidmanifestwizard.cpp @@ -76,6 +76,7 @@ ChooseProFilePage::ChooseProFilePage(CreateAndroidManifestWizard *wizard, const foreach (QmakeProFileNode *node, nodes) m_comboBox->addItem(node->displayName(), QVariant::fromValue(static_cast(node))); // TODO something more? + nodeSelected(0); connect(m_comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(nodeSelected(int))); From abdbae33083164b4021884fee500cf325ffc8994 Mon Sep 17 00:00:00 2001 From: Przemyslaw Gorszkowski Date: Tue, 5 Nov 2013 14:02:13 +0100 Subject: [PATCH 05/56] CppEditor: "Include Hierarchy": using snapshot from snapshotUpdater For "includes" we should use snapshot from "SnapshotUpdater"(project specific snapshot, not global snapshot) instead of "global" snapshot. The snapshot of the editor's SnapshotUpdater contains the documents parsed with the appropriate include paths/defines etc. and should therefore be used for the include hierarchy. Change-Id: I6bbaf5040536b771d32697aad1db364758ff8382 Reviewed-by: Nikolai Kosjar --- src/plugins/cppeditor/cppincludehierarchy.cpp | 24 +++++++++++++---- src/plugins/cppeditor/cppincludehierarchy.h | 3 +++ .../cppeditor/cppincludehierarchy_test.cpp | 15 +++++++++-- .../cppeditor/cppincludehierarchymodel.cpp | 27 ++++++++++++------- .../cppeditor/cppincludehierarchymodel.h | 8 +++++- 5 files changed, 59 insertions(+), 18 deletions(-) diff --git a/src/plugins/cppeditor/cppincludehierarchy.cpp b/src/plugins/cppeditor/cppincludehierarchy.cpp index 15a2429f824..3efde4c154c 100644 --- a/src/plugins/cppeditor/cppincludehierarchy.cpp +++ b/src/plugins/cppeditor/cppincludehierarchy.cpp @@ -36,6 +36,7 @@ #include "cppincludehierarchymodel.h" #include "cppincludehierarchytreeview.h" +#include #include #include @@ -89,7 +90,8 @@ CppIncludeHierarchyWidget::CppIncludeHierarchyWidget() : m_treeView(0), m_model(0), m_delegate(0), - m_includeHierarchyInfoLabel(0) + m_includeHierarchyInfoLabel(0), + m_editor(0) { m_inspectedFile = new CppIncludeLabel(this); m_inspectedFile->setMargin(5); @@ -118,6 +120,9 @@ CppIncludeHierarchyWidget::CppIncludeHierarchyWidget() : setLayout(layout); connect(CppEditorPlugin::instance(), SIGNAL(includeHierarchyRequested()), SLOT(perform())); + connect(Core::EditorManager::instance(), SIGNAL(editorsClosed(QList)), + this, SLOT(editorsClosed(QList))); + } CppIncludeHierarchyWidget::~CppIncludeHierarchyWidget() @@ -128,15 +133,16 @@ void CppIncludeHierarchyWidget::perform() { showNoIncludeHierarchyLabel(); - CPPEditor *editor = qobject_cast(Core::EditorManager::currentEditor()); - if (!editor) + m_editor = qobject_cast(Core::EditorManager::currentEditor()); + if (!m_editor) return; - CPPEditorWidget *widget = qobject_cast(editor->widget()); + + CPPEditorWidget *widget = qobject_cast(m_editor->widget()); if (!widget) return; m_model->clear(); - m_model->buildHierarchy(widget->editorDocument()->filePath()); + m_model->buildHierarchy(m_editor, widget->editorDocument()->filePath()); if (m_model->isEmpty()) return; @@ -162,6 +168,14 @@ void CppIncludeHierarchyWidget::onItemClicked(const QModelIndex &index) Constants::CPPEDITOR_ID); } +void CppIncludeHierarchyWidget::editorsClosed(QList editors) +{ + foreach (Core::IEditor *editor, editors) { + if (m_editor == editor) + perform(); + } +} + void CppIncludeHierarchyWidget::showNoIncludeHierarchyLabel() { m_inspectedFile->hide(); diff --git a/src/plugins/cppeditor/cppincludehierarchy.h b/src/plugins/cppeditor/cppincludehierarchy.h index fd8d31cbde1..cb7720db5ea 100644 --- a/src/plugins/cppeditor/cppincludehierarchy.h +++ b/src/plugins/cppeditor/cppincludehierarchy.h @@ -55,6 +55,7 @@ class FileName; namespace CppEditor { namespace Internal { +class CPPEditor; class CPPEditorWidget; class CppInclude; class CppIncludeLabel; @@ -73,6 +74,7 @@ public slots: private slots: void onItemClicked(const QModelIndex &index); + void editorsClosed(QList editors); private: void showNoIncludeHierarchyLabel(); @@ -84,6 +86,7 @@ private: Utils::AnnotatedItemDelegate *m_delegate; CppIncludeLabel *m_inspectedFile; QLabel *m_includeHierarchyInfoLabel; + CPPEditor *m_editor; }; // @todo: Pretty much the same design as the OutlineWidgetStack. Maybe we can generalize the diff --git a/src/plugins/cppeditor/cppincludehierarchy_test.cpp b/src/plugins/cppeditor/cppincludehierarchy_test.cpp index e52273743c5..7e641e74944 100644 --- a/src/plugins/cppeditor/cppincludehierarchy_test.cpp +++ b/src/plugins/cppeditor/cppincludehierarchy_test.cpp @@ -30,6 +30,8 @@ #include "cppeditorplugin.h" #include "cppincludehierarchymodel.h" +#include +#include #include #include @@ -47,6 +49,7 @@ class TestCase public: TestCase(const QList &sourceList) : m_cmm(CppModelManagerInterface::instance()) + , m_editor(0) { QStringList filePaths; const int sourceListSize = sourceList.size(); @@ -82,22 +85,30 @@ public: ~TestCase() { + // Close editor + if (m_editor) + Core::EditorManager::closeEditor(m_editor, false); + m_cmm->GC(); QVERIFY(m_cmm->snapshot().isEmpty()); } - void run(int includesCount, int includedByCount) const + void run(int includesCount, int includedByCount) { const QString fileName = QDir::tempPath() + QLatin1String("/file1.h"); + m_editor = qobject_cast(Core::EditorManager::openEditor(fileName)); + QVERIFY(m_editor); + CppIncludeHierarchyModel model(0); - model.buildHierarchy(fileName); + model.buildHierarchy(m_editor, fileName); QCOMPARE(model.rowCount(model.index(0, 0)), includesCount); QCOMPARE(model.rowCount(model.index(1, 0)), includedByCount); } private: CppModelManagerInterface *m_cmm; + CPPEditor *m_editor; }; } diff --git a/src/plugins/cppeditor/cppincludehierarchymodel.cpp b/src/plugins/cppeditor/cppincludehierarchymodel.cpp index 7709bed2d57..06fe941cd9a 100644 --- a/src/plugins/cppeditor/cppincludehierarchymodel.cpp +++ b/src/plugins/cppeditor/cppincludehierarchymodel.cpp @@ -35,10 +35,12 @@ #include #include #include +#include #include using namespace CPlusPlus; +using namespace CppTools; namespace CppEditor { namespace Internal { @@ -48,7 +50,7 @@ CppIncludeHierarchyModel::CppIncludeHierarchyModel(QObject *parent) , m_rootItem(new CppIncludeHierarchyItem(QString())) , m_includesItem(new CppIncludeHierarchyItem(tr("Includes"), m_rootItem)) , m_includedByItem(new CppIncludeHierarchyItem(tr("Included by"), m_rootItem)) - + , m_editor(0) { m_rootItem->appendChild(m_includesItem); m_rootItem->appendChild(m_includedByItem); @@ -199,6 +201,15 @@ void CppIncludeHierarchyModel::clear() endResetModel(); } +void CppIncludeHierarchyModel::buildHierarchy(CPPEditor *editor, const QString &filePath) +{ + m_editor = editor; + beginResetModel(); + buildHierarchyIncludes(filePath); + buildHierarchyIncludedBy(filePath); + endResetModel(); +} + bool CppIncludeHierarchyModel::hasChildren(const QModelIndex &parent) const { if (!parent.isValid()) @@ -210,14 +221,6 @@ bool CppIncludeHierarchyModel::hasChildren(const QModelIndex &parent) const return parentItem->hasChildren(); } -void CppIncludeHierarchyModel::buildHierarchy(const QString &filePath) -{ - beginResetModel(); - buildHierarchyIncludes(filePath); - buildHierarchyIncludedBy(filePath); - endResetModel(); -} - bool CppIncludeHierarchyModel::isEmpty() const { return !m_includesItem->hasChildren() && !m_includedByItem->hasChildren(); @@ -233,7 +236,11 @@ void CppIncludeHierarchyModel::buildHierarchyIncludes_helper(const QString &file CppIncludeHierarchyItem *parent, QSet *cyclic, bool recursive) { - const Snapshot &snapshot = CppTools::CppModelManagerInterface::instance()->snapshot(); + if (!m_editor) + return; + + CppModelManagerInterface *cppMM = CppModelManagerInterface::instance(); + const Snapshot &snapshot = cppMM->cppEditorSupport(m_editor)->snapshotUpdater()->snapshot(); Document::Ptr doc = snapshot.document(filePath); if (!doc) return; diff --git a/src/plugins/cppeditor/cppincludehierarchymodel.h b/src/plugins/cppeditor/cppincludehierarchymodel.h index cc9cbef050d..afb4c7ceb83 100644 --- a/src/plugins/cppeditor/cppincludehierarchymodel.h +++ b/src/plugins/cppeditor/cppincludehierarchymodel.h @@ -41,9 +41,14 @@ enum ItemRole { } // Anonymous +namespace Core { +class IEditor; +} + namespace CppEditor { namespace Internal { +class CPPEditor; class CppIncludeHierarchyItem; class CppIncludeHierarchyModel : public QAbstractItemModel @@ -63,7 +68,7 @@ public: bool hasChildren(const QModelIndex &parent) const; void clear(); - void buildHierarchy(const QString &filePath); + void buildHierarchy(CPPEditor *editor, const QString &filePath); bool isEmpty() const; private: @@ -77,6 +82,7 @@ private: CppIncludeHierarchyItem *m_rootItem; CppIncludeHierarchyItem *m_includesItem; CppIncludeHierarchyItem *m_includedByItem; + CPPEditor *m_editor; }; } // namespace Internal From 5bf3ed7c6a2904a0dbec76b821e8e48c765c08c7 Mon Sep 17 00:00:00 2001 From: jkobus Date: Wed, 20 Nov 2013 11:38:36 +0100 Subject: [PATCH 06/56] Remove unused code Change-Id: Ie7e2db1416ec2eb51339a05b8af408c18a0cdbf3 Reviewed-by: Kai Koehne --- share/qtcreator/templates/html5app/app.pro | 5 ----- src/plugins/qmakeprojectmanager/wizards/qtquickapp.cpp | 3 --- 2 files changed, 8 deletions(-) diff --git a/share/qtcreator/templates/html5app/app.pro b/share/qtcreator/templates/html5app/app.pro index 66cddd26180..42c6c9cdba7 100644 --- a/share/qtcreator/templates/html5app/app.pro +++ b/share/qtcreator/templates/html5app/app.pro @@ -10,11 +10,6 @@ DEPLOYMENTFOLDERS = folder_01 # TOUCH_OPTIMIZED_NAVIGATION # DEFINES += TOUCH_OPTIMIZED_NAVIGATION -# If your application uses the Qt Mobility libraries, uncomment the following -# lines and add the respective components to the MOBILITY variable. -# CONFIG += mobility -# MOBILITY += - # The .cpp file which was generated for your project. Feel free to hack it. SOURCES += main.cpp diff --git a/src/plugins/qmakeprojectmanager/wizards/qtquickapp.cpp b/src/plugins/qmakeprojectmanager/wizards/qtquickapp.cpp index bb93d200431..169afe0cace 100644 --- a/src/plugins/qmakeprojectmanager/wizards/qtquickapp.cpp +++ b/src/plugins/qmakeprojectmanager/wizards/qtquickapp.cpp @@ -249,9 +249,6 @@ void QtQuickApp::handleCurrentProFileTemplateLine(const QString &line, if (!nextLine.startsWith(QLatin1String("QML_IMPORT_PATH ="))) return; proFile << nextLine << endl; - } else if (line.contains(QLatin1String("# HARMATTAN_BOOSTABLE"))) { - QString nextLine = proFileTemplate.readLine(); // eats '# CONFIG += qdeclarative-boostable' - proFile << nextLine << endl; } } From e1b44e870f5c15daad136f609df2175278e1f62c Mon Sep 17 00:00:00 2001 From: Fawzi Mohamed Date: Wed, 16 Oct 2013 15:08:27 +0200 Subject: [PATCH 07/56] qmljs: new import/dep tracking Change-Id: I9f4de2a06aad3afb80372a4b80e56db658683575 Reviewed-by: Thomas Hartmann --- src/libs/qmljs/qmljs-lib.pri | 9 +- src/libs/qmljs/qmljs.qbs | 4 +- src/libs/qmljs/qmljsconstants.h | 18 +- src/libs/qmljs/qmljscontext.cpp | 11 +- src/libs/qmljs/qmljscontext.h | 8 +- src/libs/qmljs/qmljsdocument.cpp | 19 + src/libs/qmljs/qmljsdocument.h | 7 + src/libs/qmljs/qmljsimportdependencies.cpp | 826 ++++++++++++++++++ src/libs/qmljs/qmljsimportdependencies.h | 223 +++++ src/libs/qmljs/qmljsinterpreter.h | 2 + src/libs/qmljs/qmljslink.cpp | 13 +- src/libs/qmljs/qmljslink.h | 2 +- src/libs/qmljs/qmljsmodelmanagerinterface.h | 9 +- src/libs/qmljs/qmljsviewercontext.cpp | 82 ++ src/libs/qmljs/qmljsviewercontext.h | 63 ++ .../metainfo/subcomponentmanager.cpp | 2 +- .../designercore/model/texttomodelmerger.cpp | 10 +- .../qmljseditor/qmljsfindreferences.cpp | 2 +- .../qmljseditor/qmljssemanticinfoupdater.cpp | 2 +- src/plugins/qmljseditor/qmltaskmanager.cpp | 6 +- src/plugins/qmljseditor/qmltaskmanager.h | 2 +- src/plugins/qmljstools/qmljsmodelmanager.cpp | 28 + src/plugins/qmljstools/qmljsmodelmanager.h | 9 + src/plugins/qmljstools/qmljstools_test.cpp | 2 +- 24 files changed, 1327 insertions(+), 32 deletions(-) create mode 100644 src/libs/qmljs/qmljsimportdependencies.cpp create mode 100644 src/libs/qmljs/qmljsimportdependencies.h create mode 100644 src/libs/qmljs/qmljsviewercontext.cpp create mode 100644 src/libs/qmljs/qmljsviewercontext.h diff --git a/src/libs/qmljs/qmljs-lib.pri b/src/libs/qmljs/qmljs-lib.pri index d4e83127daa..e2c78c4d72d 100644 --- a/src/libs/qmljs/qmljs-lib.pri +++ b/src/libs/qmljs/qmljs-lib.pri @@ -39,7 +39,9 @@ HEADERS += \ $$PWD/qmljssimplereader.h \ $$PWD/persistenttrie.h \ $$PWD/qmljsqrcparser.h \ - $$PWD/qmljsconstants.h + $$PWD/qmljsconstants.h \ + $$PWD/qmljsimportdependencies.h \ + $$PWD/viewercontext.h SOURCES += \ $$PWD/qmljsbind.cpp \ @@ -70,7 +72,10 @@ SOURCES += \ $$PWD/consoleitem.cpp \ $$PWD/qmljssimplereader.cpp \ $$PWD/persistenttrie.cpp \ - $$PWD/qmljsqrcparser.cpp + $$PWD/qmljsqrcparser.cpp \ + $$PWD/qmljsimportdependencies.cpp \ + $$PWD/qmljsviewercontext.cpp + RESOURCES += \ $$PWD/qmljs.qrc diff --git a/src/libs/qmljs/qmljs.qbs b/src/libs/qmljs/qmljs.qbs index c79197475fe..94968cf313b 100644 --- a/src/libs/qmljs/qmljs.qbs +++ b/src/libs/qmljs/qmljs.qbs @@ -35,6 +35,7 @@ QtcLibrary { "qmljsevaluate.cpp", "qmljsevaluate.h", "qmljsicons.cpp", "qmljsicons.h", "qmljsicontextpane.h", + "qmljsimportdependencies.cpp", "qmljsimportdependencies.h", "qmljsindenter.cpp", "qmljsindenter.h", "qmljsinterpreter.cpp", "qmljsinterpreter.h", "qmljslineinfo.cpp", "qmljslineinfo.h", @@ -52,7 +53,8 @@ QtcLibrary { "qmljsstaticanalysismessage.cpp", "qmljsstaticanalysismessage.h", "qmljstypedescriptionreader.cpp", "qmljstypedescriptionreader.h", "qmljsutils.cpp", "qmljsutils.h", - "qmljsvalueowner.cpp", "qmljsvalueowner.h" + "qmljsvalueowner.cpp", "qmljsvalueowner.h", + "qmljsviewercontext.cpp", "qmljsviewercontext.h" ] } diff --git a/src/libs/qmljs/qmljsconstants.h b/src/libs/qmljs/qmljsconstants.h index fcb117050f0..6f0f4c7fadf 100644 --- a/src/libs/qmljs/qmljsconstants.h +++ b/src/libs/qmljs/qmljsconstants.h @@ -35,14 +35,22 @@ namespace QmlJS { namespace ImportType { enum Enum { Invalid, - ImplicitDirectory, Library, - File, Directory, - QrcFile, + ImplicitDirectory, + File, + UnknownFile, // refers a file/directory that wasn't found (or to an url) QrcDirectory, - ImplicitQrcDirectory, - UnknownFile // refers a file/directory that wasn't found + QrcFile +}; +} + +namespace ImportKind { +enum Enum { + Invalid, + Library, + Path, + QrcPath, }; } diff --git a/src/libs/qmljs/qmljscontext.cpp b/src/libs/qmljs/qmljscontext.cpp index ff601e37a63..c04206c1825 100644 --- a/src/libs/qmljs/qmljscontext.cpp +++ b/src/libs/qmljs/qmljscontext.cpp @@ -54,17 +54,20 @@ using namespace QmlJS::AST; QmlJSTextEditorWidget::semanticInfo()::context. */ -ContextPtr Context::create(const QmlJS::Snapshot &snapshot, ValueOwner *valueOwner, const ImportsPerDocument &imports) +ContextPtr Context::create(const QmlJS::Snapshot &snapshot, ValueOwner *valueOwner, + const ImportsPerDocument &imports, const ViewerContext &vContext) { - QSharedPointer result(new Context(snapshot, valueOwner, imports)); + QSharedPointer result(new Context(snapshot, valueOwner, imports, vContext)); result->_ptr = result; return result; } -Context::Context(const QmlJS::Snapshot &snapshot, ValueOwner *valueOwner, const ImportsPerDocument &imports) +Context::Context(const QmlJS::Snapshot &snapshot, ValueOwner *valueOwner, + const ImportsPerDocument &imports, const ViewerContext &vContext) : _snapshot(snapshot), _valueOwner(valueOwner), - _imports(imports) + _imports(imports), + _vContext(vContext) { } diff --git a/src/libs/qmljs/qmljscontext.h b/src/libs/qmljs/qmljscontext.h index 63466a2316d..ad3d8ed1187 100644 --- a/src/libs/qmljs/qmljscontext.h +++ b/src/libs/qmljs/qmljscontext.h @@ -32,6 +32,7 @@ #include "qmljs_global.h" #include "qmljsvalueowner.h" +#include "qmljsviewercontext.h" #include @@ -50,7 +51,8 @@ public: typedef QHash > ImportsPerDocument; // Context takes ownership of valueOwner - static ContextPtr create(const Snapshot &snapshot, ValueOwner *valueOwner, const ImportsPerDocument &imports); + static ContextPtr create(const Snapshot &snapshot, ValueOwner *valueOwner, + const ImportsPerDocument &imports, const ViewerContext &vContext); ~Context(); ContextPtr ptr() const; @@ -69,11 +71,13 @@ public: private: // Context takes ownership of valueOwner - Context(const Snapshot &snapshot, ValueOwner *valueOwner, const ImportsPerDocument &imports); + Context(const Snapshot &snapshot, ValueOwner *valueOwner, const ImportsPerDocument &imports, + const ViewerContext &vContext); Snapshot _snapshot; QSharedPointer _valueOwner; ImportsPerDocument _imports; + ViewerContext _vContext; QWeakPointer _ptr; }; diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp index fe169f795c4..7d8db768bed 100644 --- a/src/libs/qmljs/qmljsdocument.cpp +++ b/src/libs/qmljs/qmljsdocument.cpp @@ -30,6 +30,7 @@ #include "qmljsdocument.h" #include "qmljsbind.h" #include "qmljsconstants.h" +#include "qmljsimportdependencies.h" #include #include @@ -396,6 +397,14 @@ Snapshot::~Snapshot() { } +Snapshot::Snapshot(const Snapshot &o) + : _documents(o._documents), + _documentsByPath(o._documentsByPath), + _libraries(o._libraries), + _dependencies(o._dependencies) +{ +} + void Snapshot::insert(const Document::Ptr &document, bool allowInvalid) { if (document && (allowInvalid || document->qmlProgram() || document->jsProgram())) { @@ -427,6 +436,16 @@ void Snapshot::remove(const QString &fileName) } } +const QmlJS::ImportDependencies *Snapshot::importDependencies() const +{ + return &_dependencies; +} + +QmlJS::ImportDependencies *Snapshot::importDependencies() +{ + return &_dependencies; +} + Document::MutablePtr Snapshot::documentFromSource( const QString &code, const QString &fileName, Language::Enum language) const diff --git a/src/libs/qmljs/qmljsdocument.h b/src/libs/qmljs/qmljsdocument.h index 5d228908808..65712178095 100644 --- a/src/libs/qmljs/qmljsdocument.h +++ b/src/libs/qmljs/qmljsdocument.h @@ -39,11 +39,13 @@ #include "parser/qmljsengine_p.h" #include "qmljs_global.h" #include "qmljsconstants.h" +#include "qmljsimportdependencies.h" namespace QmlJS { class Bind; class Snapshot; +class ImportDependencies; class QMLJS_EXPORT Document { @@ -204,9 +206,11 @@ class QMLJS_EXPORT Snapshot QHash _documents; QHash > _documentsByPath; QHash _libraries; + ImportDependencies _dependencies; public: Snapshot(); + Snapshot(const Snapshot &o); ~Snapshot(); typedef _Base::iterator iterator; @@ -219,6 +223,9 @@ public: void insertLibraryInfo(const QString &path, const LibraryInfo &info); void remove(const QString &fileName); + const ImportDependencies *importDependencies() const; + ImportDependencies *importDependencies(); + Document::Ptr document(const QString &fileName) const; QList documentsInDirectory(const QString &path) const; LibraryInfo libraryInfo(const QString &path) const; diff --git a/src/libs/qmljs/qmljsimportdependencies.cpp b/src/libs/qmljs/qmljsimportdependencies.cpp new file mode 100644 index 00000000000..f948a0208ca --- /dev/null +++ b/src/libs/qmljs/qmljsimportdependencies.cpp @@ -0,0 +1,826 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include "qmljsimportdependencies.h" +#include "qmljsinterpreter.h" + +#include +#include + +#include + +#include + +namespace QmlJS { + +ImportKind::Enum toImportKind(ImportType::Enum type) +{ + switch (type) { + case ImportType::Invalid: + break; + case ImportType::Library: + return ImportKind::Library; + case ImportType::ImplicitDirectory: + case ImportType::File: + case ImportType::Directory: + case ImportType::UnknownFile: + return ImportKind::Path; + case ImportType::QrcFile: + case ImportType::QrcDirectory: + return ImportKind::QrcPath; + } + return ImportKind::Invalid; +} + +ImportMatchStrength::ImportMatchStrength(QList match) + : m_match(match) +{ } + +int ImportMatchStrength::compareMatch(const ImportMatchStrength &o) const +{ + int len1 = m_match.size(); + int len2 = o.m_match.size(); + int len = ((len1 < len2) ? len1 : len2); + for (int i = 0; i < len; ++ i) { + int v1 = m_match.at(i); + int v2 = o.m_match.at(i); + if (v1 < v2) + return -1; + if (v2 > v1) + return 1; + } + if (len1 < len2) + return -1; + if (len1 > len2) + return 1; + return 0; +} + +bool ImportMatchStrength::hasNoMatch() +{ + return m_match.isEmpty(); +} + +bool ImportMatchStrength::hasMatch() +{ + return !m_match.isEmpty(); +} + +bool operator ==(const ImportMatchStrength &m1, const ImportMatchStrength &m2) +{ + return m1.m_match == m2.m_match; +} + +bool operator !=(const ImportMatchStrength &m1, const ImportMatchStrength &m2) +{ + return !(m1 == m2); +} + +bool operator <(const ImportMatchStrength &m1, const ImportMatchStrength &m2) +{ + return m1.compareMatch(m2) < 0; +} + +ImportKey::ImportKey() + : type(ImportType::Invalid), + majorVersion(LanguageUtils::ComponentVersion::NoVersion), + minorVersion(LanguageUtils::ComponentVersion::NoVersion) +{ } + +void ImportKey::addToHash(QCryptographicHash &hash) const +{ + hash.addData(reinterpret_cast(&type), sizeof(type)); + hash.addData(reinterpret_cast(&majorVersion), sizeof(majorVersion)); + hash.addData(reinterpret_cast(&minorVersion), sizeof(minorVersion)); + foreach (const QString &s, splitPath) { + hash.addData("/", 1); + hash.addData(reinterpret_cast(s.constData()), sizeof(QChar) * s.size()); + } + hash.addData("/", 1); +} + +ImportKey ImportKey::flatKey() const { + switch (type) { + case ImportType::Invalid: + return *this; + case ImportType::ImplicitDirectory: + case ImportType::Library: + case ImportType::File: + case ImportType::Directory: + case ImportType::QrcFile: + case ImportType::QrcDirectory: + case ImportType::UnknownFile: + break; + } + QStringList flatPath = splitPath; + int i = 0; + while (i < flatPath.size()) { + if (flatPath.at(i).startsWith(QLatin1Char('+'))) + flatPath.removeAt(i); + else + ++i; + } + if (flatPath.size() == splitPath.size()) + return *this; + ImportKey res = *this; + res.splitPath = flatPath; + return res; +} + +ImportKey::ImportKey(const ImportInfo &info) + : type(info.type()) + , majorVersion(info.version().majorVersion()) + , minorVersion(info.version().minorVersion()) +{ + splitPath = QFileInfo(info.path()).canonicalFilePath().split(QChar::fromLatin1('/'), + QString::KeepEmptyParts); +} + +QString ImportKey::path() const +{ + QString res = splitPath.join(QString::fromLatin1("/")); + if (res.isEmpty() && !splitPath.isEmpty()) + return QLatin1String("/"); + return res; +} + +ImportMatchStrength ImportKey::matchImport(const ImportKey &o, const ViewerContext &vContext) const +{ + if (majorVersion != o.majorVersion || minorVersion > o.minorVersion) + return ImportMatchStrength(); + bool dirToFile = false; + switch (o.type) { + case ImportType::Invalid: + return ImportMatchStrength(); + case ImportType::ImplicitDirectory: + case ImportType::Directory: + switch (type) { + case ImportType::File: + case ImportType::UnknownFile: + dirToFile = true; + break; + case ImportType::ImplicitDirectory: + case ImportType::Directory: + break; + default: + return ImportMatchStrength(); + } + break; + case ImportType::Library: + if (type != ImportType::Library) + return ImportMatchStrength(); + break; + case ImportType::QrcDirectory: + switch (type) { + case ImportType::QrcFile: + dirToFile = true; + break; + case ImportType::QrcDirectory: + break; + default: + return ImportMatchStrength(); + } + break; + case ImportType::QrcFile: + if (type != ImportType::QrcFile) + return ImportMatchStrength(); + case ImportType::UnknownFile: + case ImportType::File: + switch (type) { + case ImportType::UnknownFile: + case ImportType::File: + break; + default: + return ImportMatchStrength(); + } + break; + } + + QList res; + int iPath1 = 0; + int lenPath1 = splitPath.size(); + int iPath2 = 0; + int lenPath2 = o.splitPath.size(); + if (dirToFile) + --lenPath1; + int iSelector = 0; + int nSelectors = vContext.selectors.size(); + while (iPath1 < lenPath1) { + if (lenPath2 - iPath2 > lenPath1 - iPath1) + return ImportMatchStrength(); + QString p1 = splitPath.at(iPath1); + if (iPath2 < lenPath2) { + QString p2 = splitPath.at(iPath2); + if (p1 == p2) { + ++iPath1; + ++iPath2; + continue; + } + } + if (!p1.startsWith(QLatin1Char('+'))) + return QList(); + QStringRef selectorAtt(&p1, 1, p1.size()-1); + while (iSelector < nSelectors) { + if (selectorAtt == vContext.selectors.at(iSelector)) + break; + ++iSelector; + } + if (iSelector == nSelectors) + return QList(); + res << (nSelectors - iSelector); + ++iSelector; + ++iPath1; + } + if (iPath2 != lenPath2) + return QList(); + if (res.isEmpty()) + res << 0; + return ImportMatchStrength(res); +} + +int ImportKey::compare(const ImportKey &other) const +{ + ImportKind::Enum k1 = toImportKind(type); + ImportKind::Enum k2 = toImportKind(other.type); + if (k1 < k2) + return -1; + if (k1 > k2) + return 1; + int len1 = splitPath.size(); + int len2 = other.splitPath.size(); + int len = ((len1 < len2) ? len1 : len2); + for (int i = 0; i < len; ++ i) { + QString v1 = splitPath.at(i); + QString v2 = other.splitPath.at(i); + if (v1 < v2) + return -1; + if (v2 > v1) + return 1; + } + if (len1 < len2) + return -1; + if (len1 > len2) + return 1; + if (majorVersion < other.majorVersion) + return -1; + if (majorVersion > other.majorVersion) + return 1; + if (minorVersion < other.minorVersion) + return -1; + if (minorVersion > other.minorVersion) + return 1; + if (type < other.type) + return -1; + if (type > other.type) + return 1; + return 0; +} + +bool ImportKey::isDirectoryLike() const +{ + switch (type) { + case ImportType::Directory: + case ImportType::ImplicitDirectory: + case ImportType::QrcDirectory: + return true; + default: + return false; + } +} + +ImportKey::DirCompareInfo ImportKey::compareDir(const ImportKey &superDir) const +{ + // assumes dir/+selectors/file (i.e. no directories inside selectors) + switch (superDir.type) { + case ImportType::UnknownFile: + case ImportType::File: + case ImportType::Directory: + case ImportType::ImplicitDirectory: + if (type != ImportType::File && type != ImportType::ImplicitDirectory + && type != ImportType::Directory && type != ImportType::UnknownFile) + return Incompatible; + break; + case ImportType::QrcDirectory: + case ImportType::QrcFile: + if (type != ImportType::QrcDirectory && type != ImportType::QrcFile) + return Incompatible; + break; + case ImportType::Invalid: + case ImportType::Library: + return Incompatible; + } + bool isDir1 = isDirectoryLike(); + bool isDir2 = superDir.isDirectoryLike(); + int len1 = splitPath.size(); + int len2 = superDir.splitPath.size(); + if (isDir1 && len1 > 0) + --len1; + if (isDir2 && len2 > 0) + --len2; + + int i1 = 0; + int i2 = 0; + while (i1 < len1 && i2 < len2) { + QString p1 = splitPath.at(i1); + QString p2 = superDir.splitPath.at(i2); + if (p1 == p2) { + ++i1; + ++i2; + continue; + } + if (p1.startsWith(QLatin1Char('+'))) { + if (p2.startsWith(QLatin1Char('+'))) + return SameDir; + return SecondInFirst; + } + if (p2.startsWith(QLatin1Char('+'))) + return FirstInSecond; + return Different; + } + if (i1 < len1) { + if (splitPath.at(i1).startsWith(QLatin1Char('+'))) + return SameDir; + return SecondInFirst; + } + if (i2 < len2) { + if (superDir.splitPath.at(i2).startsWith(QLatin1Char('+'))) + return SameDir; + return SecondInFirst; + } + return SameDir; +} + +uint qHash(const ImportKey &info) +{ + uint res = ::qHash(info.type) ^ + ::qHash(info.majorVersion) ^ ::qHash(info.minorVersion); + foreach (const QString &s, info.splitPath) + res = res ^ ::qHash(s); + return res; +} + +bool operator==(const ImportKey &i1, const ImportKey &i2) +{ + return i1.type == i2.type + && i1.splitPath == i2.splitPath + && i1.majorVersion == i2.majorVersion + && i1.minorVersion == i2.minorVersion; +} + +bool operator !=(const ImportKey &i1, const ImportKey &i2) +{ + return ! (i1 == i2); +} + +bool operator <(const ImportKey &i1, const ImportKey &i2) +{ + return i1.compare(i2) < 0; +} + +Export::Export() + : intrinsic(false) +{ } + +Export::Export(ImportKey exportName, QString pathRequired, bool intrinsic) + : exportName(exportName), pathRequired(pathRequired), intrinsic(intrinsic) +{ } + +bool Export::visibleInVContext(const ViewerContext &vContext) const +{ + return pathRequired.isEmpty() || vContext.paths.contains(pathRequired); +} + +bool operator ==(const Export &i1, const Export &i2) +{ + return i1.exportName == i2.exportName + && i1.pathRequired == i2.pathRequired + && i1.intrinsic == i2.intrinsic; +} + +bool operator !=(const Export &i1, const Export &i2) +{ + return !(i1 == i2); +} + +CoreImport::CoreImport() : language(Language::Qml) { } + +CoreImport::CoreImport(const QString &importId, QList possibleExports, + Language::Enum language, QByteArray fingerprint) + : importId(importId), possibleExports(possibleExports), language(language), + fingerprint(fingerprint) +{ } + +bool CoreImport::valid() { + return !fingerprint.isEmpty(); +} + +QByteArray DependencyInfo::calculateFingerprint(const ImportDependencies &deps) +{ + QCryptographicHash hash(QCryptographicHash::Sha1); + rootImport.addToHash(hash); + QStringList coreImports = allCoreImports.toList(); + coreImports.sort(); + foreach (const QString importId, coreImports) { + hash.addData(reinterpret_cast(importId.constData()), importId.size() * sizeof(QChar)); + QByteArray coreImportFingerprint = deps.coreImport(importId).fingerprint; + hash.addData(coreImportFingerprint); + } + hash.addData("/", 1); + QList imports(allImports.toList()); + std::sort(imports.begin(), imports.end()); + foreach (const ImportKey &k, imports) + k.addToHash(hash); + return hash.result(); +} + +MatchedImport::MatchedImport() +{ } + +MatchedImport::MatchedImport(ImportMatchStrength matchStrength, ImportKey importKey, + QString coreImportId) + : matchStrength(matchStrength), importKey(importKey), coreImportId(coreImportId) +{ } + +int MatchedImport::compare(const MatchedImport &o) const { + int res = matchStrength.compareMatch(o.matchStrength); + if (res != 0) + return res; + res = importKey.compare(o.importKey); + if (res != 0) + return res; + res = coreImportId.compare(o.coreImportId); + return res; +} + +bool operator ==(const MatchedImport &m1, const MatchedImport &m2) +{ + return m1.compare(m2) == 0; +} + +bool operator !=(const MatchedImport &m1, const MatchedImport &m2) +{ + return m1.compare(m2) != 0; +} + +bool operator <(const MatchedImport &m1, const MatchedImport &m2) +{ + return m1.compare(m2) < 0; +} + +ImportDependencies::ImportDependencies() +{ } + +ImportDependencies::~ImportDependencies() +{ } + +void ImportDependencies::filter(const ViewerContext &vContext) +{ + QMap newCoreImports; + QMap newImportCache; + QMapIterator j(m_coreImports); + bool hasChanges = false; + while (j.hasNext()) { + j.next(); + const CoreImport &cImport = j.value(); + if (vContext.languageIsCompatible(cImport.language)) { + QList newExports; + foreach (const Export &e, cImport.possibleExports) { + if (e.visibleInVContext(vContext)) { + newExports.append(e); + QStringList &candidateImports = newImportCache[e.exportName]; + if (!candidateImports.contains(cImport.importId)) + candidateImports.append(cImport.importId); + } + } + if (newExports.size() == cImport.possibleExports.size()) { + newCoreImports.insert(cImport.importId, cImport); + } else if (newExports.length() > 0) { + CoreImport newCImport = cImport; + newCImport.possibleExports = newExports; + newCoreImports.insert(newCImport.importId, newCImport); + hasChanges = true; + } else { + hasChanges = true; + } + } else { + hasChanges = true; + } + } + if (!hasChanges) + return; + m_coreImports = newCoreImports; + m_importCache = newImportCache; +} + +CoreImport ImportDependencies::coreImport(const QString &importId) const +{ + return m_coreImports.value(importId); +} + +void ImportDependencies::iterateOnCandidateImports( + const ImportKey &key, const ViewerContext &vContext, + Utils::function + const &iterF) const +{ + switch (key.type) { + case ImportType::Directory: + case ImportType::QrcDirectory: + case ImportType::ImplicitDirectory: + break; + default: + { + QStringList imp = m_importCache.value(key.flatKey()); + foreach (const QString &cImportName, imp) { + CoreImport cImport = coreImport(cImportName); + if (vContext.languageIsCompatible(cImport.language)) { + foreach (const Export e, cImport.possibleExports) { + if (e.visibleInVContext(vContext)) { + ImportMatchStrength m = e.exportName.matchImport(key, vContext); + if (m.hasMatch()) { + if (!iterF(m, e, cImport)) + return; + } + } + } + } + } + return; + } + } + QMap::const_iterator lb = m_importCache.lowerBound(key.flatKey()); + QMap::const_iterator end = m_importCache.constEnd(); + while (lb != end) { + ImportKey::DirCompareInfo c = key.compareDir(lb.key()); + if (c == ImportKey::SameDir) { + foreach (const QString &cImportName, lb.value()) { + CoreImport cImport = coreImport(cImportName); + if (vContext.languageIsCompatible(cImport.language)) { + foreach (const Export e, cImport.possibleExports) { + if (e.visibleInVContext(vContext)) { + ImportMatchStrength m = e.exportName.matchImport(key, vContext); + if (m.hasMatch()) { + if (!iterF(m, e, cImport)) + return; + } + } + } + } + } + } else if (c != ImportKey::SecondInFirst) { + break; + } + ++lb; + } +} + +class CollectCandidateImports +{ +public: + ImportDependencies::ImportElements &res; + + CollectCandidateImports(ImportDependencies::ImportElements & res) + : res(res) + { } + + bool operator ()(const ImportMatchStrength &m, const Export &e, const CoreImport &cI) const + { + ImportKey flatName = e.exportName.flatKey(); + res[flatName].append(MatchedImport(m, e.exportName, cI.importId)); + return true; + } +}; + +ImportDependencies::ImportElements ImportDependencies::candidateImports( + const ImportKey &key, + const ViewerContext &vContext) const +{ + ImportDependencies::ImportElements res; + CollectCandidateImports collector(res); + iterateOnCandidateImports(key, vContext, collector); + typedef QMap >::iterator iter_t; + iter_t i = res.begin(); + iter_t end = res.end(); + while (i != end) { + std::sort(i.value().begin(), i.value().end()); + ++i; + } + return res; +} + +QList ImportDependencies::createDependencyInfos( + const ImportKey &mainDoc, const ViewerContext &vContext) const +{ + Q_UNUSED(mainDoc); + Q_UNUSED(vContext); + QList res; + QTC_CHECK(false); + return res; +} + +void ImportDependencies::addCoreImport(const CoreImport &import) +{ + CoreImport newImport = import; + if (m_coreImports.contains(import.importId)) { + CoreImport oldVal = m_coreImports.value(import.importId); + foreach (const Export &e, oldVal.possibleExports) + if (!e.intrinsic) + newImport.possibleExports.append(e); + } + m_coreImports.insert(newImport.importId, newImport); +} + +void ImportDependencies::removeCoreImport(const QString &importId) +{ + if (!m_coreImports.contains(importId)) { + qDebug() << "missing importId in removeCoreImport(" << importId << ")"; + return; + } + CoreImport &cImport = m_coreImports[importId]; + QList newExports; + foreach (const Export &e, cImport.possibleExports) + if (!e.intrinsic) + newExports.append(e); + if (newExports.size()>0) + cImport.possibleExports = newExports; + else + m_coreImports.remove(importId); +} + +void ImportDependencies::addExport(const QString &importId, const ImportKey &importKey, + const QString &requiredPath) +{ + if (!m_coreImports.contains(importId)) { + CoreImport newImport(importId); + newImport.language = Language::Unknown; + newImport.possibleExports.append(Export(importKey, requiredPath, false)); + m_coreImports.insert(newImport.importId, newImport); + return; + } + CoreImport &importValue = m_coreImports[importId]; + importValue.possibleExports.append(Export(importKey, requiredPath, false)); +} + +void ImportDependencies::removeExport(const QString &importId, const ImportKey &importKey, + const QString &requiredPath) +{ + if (!m_coreImports.contains(importId)) { + qDebug() << "non existing core import for removeExport(" << importId << ", " + << importKey.path() << ")"; + } else { + CoreImport &importValue = m_coreImports[importId]; + if (!importValue.possibleExports.removeOne(Export(importKey, requiredPath, false))) { + qDebug() << "non existing export for removeExport(" << importId << ", " + << importKey.path() << ")"; + } + if (importValue.possibleExports.isEmpty() && importValue.fingerprint.isEmpty()) + m_coreImports.remove(importId); + } + if (!m_importCache.contains(importKey)) { + qDebug() << "missing possibleExport for " << importKey.path() << " when removing export of " + << importId; + } else { + QStringList &cImp = m_importCache[importKey]; + if (!cImp.removeOne(importId)) { + qDebug() << "missing possibleExport backpointer for " << importKey.path() << " to " + << importId; + } + if (cImp.isEmpty()) + m_importCache.remove(importKey); + } +} + +void ImportDependencies::iterateOnCoreImports( + const ViewerContext &vContext, + Utils::function const &iterF) const +{ + QMapIterator i(m_coreImports); + while (i.hasNext()) { + i.next(); + if (vContext.languageIsCompatible(i.value().language)) + iterF(i.value()); // check also that at least one export is visible? + } +} + +void ImportDependencies::iterateOnLibraryImports( + const ViewerContext &vContext, + Utils::function const &iterF) const +{ + typedef QMap::const_iterator iter_t; + ImportKey firstLib; + firstLib.type = ImportType::Library; + iter_t i = m_importCache.lowerBound(firstLib); + iter_t end = m_importCache.constEnd(); + while (i != end && i.key().type == ImportType::Library) { + foreach (const QString &cImportName, i.value()) { + CoreImport cImport = coreImport(cImportName); + if (vContext.languageIsCompatible(cImport.language)) { + foreach (const Export &e, cImport.possibleExports) { + if (e.visibleInVContext(vContext) && e.exportName.type == ImportType::Library) { + ImportMatchStrength m = e.exportName.matchImport(i.key(), vContext); + if (m.hasMatch()) { + if (!iterF(m, e, cImport)) + return; + } + } + } + } + } + ++i; + } +} + +void ImportDependencies::iterateOnSubImports( + const ImportKey &baseKey, + const ViewerContext &vContext, + Utils::function const &iterF) const +{ + typedef QMap::const_iterator iter_t; + iter_t i = m_importCache.lowerBound(baseKey); + iter_t end = m_importCache.constEnd(); + while (i != end) { + ImportKey::DirCompareInfo c = baseKey.compareDir(i.key()); + if (c != ImportKey::SameDir && c != ImportKey::SecondInFirst) + break; + foreach (const QString &cImportName, i.value()) { + CoreImport cImport = coreImport(cImportName); + if (vContext.languageIsCompatible(cImport.language)) { + foreach (const Export &e, cImport.possibleExports) { + if (e.visibleInVContext(vContext)) { + ImportMatchStrength m = e.exportName.matchImport(i.key(), vContext); + if (m.hasMatch()) { + if (!iterF(m, e, cImport)) + return; + } + } + } + } + } + ++i; + } +} + +class CollectImportKeys { +public: + QSet &imports; + CollectImportKeys(QSet &imports) + : imports(imports) + { } + bool operator()(const ImportMatchStrength &m, + const Export &e, + const CoreImport &cI) const + { + Q_UNUSED(m); + Q_UNUSED(cI); + imports.insert(e.exportName.flatKey()); + return true; + } +}; + +QSet ImportDependencies::libraryImports(const ViewerContext &viewContext) const +{ + QSet res; + CollectImportKeys importCollector(res); + iterateOnLibraryImports(viewContext, importCollector); + return res; +} + +QSet ImportDependencies::subdirImports( + const ImportKey &baseKey, const ViewerContext &viewContext) const +{ + QSet res; + CollectImportKeys importCollector(res); + iterateOnSubImports(baseKey, viewContext, importCollector); + return res; +} + +} // namespace QmlJS diff --git a/src/libs/qmljs/qmljsimportdependencies.h b/src/libs/qmljs/qmljsimportdependencies.h new file mode 100644 index 00000000000..5524ec92870 --- /dev/null +++ b/src/libs/qmljs/qmljsimportdependencies.h @@ -0,0 +1,223 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef QMLJSIMPORTCACHE_H +#define QMLJSIMPORTCACHE_H + +#include "qmljsviewercontext.h" + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE +class QCryptographicHash; +QT_END_NAMESPACE + +namespace QmlJS { +class ImportInfo; +namespace Internal { +class ImportDependenciesPrivate; +} +class ImportDependencies; + +// match strenght wrt to the selectors of a ViewerContext +// this is valid only within a ViewerContext +class QMLJS_EXPORT ImportMatchStrength +{ +public: + explicit ImportMatchStrength() {} + ImportMatchStrength(QList match); + + int compareMatch(const ImportMatchStrength &o) const; + + bool hasNoMatch(); + + bool hasMatch(); +private: + friend bool operator ==(const ImportMatchStrength &m1, const ImportMatchStrength &m2); + QList m_match; +}; +bool operator ==(const ImportMatchStrength &m1, const ImportMatchStrength &m2); +bool operator !=(const ImportMatchStrength &m1, const ImportMatchStrength &m2); +bool operator <(const ImportMatchStrength &m1, const ImportMatchStrength &m2); + +/*! + * \brief The ImportKey class represent an import (or export), and can be used as hash key + * + * This represent only what is to be imported, *not* how (i.e. no as clause) + */ +class QMLJS_EXPORT ImportKey +{ +public: + enum DirCompareInfo { + SameDir, + FirstInSecond, + SecondInFirst, + Different, + Incompatible + }; + + explicit ImportKey(); + explicit ImportKey(const ImportInfo &info); + + ImportType::Enum type; + QStringList splitPath; + int majorVersion; + int minorVersion; + + QString path() const; + + void addToHash(QCryptographicHash &hash) const; + ImportKey flatKey() const; + + // wrap QList in a special type? + ImportMatchStrength matchImport(const ImportKey &o, const ViewerContext &vContext) const; + int compare(const ImportKey &other) const; + bool isDirectoryLike() const; + DirCompareInfo compareDir(const ImportKey &other) const; +}; + +uint qHash(const ImportKey &info); +bool operator ==(const ImportKey &i1, const ImportKey &i2); +bool operator !=(const ImportKey &i1, const ImportKey &i2); +bool operator <(const ImportKey &i1, const ImportKey &i2); + +class QMLJS_EXPORT Export +{ +public: + Export(); + Export(ImportKey exportName, QString pathRequired, bool intrinsic = false); + ImportKey exportName; + QString pathRequired; + bool intrinsic; + bool visibleInVContext(const ViewerContext &vContext) const; +}; +bool operator ==(const Export &i1, const Export &i2); +bool operator !=(const Export &i1, const Export &i2); + +class QMLJS_EXPORT CoreImport +{ +public: + CoreImport(); + CoreImport(const QString &importId, QList possibleExports = QList(), + Language::Enum language = Language::Qml, QByteArray fingerprint = QByteArray()); + QString importId; + QList possibleExports; + Language::Enum language; + QByteArray fingerprint; + bool valid(); +}; + +class QMLJS_EXPORT DependencyInfo +{ +public: + typedef QSharedPointer ConstPtr; + typedef QSharedPointer Ptr; + + QByteArray calculateFingerprint(const ImportDependencies &deps); + + ImportKey rootImport; + QSet allCoreImports; + QSet allImports; + QByteArray fingerprint; +}; + +class QMLJS_EXPORT MatchedImport +{ +public: + MatchedImport(); + MatchedImport(ImportMatchStrength matchStrength, ImportKey importKey, QString coreImportId); + + ImportMatchStrength matchStrength; + ImportKey importKey; + QString coreImportId; + int compare(const MatchedImport &o) const; +}; +bool operator ==(const MatchedImport &m1, const MatchedImport &m2); +bool operator !=(const MatchedImport &m1, const MatchedImport &m2); +bool operator <(const MatchedImport &m1, const MatchedImport &m2); + +class QMLJS_EXPORT ImportDependencies +{ +public: + typedef QMap > ImportElements; + + explicit ImportDependencies(); + ~ImportDependencies(); + + void filter(const ViewerContext &vContext); + + CoreImport coreImport(const QString &importId) const; + void iterateOnCandidateImports(const ImportKey &key, const ViewerContext &vContext, + Utils::function const &iterF) const; + ImportElements candidateImports(const ImportKey &key, const ViewerContext &vContext) const; + + QList createDependencyInfos(const ImportKey &mainDoc, + const ViewerContext &vContext) const; + + void addCoreImport(const CoreImport &import); + void removeCoreImport(const QString &importId); + + void addExport(const QString &importId, const ImportKey &importKey, + const QString &requiredPath); + void removeExport(const QString &importId, const ImportKey &importKey, + const QString &requiredPath); + + void iterateOnCoreImports(const ViewerContext &vContext, + Utils::function const &iterF) const; + void iterateOnLibraryImports(const ViewerContext &vContext, + Utils::function const &iterF) const; + void iterateOnSubImports(const ImportKey &baseKey, const ViewerContext &vContext, + Utils::function const &iterF) const; + + QSet libraryImports(const ViewerContext &viewContext) const; + QSet subdirImports(const ImportKey &baseKey, const ViewerContext &viewContext) const; +private: + QMap m_importCache; + QMap m_coreImports; +}; + +} // namespace QmlJS + +#endif // QMLJSIMPORTCACHE_H diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h index cf8d22a3846..ef5577a90cd 100644 --- a/src/libs/qmljs/qmljsinterpreter.h +++ b/src/libs/qmljs/qmljsinterpreter.h @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -912,6 +913,7 @@ public: // const! ObjectValue *object; ImportInfo info; + DependencyInfo::ConstPtr deps; // uri imports: path to library, else empty QString libraryPath; // whether the import succeeded diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp index 950d238f1b3..01100454bc8 100644 --- a/src/libs/qmljs/qmljslink.cpp +++ b/src/libs/qmljs/qmljslink.cpp @@ -34,7 +34,8 @@ #include "qmljsbind.h" #include "qmljsutils.h" #include "qmljsmodelmanagerinterface.h" -#include +#include "qmljsqrcparser.h" +#include "qmljsconstants.h" #include #include @@ -83,6 +84,7 @@ public: ValueOwner *valueOwner; QStringList importPaths; LibraryInfo builtins; + ViewerContext vContext; QHash importCache; @@ -131,13 +133,14 @@ public: \l{QmlJSEditor::SemanticInfo} of a \l{QmlJSEditor::QmlJSTextEditorWidget}. */ -Link::Link(const Snapshot &snapshot, const QStringList &importPaths, const LibraryInfo &builtins) +Link::Link(const Snapshot &snapshot, const ViewerContext &vContext, const LibraryInfo &builtins) : d(new LinkPrivate) { d->valueOwner = new ValueOwner; d->snapshot = snapshot; - d->importPaths = importPaths; + d->importPaths = vContext.paths; d->builtins = builtins; + d->vContext = vContext; d->diagnosticMessages = 0; d->allDiagnosticMessages = 0; @@ -173,14 +176,14 @@ Link::Link(const Snapshot &snapshot, const QStringList &importPaths, const Libra ContextPtr Link::operator()(QHash > *messages) { d->allDiagnosticMessages = messages; - return Context::create(d->snapshot, d->valueOwner, d->linkImports()); + return Context::create(d->snapshot, d->valueOwner, d->linkImports(), d->vContext); } ContextPtr Link::operator()(const Document::Ptr &doc, QList *messages) { d->document = doc; d->diagnosticMessages = messages; - return Context::create(d->snapshot, d->valueOwner, d->linkImports()); + return Context::create(d->snapshot, d->valueOwner, d->linkImports(), d->vContext); } Link::~Link() diff --git a/src/libs/qmljs/qmljslink.h b/src/libs/qmljs/qmljslink.h index 7d7875e4213..dbb2904e0d2 100644 --- a/src/libs/qmljs/qmljslink.h +++ b/src/libs/qmljs/qmljslink.h @@ -48,7 +48,7 @@ class QMLJS_EXPORT Link Q_DECLARE_TR_FUNCTIONS(QmlJS::Link) public: - Link(const Snapshot &snapshot, const QStringList &importPaths, const LibraryInfo &builtins); + Link(const Snapshot &snapshot, const ViewerContext &vContext, const LibraryInfo &builtins); // Link all documents in snapshot, collecting all diagnostic messages (if messages != 0) ContextPtr operator()(QHash > *messages = 0); diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.h b/src/libs/qmljs/qmljsmodelmanagerinterface.h index cdcaef362dc..45a7c879919 100644 --- a/src/libs/qmljs/qmljsmodelmanagerinterface.h +++ b/src/libs/qmljs/qmljsmodelmanagerinterface.h @@ -33,7 +33,8 @@ #include "qmljs_global.h" #include "qmljsdocument.h" #include "qmljsbundle.h" - +#include "qmljsconstants.h" +#include "qmljsviewercontext.h" #include #include @@ -175,6 +176,12 @@ public: virtual LibraryInfo builtins(const Document::Ptr &doc) const = 0; + virtual ViewerContext completeVContext(const ViewerContext &vCtx, + const Document::Ptr &doc = Document::Ptr(0)) const = 0; + virtual ViewerContext defaultVContext(bool autoComplete = true, + const Document::Ptr &doc = Document::Ptr(0)) const = 0; + virtual void setDefaultVContext(const ViewerContext &vContext) = 0; + // Blocks until all parsing threads are done. Used for testing. virtual void joinAllThreads() = 0; diff --git a/src/libs/qmljs/qmljsviewercontext.cpp b/src/libs/qmljs/qmljsviewercontext.cpp new file mode 100644 index 00000000000..5391a8bc87e --- /dev/null +++ b/src/libs/qmljs/qmljsviewercontext.cpp @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include "qmljsviewercontext.h" + +namespace QmlJS { +/*! + \class QmlJS::ViewerContext + \brief The ViewerContext class encapsulate selector and paths for a given viewer. + + Using a a different viewer context can emulate (the pure qml part) of a device. + This allows checking how a given qml would be interpreted on another platform/viewer. + + Screen information will also most likely need to be added here. +*/ +ViewerContext::ViewerContext() + : language(Language::Qml), flags(AddAllPaths) +{ } + +ViewerContext::ViewerContext(QStringList selectors, QStringList paths, + QmlJS::Language::Enum language, + QmlJS::ViewerContext::Flags flags) + : selectors(selectors), paths(paths), language(language), + flags(flags) +{ } + + +/* + which languages might be imported in this context + */ +bool ViewerContext::languageIsCompatible(Language::Enum l) const +{ + switch (language) { + case Language::JavaScript: + return l == Language::JavaScript; + case Language::Json: + return l == Language::Json; + case Language::Qml: + return l == Language::Qml || l == Language::QmlQtQuick1 || l == Language::QmlQtQuick2 + || Language::JavaScript; + case Language::QmlProject: + return l == Language::QmlProject; + case Language::QmlQbs: + return l == Language::QmlQbs; + case Language::QmlQtQuick1: + return l == Language::Qml || l == Language::QmlQtQuick1 || Language::JavaScript; + case Language::QmlQtQuick2: + return l == Language::Qml || l == Language::QmlQtQuick2 || Language::JavaScript; + case Language::QmlTypeInfo: + return l == Language::QmlTypeInfo; + case Language::Unknown: // ? + return true; + } +} + +} // namespace QmlJS diff --git a/src/libs/qmljs/qmljsviewercontext.h b/src/libs/qmljs/qmljsviewercontext.h new file mode 100644 index 00000000000..97620b5353e --- /dev/null +++ b/src/libs/qmljs/qmljsviewercontext.h @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef VIEWERCONTEXT_H +#define VIEWERCONTEXT_H + +#include "qmljs_global.h" +#include "qmljsconstants.h" + +#include + +namespace QmlJS { + +class QMLJS_EXPORT ViewerContext +{ +public: + enum Flags { + Complete, + AddAllPaths, + AddQtPath + }; + + ViewerContext(); + ViewerContext(QStringList selectors, QStringList paths, + Language::Enum language = Language::Qml, + Flags flags = AddAllPaths); + + bool languageIsCompatible(Language::Enum l) const; + + QStringList selectors; + QStringList paths; + Language::Enum language; + Flags flags; +}; + +} // namespace QmlJS +#endif // VIEWERCONTEXT_H diff --git a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp index 2405ef8412c..badaa52ba3a 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp @@ -101,7 +101,7 @@ static inline bool checkIfDerivedFromItem(const QString &fileName) snapshot.insert(document); - QmlJS::Link link(snapshot, modelManager->importPaths(), QmlJS::ModelManagerInterface::instance()->builtins(document)); + QmlJS::Link link(snapshot, modelManager->defaultVContext(), QmlJS::ModelManagerInterface::instance()->builtins(document)); QList diagnosticLinkMessages; QmlJS::ContextPtr context = link(document, &diagnosticLinkMessages); diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index 20eec5c8e14..e37d2711605 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -306,10 +306,10 @@ class ReadingContext { public: ReadingContext(const Snapshot &snapshot, const Document::Ptr &doc, - const QStringList importPaths) + const ViewerContext &vContext) : m_snapshot(snapshot) , m_doc(doc) - , m_link(snapshot, importPaths, + , m_link(snapshot, vContext, QmlJS::ModelManagerInterface::instance()->builtins(doc)) , m_context(m_link(doc, &m_diagnosticLinkMessages)) , m_scopeChain(doc, m_context) @@ -751,7 +751,11 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH return false; } snapshot.insert(doc); - ReadingContext ctxt(snapshot, doc, importPaths); + QmlJS::ViewerContext vContext; + vContext.language = QmlJS::Language::Qml; + vContext.paths = importPaths; + vContext.flags = QmlJS::ViewerContext::Complete; + ReadingContext ctxt(snapshot, doc, vContext); m_scopeChain = QSharedPointer( new ScopeChain(ctxt.scopeChain())); m_document = doc; diff --git a/src/plugins/qmljseditor/qmljsfindreferences.cpp b/src/plugins/qmljseditor/qmljsfindreferences.cpp index a8b7d70914d..48a16d0de09 100644 --- a/src/plugins/qmljseditor/qmljsfindreferences.cpp +++ b/src/plugins/qmljseditor/qmljsfindreferences.cpp @@ -831,7 +831,7 @@ static void find_helper(QFutureInterface &future, QmlJS::ModelManagerInterface *modelManager = QmlJS::ModelManagerInterface::instance(); - Link link(snapshot, modelManager->importPaths(), modelManager->builtins(doc)); + Link link(snapshot, modelManager->defaultVContext(), modelManager->builtins(doc)); ContextPtr context = link(); ScopeChain scopeChain(doc, context); diff --git a/src/plugins/qmljseditor/qmljssemanticinfoupdater.cpp b/src/plugins/qmljseditor/qmljssemanticinfoupdater.cpp index 2e4a73b57e7..30b3422cc53 100644 --- a/src/plugins/qmljseditor/qmljssemanticinfoupdater.cpp +++ b/src/plugins/qmljseditor/qmljssemanticinfoupdater.cpp @@ -122,7 +122,7 @@ QmlJSTools::SemanticInfo SemanticInfoUpdater::makeNewSemanticInfo(const QmlJS::D ModelManagerInterface *modelManager = ModelManagerInterface::instance(); - Link link(semanticInfo.snapshot, modelManager->importPaths(), modelManager->builtins(doc)); + Link link(semanticInfo.snapshot, modelManager->defaultVContext(), modelManager->builtins(doc)); semanticInfo.context = link(doc, &semanticInfo.semanticMessages); ScopeChain *scopeChain = new ScopeChain(doc, semanticInfo.context); diff --git a/src/plugins/qmljseditor/qmltaskmanager.cpp b/src/plugins/qmljseditor/qmltaskmanager.cpp index 42f78bec198..40d19319aa9 100644 --- a/src/plugins/qmljseditor/qmltaskmanager.cpp +++ b/src/plugins/qmljseditor/qmltaskmanager.cpp @@ -92,13 +92,13 @@ static QList convertToTasks(const QList &future, Snapshot snapshot, QList projectInfos, - QStringList importPaths, bool updateSemantic) + ViewerContext vContext, bool updateSemantic) { foreach (const ModelManagerInterface::ProjectInfo &info, projectInfos) { QHash > linkMessages; ContextPtr context; if (updateSemantic) { - Link link(snapshot, importPaths, snapshot.libraryInfo(info.qtImportsPath)); + Link link(snapshot, vContext, snapshot.libraryInfo(info.qtImportsPath)); context = link(&linkMessages); } @@ -161,7 +161,7 @@ void QmlTaskManager::updateMessagesNow(bool updateSemantic) QFuture future = QtConcurrent::run( &collectMessages, modelManager->newestSnapshot(), modelManager->projectInfos(), - modelManager->importPaths(), updateSemantic); + modelManager->defaultVContext(), updateSemantic); m_messageCollector.setFuture(future); } diff --git a/src/plugins/qmljseditor/qmltaskmanager.h b/src/plugins/qmljseditor/qmltaskmanager.h index 986a2e65f35..f7aaf0ab742 100644 --- a/src/plugins/qmljseditor/qmltaskmanager.h +++ b/src/plugins/qmljseditor/qmltaskmanager.h @@ -85,7 +85,7 @@ private: static void collectMessages(QFutureInterface &future, QmlJS::Snapshot snapshot, QList projectInfos, - QStringList importPaths, + QmlJS::ViewerContext vContext, bool updateSemantic); private: diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp index 46beb6a3456..33e65996838 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.cpp +++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp @@ -1121,6 +1121,34 @@ LibraryInfo ModelManager::builtins(const Document::Ptr &doc) const return _validSnapshot.libraryInfo(info.qtImportsPath); } +ViewerContext ModelManager::completeVContext(const ViewerContext &vCtx, + const Document::Ptr &doc) const +{ + Q_UNUSED(doc); + ViewerContext res = vCtx; + switch (res.flags) { + case ViewerContext::Complete: + break; + case ViewerContext::AddQtPath: + case ViewerContext::AddAllPaths: + res.paths << importPaths(); + } + return res; +} + +ViewerContext ModelManager::defaultVContext(bool autoComplete, const Document::Ptr &doc) const +{ + if (autoComplete) + return completeVContext(m_vContext, doc); + else + return m_vContext; +} + +void ModelManager::setDefaultVContext(const ViewerContext &vContext) +{ + m_vContext = vContext; +} + void ModelManager::joinAllThreads() { foreach (QFuture future, m_synchronizer.futures()) diff --git a/src/plugins/qmljstools/qmljsmodelmanager.h b/src/plugins/qmljstools/qmljsmodelmanager.h index 04cb3d5d4e9..9b3111afd52 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.h +++ b/src/plugins/qmljstools/qmljsmodelmanager.h @@ -115,6 +115,14 @@ public: QmlJS::LibraryInfo builtins(const QmlJS::Document::Ptr &doc) const QTC_OVERRIDE; + QmlJS::ViewerContext completeVContext( + const QmlJS::ViewerContext &vCtx, + const QmlJS::Document::Ptr &doc = QmlJS::Document::Ptr(0)) const QTC_OVERRIDE; + QmlJS::ViewerContext defaultVContext( + bool autoComplete = true, + const QmlJS::Document::Ptr &doc = QmlJS::Document::Ptr(0)) const QTC_OVERRIDE; + void setDefaultVContext(const QmlJS::ViewerContext &vContext) QTC_OVERRIDE; + void joinAllThreads() QTC_OVERRIDE; public slots: @@ -158,6 +166,7 @@ private: QStringList m_defaultImportPaths; QmlJS::QmlLanguageBundles m_activeBundles; QmlJS::QmlLanguageBundles m_extendedBundles; + QmlJS::ViewerContext m_vContext; QTimer *m_updateCppQmlTypesTimer; QTimer *m_asyncResetTimer; diff --git a/src/plugins/qmljstools/qmljstools_test.cpp b/src/plugins/qmljstools/qmljstools_test.cpp index e4336b01462..010da935dc5 100644 --- a/src/plugins/qmljstools/qmljstools_test.cpp +++ b/src/plugins/qmljstools/qmljstools_test.cpp @@ -53,7 +53,7 @@ void QmlJSTools::Internal::QmlJSToolsPlugin::test_basic() Document::Ptr doc = snapshot.document(welcomescreenRootPath); QVERIFY(doc && doc->isQmlDocument()); - ContextPtr context = Link(snapshot, QStringList(), LibraryInfo())(); + ContextPtr context = Link(snapshot, ViewerContext(), LibraryInfo())(); QVERIFY(context); const CppComponentValue *rectangleValue = context->valueOwner()->cppQmlTypes().objectByQualifiedName( From 7fb87fbb0609af9a52b1a2d6a0f7f9290fec87ae Mon Sep 17 00:00:00 2001 From: Fawzi Mohamed Date: Wed, 13 Nov 2013 16:31:04 +0100 Subject: [PATCH 08/56] qmljs: fingerprints for documents, libraries and FakeMetaObjects Change-Id: Ib9c9b86fbed19539dc42696292bdb3b93dd1b575 Reviewed-by: Thomas Hartmann --- src/libs/languageutils/componentversion.cpp | 9 +- src/libs/languageutils/componentversion.h | 5 + src/libs/languageutils/fakemetaobject.cpp | 138 ++++++++++++++++++ src/libs/languageutils/fakemetaobject.h | 12 ++ src/libs/qmljs/qmljsdocument.cpp | 118 ++++++++++++++- src/libs/qmljs/qmljsdocument.h | 13 +- src/libs/qmljs/qmljsimportdependencies.cpp | 63 ++++++-- src/libs/qmljs/qmljsimportdependencies.h | 15 +- src/libs/qmljs/qmljstypedescriptionreader.cpp | 1 + .../qmljstools/qmljsfindexportedcpptypes.cpp | 6 +- src/plugins/qmljstools/qmljsplugindumper.cpp | 4 + 11 files changed, 360 insertions(+), 24 deletions(-) diff --git a/src/libs/languageutils/componentversion.cpp b/src/libs/languageutils/componentversion.cpp index b043802a008..99aff4a5b8e 100644 --- a/src/libs/languageutils/componentversion.cpp +++ b/src/libs/languageutils/componentversion.cpp @@ -30,6 +30,7 @@ #include "componentversion.h" #include +#include #include @@ -77,7 +78,13 @@ bool ComponentVersion::isValid() const QString ComponentVersion::toString() const { return QString::fromLatin1("%1.%2").arg(QString::number(_major), - QString::number(_minor)); + QString::number(_minor)); +} + +void ComponentVersion::addToHash(QCryptographicHash &hash) const +{ + hash.addData(reinterpret_cast(&_major), sizeof(_major)); + hash.addData(reinterpret_cast(&_minor), sizeof(_minor)); } namespace LanguageUtils { diff --git a/src/libs/languageutils/componentversion.h b/src/libs/languageutils/componentversion.h index d1c0bde5418..7fe35e8792a 100644 --- a/src/libs/languageutils/componentversion.h +++ b/src/libs/languageutils/componentversion.h @@ -32,6 +32,10 @@ #include "languageutils_global.h" +QT_BEGIN_NAMESPACE +class QCryptographicHash; +QT_END_NAMESPACE + namespace LanguageUtils { class LANGUAGEUTILS_EXPORT ComponentVersion @@ -55,6 +59,7 @@ public: bool isValid() const; QString toString() const; + void addToHash(QCryptographicHash &hash) const; }; bool LANGUAGEUTILS_EXPORT operator<(const ComponentVersion &lhs, const ComponentVersion &rhs); diff --git a/src/libs/languageutils/fakemetaobject.cpp b/src/libs/languageutils/fakemetaobject.cpp index a478b2171a1..980b69d16fb 100644 --- a/src/libs/languageutils/fakemetaobject.cpp +++ b/src/libs/languageutils/fakemetaobject.cpp @@ -28,6 +28,7 @@ ****************************************************************************/ #include "fakemetaobject.h" +#include using namespace LanguageUtils; @@ -62,6 +63,24 @@ QStringList FakeMetaEnum::keys() const bool FakeMetaEnum::hasKey(const QString &key) const { return m_keys.contains(key); } +void FakeMetaEnum::addToHash(QCryptographicHash &hash) const +{ + int len = m_name.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(m_name.constData()), len * sizeof(QChar)); + len = m_keys.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + foreach (const QString &key, m_keys) { + len = key.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(key.constData()), len * sizeof(QChar)); + } + len = m_values.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + foreach (int value, m_values) + hash.addData(reinterpret_cast(&value), sizeof(value)); +} + FakeMetaMethod::FakeMetaMethod(const QString &name, const QString &returnType) : m_name(name) , m_returnType(returnType) @@ -109,6 +128,33 @@ int FakeMetaMethod::revision() const void FakeMetaMethod::setRevision(int r) { m_revision = r; } +void FakeMetaMethod::addToHash(QCryptographicHash &hash) const +{ + int len = m_name.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(m_name.constData()), len * sizeof(QChar)); + hash.addData(reinterpret_cast(&m_methodAccess), sizeof(m_methodAccess)); + hash.addData(reinterpret_cast(&m_methodTy), sizeof(m_methodTy)); + hash.addData(reinterpret_cast(&m_revision), sizeof(m_revision)); + len = m_paramNames.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + foreach (const QString &pName, m_paramNames) { + len = pName.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(pName.constData()), len * sizeof(QChar)); + } + len = m_paramTypes.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + foreach (const QString &pType, m_paramTypes) { + len = pType.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(pType.constData()), len * sizeof(QChar)); + } + len = m_returnType.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(m_returnType.constData()), len * sizeof(QChar)); +} + FakeMetaProperty::FakeMetaProperty(const QString &name, const QString &type, bool isList, bool isWritable, bool isPointer, int revision) @@ -138,6 +184,21 @@ bool FakeMetaProperty::isPointer() const int FakeMetaProperty::revision() const { return m_revision; } +void FakeMetaProperty::addToHash(QCryptographicHash &hash) const +{ + int len = m_propertyName.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(m_propertyName.constData()), len * sizeof(QChar)); + hash.addData(reinterpret_cast(&m_revision), sizeof(m_revision)); + int flags = (m_isList ? (1 << 0) : 0) + + (m_isPointer ? (1 << 1) : 0) + + (m_isWritable ? (1 << 2) : 0); + hash.addData(reinterpret_cast(&flags), sizeof(flags)); + len = m_type.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(m_type.constData()), len * sizeof(QChar)); +} + FakeMetaObject::FakeMetaObject() { @@ -226,8 +287,85 @@ QString FakeMetaObject::attachedTypeName() const void FakeMetaObject::setAttachedTypeName(const QString &name) { m_attachedTypeName = name; } +QByteArray FakeMetaObject::calculateFingerprint() const +{ + QCryptographicHash hash(QCryptographicHash::Sha1); + int len = m_className.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(m_className.constData()), len * sizeof(QChar)); + len = m_attachedTypeName.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(m_attachedTypeName.constData()), len * sizeof(QChar)); + len = m_defaultPropertyName.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(m_defaultPropertyName.constData()), len * sizeof(QChar)); + len = m_enumNameToIndex.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + { + QStringList keys(m_enumNameToIndex.keys()); + keys.sort(); + foreach (const QString &key, keys) { + len = key.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(key.constData()), len * sizeof(QChar)); + int value = m_enumNameToIndex.value(key); + hash.addData(reinterpret_cast(&value), sizeof(value)); // avoid? this adds order dependency to fingerprint... + m_enums.at(value).addToHash(hash); + } + } + len = m_exports.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + foreach (const Export &e, m_exports) + e.addToHash(hash); // normalize order? + len = m_exports.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + foreach (const FakeMetaMethod &m, m_methods) + m.addToHash(hash); // normalize order? + { + QStringList keys(m_propNameToIdx.keys()); + keys.sort(); + foreach (const QString &key, keys) { + len = key.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(key.constData()), len * sizeof(QChar)); + int value = m_propNameToIdx.value(key); + hash.addData(reinterpret_cast(&value), sizeof(value)); // avoid? this adds order dependency to fingerprint... + m_props.at(value).addToHash(hash); + } + } + len = m_superName.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(m_superName.constData()), len * sizeof(QChar)); + + QByteArray res = hash.result(); + res.append('F'); + return res; +} + +void FakeMetaObject::updateFingerprint() +{ + m_fingerprint = calculateFingerprint(); +} + +QByteArray FakeMetaObject::fingerprint() const +{ + return m_fingerprint; +} + FakeMetaObject::Export::Export() : metaObjectRevision(0) {} bool FakeMetaObject::Export::isValid() const { return version.isValid() || !package.isEmpty() || !type.isEmpty(); } + +void FakeMetaObject::Export::addToHash(QCryptographicHash &hash) const +{ + int len = package.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(package.constData()), len * sizeof(QChar)); + len = type.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(type.constData()), len * sizeof(QChar)); + version.addToHash(hash); + hash.addData(reinterpret_cast(&metaObjectRevision), sizeof(metaObjectRevision)); +} diff --git a/src/libs/languageutils/fakemetaobject.h b/src/libs/languageutils/fakemetaobject.h index c0a417a7e11..ed485d9f622 100644 --- a/src/libs/languageutils/fakemetaobject.h +++ b/src/libs/languageutils/fakemetaobject.h @@ -39,6 +39,10 @@ #include #include +QT_BEGIN_NAMESPACE +class QCryptographicHash; +QT_END_NAMESPACE + namespace LanguageUtils { class LANGUAGEUTILS_EXPORT FakeMetaEnum { @@ -60,6 +64,7 @@ public: int keyCount() const; QStringList keys() const; bool hasKey(const QString &key) const; + void addToHash(QCryptographicHash &hash) const; }; class LANGUAGEUTILS_EXPORT FakeMetaMethod { @@ -96,6 +101,7 @@ public: int revision() const; void setRevision(int r); + void addToHash(QCryptographicHash &hash) const; private: QString m_name; @@ -125,6 +131,7 @@ public: bool isWritable() const; bool isPointer() const; int revision() const; + void addToHash(QCryptographicHash &hash) const; }; class LANGUAGEUTILS_EXPORT FakeMetaObject { @@ -144,6 +151,7 @@ public: int metaObjectRevision; bool isValid() const; + void addToHash(QCryptographicHash &hash) const; }; private: @@ -157,6 +165,7 @@ private: QList m_methods; QString m_defaultPropertyName; QString m_attachedTypeName; + QByteArray m_fingerprint; public: FakeMetaObject(); @@ -195,6 +204,9 @@ public: QString attachedTypeName() const; void setAttachedTypeName(const QString &name); + QByteArray calculateFingerprint() const; + void updateFingerprint(); + QByteArray fingerprint() const; }; } // namespace LanguageUtils diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp index 7d8db768bed..bdc1e8c5b41 100644 --- a/src/libs/qmljs/qmljsdocument.cpp +++ b/src/libs/qmljs/qmljsdocument.cpp @@ -34,8 +34,13 @@ #include #include +#include + +#include #include +#include + using namespace QmlJS; using namespace QmlJS::AST; @@ -205,6 +210,16 @@ void Document::setLanguage(Language::Enum l) _language = l; } +QString Document::importId() const +{ + return path(); +} + +QByteArray Document::fingerprint() const +{ + return _fingerprint; +} + AST::UiProgram *Document::qmlProgram() const { return cast(_ast); @@ -246,6 +261,9 @@ QString Document::source() const void Document::setSource(const QString &source) { _source = source; + QCryptographicHash sha(QCryptographicHash::Sha1); + sha.addData(source.toUtf8()); + _fingerprint = sha.result(); } int Document::editorRevision() const @@ -374,21 +392,88 @@ LibraryInfo::LibraryInfo(Status status) : _status(status) , _dumpStatus(NoTypeInfo) { + updateFingerprint(); } -LibraryInfo::LibraryInfo(const QmlDirParser &parser) +LibraryInfo::LibraryInfo(const QmlDirParser &parser, const QByteArray &fingerprint) : _status(Found) , _components(parser.components().values()) , _plugins(parser.plugins()) , _typeinfos(parser.typeInfos()) + , _fingerprint(fingerprint) , _dumpStatus(NoTypeInfo) { + if (_fingerprint.isEmpty()) + updateFingerprint(); } LibraryInfo::~LibraryInfo() { } +QByteArray LibraryInfo::calculateFingerprint() const +{ + QCryptographicHash hash(QCryptographicHash::Sha1); + hash.addData(reinterpret_cast(&_status), sizeof(_status)); + int len = _components.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + foreach (const QmlDirParser::Component &component, _components) { + len = component.fileName.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(component.fileName.constData()), len * sizeof(QChar)); + hash.addData(reinterpret_cast(&component.majorVersion), sizeof(component.majorVersion)); + hash.addData(reinterpret_cast(&component.minorVersion), sizeof(component.minorVersion)); + len = component.typeName.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(component.typeName.constData()), component.typeName.size() * sizeof(QChar)); + int flags = (component.singleton ? (1 << 0) : 0) + (component.internal ? (1 << 1) : 0); + hash.addData(reinterpret_cast(&flags), sizeof(flags)); + } + len = _plugins.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + foreach (const QmlDirParser::Plugin &plugin, _plugins) { + len = plugin.path.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(plugin.path.constData()), len * sizeof(QChar)); + len = plugin.name.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(plugin.name.constData()), len * sizeof(QChar)); + } + len = _typeinfos.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + foreach (const QmlDirParser::TypeInfo &typeinfo, _typeinfos) { + len = typeinfo.fileName.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(typeinfo.fileName.constData()), len * sizeof(QChar)); + } + len = _metaObjects.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + QList metaFingerprints; + foreach (const LanguageUtils::FakeMetaObject::ConstPtr &metaObject, _metaObjects) + metaFingerprints.append(metaObject->fingerprint()); + std::sort(metaFingerprints.begin(), metaFingerprints.end()); + foreach (const QByteArray &fp, metaFingerprints) + hash.addData(fp); + hash.addData(reinterpret_cast(&_dumpStatus), sizeof(_dumpStatus)); + len = _dumpError.size(); // localization dependent (avoid?) + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(_dumpError.constData()), len * sizeof(QChar)); + + len = _moduleApis.size(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + foreach (const ModuleApiInfo &moduleInfo, _moduleApis) + moduleInfo.addToHash(hash); // make it order independent? + + QByteArray res(hash.result()); + res.append('L'); + return res; +} + +void LibraryInfo::updateFingerprint() +{ + _fingerprint = calculateFingerprint(); +} + Snapshot::Snapshot() { } @@ -410,16 +495,33 @@ void Snapshot::insert(const Document::Ptr &document, bool allowInvalid) if (document && (allowInvalid || document->qmlProgram() || document->jsProgram())) { const QString fileName = document->fileName(); const QString path = document->path(); - remove(fileName); _documentsByPath[path].append(document); _documents.insert(fileName, document); + CoreImport cImport; + cImport.importId = document->importId(); + cImport.language = document->language(); + cImport.possibleExports << Export(ImportKey(ImportType::File, document->path()), + QString(), true); + cImport.fingerprint = document->fingerprint(); + _dependencies.addCoreImport(cImport); } } void Snapshot::insertLibraryInfo(const QString &path, const LibraryInfo &info) { + QTC_CHECK(info.fingerprint() == info.calculateFingerprint()); _libraries.insert(QDir::cleanPath(path), info); + CoreImport cImport; + cImport.importId = path; + cImport.language = Language::Unknown; + foreach (const ModuleApiInfo &moduleInfo, info.moduleApis()) { + ImportKey iKey(ImportType::Library, moduleInfo.uri, moduleInfo.version.majorVersion(), + moduleInfo.version.minorVersion()); + cImport.possibleExports << Export(iKey, path, true); + } + cImport.fingerprint = info.fingerprint(); + _dependencies.addCoreImport(cImport); } void Snapshot::remove(const QString &fileName) @@ -473,3 +575,15 @@ LibraryInfo Snapshot::libraryInfo(const QString &path) const { return _libraries.value(QDir::cleanPath(path)); } + + +void ModuleApiInfo::addToHash(QCryptographicHash &hash) const +{ + int len = uri.length(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(uri.constData()), len * sizeof(QChar)); + version.addToHash(hash); + len = cppName.length(); + hash.addData(reinterpret_cast(&len), sizeof(len)); + hash.addData(reinterpret_cast(cppName.constData()), len * sizeof(QChar)); +} diff --git a/src/libs/qmljs/qmljsdocument.h b/src/libs/qmljs/qmljsdocument.h index 65712178095..d10a02c587d 100644 --- a/src/libs/qmljs/qmljsdocument.h +++ b/src/libs/qmljs/qmljsdocument.h @@ -71,6 +71,8 @@ public: Language::Enum language() const; void setLanguage(Language::Enum l); + QString importId() const; + QByteArray fingerprint() const; AST::UiProgram *qmlProgram() const; AST::Program *jsProgram() const; AST::ExpressionNode *expression() const; @@ -113,6 +115,7 @@ private: QString _componentName; QString _source; QWeakPointer _ptr; + QByteArray _fingerprint; int _editorRevision; Language::Enum _language; bool _parsedCorrectly; @@ -127,6 +130,8 @@ public: QString uri; LanguageUtils::ComponentVersion version; QString cppName; + + void addToHash(QCryptographicHash &hash) const; }; class QMLJS_EXPORT LibraryInfo @@ -154,15 +159,21 @@ private: typedef QList FakeMetaObjectList; FakeMetaObjectList _metaObjects; QList _moduleApis; + QByteArray _fingerprint; PluginTypeInfoStatus _dumpStatus; QString _dumpError; public: explicit LibraryInfo(Status status = NotScanned); - explicit LibraryInfo(const QmlDirParser &parser); + explicit LibraryInfo(const QmlDirParser &parser, const QByteArray &fingerprint = QByteArray()); ~LibraryInfo(); + QByteArray calculateFingerprint() const; + void updateFingerprint(); + QByteArray fingerprint() const + { return _fingerprint; } + QList components() const { return _components; } diff --git a/src/libs/qmljs/qmljsimportdependencies.cpp b/src/libs/qmljs/qmljsimportdependencies.cpp index f948a0208ca..83872e1ceb4 100644 --- a/src/libs/qmljs/qmljsimportdependencies.cpp +++ b/src/libs/qmljs/qmljsimportdependencies.cpp @@ -29,6 +29,7 @@ #include "qmljsimportdependencies.h" #include "qmljsinterpreter.h" +#include "qmljsqrcparser.h" #include #include @@ -113,6 +114,46 @@ ImportKey::ImportKey() minorVersion(LanguageUtils::ComponentVersion::NoVersion) { } +ImportKey::ImportKey(const ImportInfo &info) + : type(info.type()) + , majorVersion(info.version().majorVersion()) + , minorVersion(info.version().minorVersion()) +{ + splitPath = QFileInfo(info.path()).canonicalFilePath().split(QLatin1Char('/'), + QString::KeepEmptyParts); +} + +ImportKey::ImportKey(ImportType::Enum type, const QString &path, int majorVersion, int minorVersion) + : type(type) + , majorVersion(majorVersion) + , minorVersion(minorVersion) +{ + switch (type) { + case ImportType::Library: + splitPath = path.split(QLatin1Char('.')); + break; + case ImportType::ImplicitDirectory: + case ImportType::Directory: + splitPath = path.split(QLatin1Char('/')); + if (splitPath.length() > 1 && splitPath.last().isEmpty()) + splitPath.removeLast(); + break; + case ImportType::File: + case ImportType::QrcFile: + splitPath = QrcParser::normalizedQrcFilePath(path).split(QLatin1Char('/')); + break; + case ImportType::QrcDirectory: + splitPath = QrcParser::normalizedQrcDirectoryPath(path).split(QLatin1Char('/')); + if (splitPath.length() > 1 && splitPath.last().isEmpty()) + splitPath.removeLast(); + break; + case ImportType::Invalid: + case ImportType::UnknownFile: + splitPath = path.split(QLatin1Char('/')); + break; + } +} + void ImportKey::addToHash(QCryptographicHash &hash) const { hash.addData(reinterpret_cast(&type), sizeof(type)); @@ -153,15 +194,6 @@ ImportKey ImportKey::flatKey() const { return res; } -ImportKey::ImportKey(const ImportInfo &info) - : type(info.type()) - , majorVersion(info.version().majorVersion()) - , minorVersion(info.version().minorVersion()) -{ - splitPath = QFileInfo(info.path()).canonicalFilePath().split(QChar::fromLatin1('/'), - QString::KeepEmptyParts); -} - QString ImportKey::path() const { QString res = splitPath.join(QString::fromLatin1("/")); @@ -430,8 +462,8 @@ bool operator !=(const Export &i1, const Export &i2) CoreImport::CoreImport() : language(Language::Qml) { } -CoreImport::CoreImport(const QString &importId, QList possibleExports, - Language::Enum language, QByteArray fingerprint) +CoreImport::CoreImport(const QString &importId, const QList &possibleExports, + Language::Enum language, const QByteArray &fingerprint) : importId(importId), possibleExports(possibleExports), language(language), fingerprint(fingerprint) { } @@ -463,7 +495,7 @@ MatchedImport::MatchedImport() { } MatchedImport::MatchedImport(ImportMatchStrength matchStrength, ImportKey importKey, - QString coreImportId) + const QString &coreImportId) : matchStrength(matchStrength), importKey(importKey), coreImportId(coreImportId) { } @@ -474,8 +506,11 @@ int MatchedImport::compare(const MatchedImport &o) const { res = importKey.compare(o.importKey); if (res != 0) return res; - res = coreImportId.compare(o.coreImportId); - return res; + if (coreImportId < o.coreImportId) + return -1; + if (coreImportId > o.coreImportId) + return 1; + return 0; } bool operator ==(const MatchedImport &m1, const MatchedImport &m2) diff --git a/src/libs/qmljs/qmljsimportdependencies.h b/src/libs/qmljs/qmljsimportdependencies.h index 5524ec92870..7ba0ebaf205 100644 --- a/src/libs/qmljs/qmljsimportdependencies.h +++ b/src/libs/qmljs/qmljsimportdependencies.h @@ -80,6 +80,11 @@ bool operator <(const ImportMatchStrength &m1, const ImportMatchStrength &m2); * \brief The ImportKey class represent an import (or export), and can be used as hash key * * This represent only what is to be imported, *not* how (i.e. no as clause) + * + * Order is defined so that files in the same directory are contiguous, and different + * ImportKind are separated. + * This is used to efficiently iterate just on library imports, or just on a directory + * while preserving space. */ class QMLJS_EXPORT ImportKey { @@ -94,6 +99,9 @@ public: explicit ImportKey(); explicit ImportKey(const ImportInfo &info); + ImportKey(ImportType::Enum type, const QString &path, + int majorVersion = LanguageUtils::ComponentVersion::NoVersion, + int minorVersion = LanguageUtils::ComponentVersion::NoVersion); ImportType::Enum type; QStringList splitPath; @@ -134,8 +142,8 @@ class QMLJS_EXPORT CoreImport { public: CoreImport(); - CoreImport(const QString &importId, QList possibleExports = QList(), - Language::Enum language = Language::Qml, QByteArray fingerprint = QByteArray()); + CoreImport(const QString &importId, const QList &possibleExports = QList(), + Language::Enum language = Language::Qml, const QByteArray &fingerprint = QByteArray()); QString importId; QList possibleExports; Language::Enum language; @@ -161,7 +169,8 @@ class QMLJS_EXPORT MatchedImport { public: MatchedImport(); - MatchedImport(ImportMatchStrength matchStrength, ImportKey importKey, QString coreImportId); + MatchedImport(ImportMatchStrength matchStrength, ImportKey importKey, + const QString &coreImportId); ImportMatchStrength matchStrength; ImportKey importKey; diff --git a/src/libs/qmljs/qmljstypedescriptionreader.cpp b/src/libs/qmljs/qmljstypedescriptionreader.cpp index 6cfb5124ddc..695ef5b5c97 100644 --- a/src/libs/qmljs/qmljstypedescriptionreader.cpp +++ b/src/libs/qmljs/qmljstypedescriptionreader.cpp @@ -223,6 +223,7 @@ void TypeDescriptionReader::readComponent(UiObjectDefinition *ast) // ### add implicit export into the package of c++ types fmo->addExport(fmo->className(), QmlJS::CppQmlTypes::cppPackage, ComponentVersion()); + fmo->updateFingerprint(); _objects->insert(fmo->className(), fmo); } diff --git a/src/plugins/qmljstools/qmljsfindexportedcpptypes.cpp b/src/plugins/qmljstools/qmljsfindexportedcpptypes.cpp index 0d2bd263f55..13c88da73fd 100644 --- a/src/plugins/qmljstools/qmljsfindexportedcpptypes.cpp +++ b/src/plugins/qmljstools/qmljsfindexportedcpptypes.cpp @@ -609,14 +609,12 @@ static LanguageUtils::FakeMetaObject::Ptr buildFakeMetaObject( BaseClass *base = klass->baseClassAt(0); if (!base->name()) return fmo; - const QString baseClassName = namePrinter.prettyName(base->name()); fmo->setSuperclassName(baseClassName); Class *baseClass = lookupClass(baseClassName, klass, typeOf); if (!baseClass) return fmo; - buildFakeMetaObject(baseClass, fakeMetaObjects, typeOf); } @@ -735,8 +733,10 @@ void FindExportedCppTypes::operator()(const CPlusPlus::Document::Ptr &document) // convert to list of FakeMetaObject::ConstPtr m_exportedTypes.reserve(fakeMetaObjects.size()); - foreach (const LanguageUtils::FakeMetaObject::Ptr &fmo, fakeMetaObjects) + foreach (const LanguageUtils::FakeMetaObject::Ptr &fmo, fakeMetaObjects) { + fmo->updateFingerprint(); m_exportedTypes += fmo; + } } QList FindExportedCppTypes::exportedTypes() const diff --git a/src/plugins/qmljstools/qmljsplugindumper.cpp b/src/plugins/qmljstools/qmljsplugindumper.cpp index bb8a4a8835b..d0fb8a7b465 100644 --- a/src/plugins/qmljstools/qmljsplugindumper.cpp +++ b/src/plugins/qmljstools/qmljsplugindumper.cpp @@ -339,6 +339,7 @@ void PluginDumper::qmlPluginTypeDumpDone(int exitCode) if (!warning.isEmpty()) printParseWarnings(libraryPath, warning); } + libraryInfo.updateFingerprint(); m_modelManager->updateLibraryInfo(libraryPath, libraryInfo); } @@ -361,6 +362,7 @@ void PluginDumper::qmlPluginTypeDumpError(QProcess::ProcessError) const Snapshot snapshot = m_modelManager->snapshot(); LibraryInfo libraryInfo = snapshot.libraryInfo(libraryPath); libraryInfo.setPluginTypeInfoStatus(LibraryInfo::DumpError, qmldumpFailedMessage(libraryPath, errorMessages)); + libraryInfo.updateFingerprint(); m_modelManager->updateLibraryInfo(libraryPath, libraryInfo); } } @@ -418,6 +420,7 @@ void PluginDumper::loadQmltypesFile(const QStringList &qmltypesFilePaths, if (!warnings.isEmpty()) printParseWarnings(libraryPath, warnings.join(QLatin1String("\n"))); + libraryInfo.updateFingerprint(); m_modelManager->updateLibraryInfo(libraryPath, libraryInfo); } @@ -456,6 +459,7 @@ void PluginDumper::dump(const Plugin &plugin) } libraryInfo.setPluginTypeInfoStatus(LibraryInfo::DumpError, errorMessage); + libraryInfo.updateFingerprint(); m_modelManager->updateLibraryInfo(plugin.qmldirPath, libraryInfo); return; } From 2fc150b9832505238f8c872a861b3fc06d8b062f Mon Sep 17 00:00:00 2001 From: Fawzi Mohamed Date: Tue, 19 Nov 2013 10:42:57 +0100 Subject: [PATCH 09/56] qmljs: scan imports Change-Id: Ied59f5d56c5816d9da57f23a619d604acec76000 Reviewed-by: Thomas Hartmann --- src/libs/qmljs/qmljsdocument.cpp | 27 ++- src/libs/qmljs/qmljsdocument.h | 3 + src/libs/qmljs/qmljsimportdependencies.cpp | 63 +++++- src/libs/qmljs/qmljsimportdependencies.h | 1 + .../debugger/debuggerstartparameters.h | 2 + src/plugins/qmljstools/qmljsmodelmanager.cpp | 191 +++++++++++++++--- src/plugins/qmljstools/qmljsmodelmanager.h | 13 ++ src/plugins/qmljstools/qmljstoolsconstants.h | 1 + 8 files changed, 267 insertions(+), 34 deletions(-) diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp index bdc1e8c5b41..1d8527f8d6b 100644 --- a/src/libs/qmljs/qmljsdocument.cpp +++ b/src/libs/qmljs/qmljsdocument.cpp @@ -212,7 +212,7 @@ void Document::setLanguage(Language::Enum l) QString Document::importId() const { - return path(); + return _fileName; } QByteArray Document::fingerprint() const @@ -501,7 +501,7 @@ void Snapshot::insert(const Document::Ptr &document, bool allowInvalid) CoreImport cImport; cImport.importId = document->importId(); cImport.language = document->language(); - cImport.possibleExports << Export(ImportKey(ImportType::File, document->path()), + cImport.possibleExports << Export(ImportKey(ImportType::File, fileName), QString(), true); cImport.fingerprint = document->fingerprint(); _dependencies.addCoreImport(cImport); @@ -512,13 +512,34 @@ void Snapshot::insertLibraryInfo(const QString &path, const LibraryInfo &info) { QTC_CHECK(info.fingerprint() == info.calculateFingerprint()); _libraries.insert(QDir::cleanPath(path), info); + if (!info.wasFound()) return; CoreImport cImport; cImport.importId = path; cImport.language = Language::Unknown; + QSet packages; foreach (const ModuleApiInfo &moduleInfo, info.moduleApis()) { ImportKey iKey(ImportType::Library, moduleInfo.uri, moduleInfo.version.majorVersion(), moduleInfo.version.minorVersion()); - cImport.possibleExports << Export(iKey, path, true); + packages.insert(iKey); + } + foreach (const LanguageUtils::FakeMetaObject::ConstPtr &metaO, info.metaObjects()) { + foreach (const LanguageUtils::FakeMetaObject::Export &e, metaO->exports()) { + ImportKey iKey(ImportType::Library, e.package, e.version.majorVersion(), + e.version.minorVersion()); + packages.insert(iKey); + } + } + + QStringList splitPath = path.split(QLatin1Char('/')); + foreach (const ImportKey &importKey, packages) { + QString requiredPath = QStringList(splitPath.mid(0, splitPath.size() - importKey.splitPath.size())) + .join(QLatin1Char('/')); + cImport.possibleExports << Export(importKey, requiredPath, true); + } + foreach (const QmlDirParser::Component &component, info.components()) { + foreach (const Export &e, cImport.possibleExports) + // renaming of type name not really represented here... fix? + _dependencies.addExport(component.fileName, e.exportName, e.pathRequired); } cImport.fingerprint = info.fingerprint(); _dependencies.addCoreImport(cImport); diff --git a/src/libs/qmljs/qmljsdocument.h b/src/libs/qmljs/qmljsdocument.h index d10a02c587d..59906c354ec 100644 --- a/src/libs/qmljs/qmljsdocument.h +++ b/src/libs/qmljs/qmljsdocument.h @@ -201,6 +201,9 @@ public: bool wasScanned() const { return _status != NotScanned; } + bool wasFound() const + { return _status != NotFound; } + PluginTypeInfoStatus pluginTypeInfoStatus() const { return _dumpStatus; } diff --git a/src/libs/qmljs/qmljsimportdependencies.cpp b/src/libs/qmljs/qmljsimportdependencies.cpp index 83872e1ceb4..4b9c05d7718 100644 --- a/src/libs/qmljs/qmljsimportdependencies.cpp +++ b/src/libs/qmljs/qmljsimportdependencies.cpp @@ -40,6 +40,8 @@ namespace QmlJS { +static bool debugImportDependencies = false; + ImportKind::Enum toImportKind(ImportType::Enum type) { switch (type) { @@ -408,6 +410,40 @@ ImportKey::DirCompareInfo ImportKey::compareDir(const ImportKey &superDir) const return SameDir; } +QString ImportKey::toString() const +{ + QString res; + switch (type) { + case ImportType::UnknownFile: + case ImportType::File: + res = path(); + break; + case ImportType::Directory: + case ImportType::ImplicitDirectory: + res = path() + QLatin1Char('/'); + break; + case ImportType::QrcDirectory: + res = QLatin1String("qrc:") + path() + QLatin1Char('/'); + break; + case ImportType::QrcFile: + res = QLatin1String("qrc:") + path() + QLatin1Char('/'); + break; + case ImportType::Invalid: + res = path(); + break; + case ImportType::Library: + res = splitPath.join(QLatin1Char('.')); + break; + } + + if (majorVersion != LanguageUtils::ComponentVersion::NoVersion + || minorVersion != LanguageUtils::ComponentVersion::NoVersion) + return res + QLatin1Char(' ') + QString::number(majorVersion) + + QLatin1Char('.') + QString::number(minorVersion); + + return res; +} + uint qHash(const ImportKey &info) { uint res = ::qHash(info.type) ^ @@ -688,6 +724,12 @@ void ImportDependencies::addCoreImport(const CoreImport &import) newImport.possibleExports.append(e); } m_coreImports.insert(newImport.importId, newImport); + if (debugImportDependencies) { + QDebug dbg(qDebug()); + dbg << "added import "<< newImport.importId << " for"; + foreach (const Export &e, newImport.possibleExports) + dbg << " " << e.exportName.toString() << "(" << e.pathRequired << ")"; + } } void ImportDependencies::removeCoreImport(const QString &importId) @@ -705,6 +747,8 @@ void ImportDependencies::removeCoreImport(const QString &importId) cImport.possibleExports = newExports; else m_coreImports.remove(importId); + if (debugImportDependencies) + qDebug() << "removed import with id:"<< importId; } void ImportDependencies::addExport(const QString &importId, const ImportKey &importKey, @@ -719,6 +763,9 @@ void ImportDependencies::addExport(const QString &importId, const ImportKey &imp } CoreImport &importValue = m_coreImports[importId]; importValue.possibleExports.append(Export(importKey, requiredPath, false)); + if (debugImportDependencies) + qDebug() << "added export "<< importKey.toString() << " for id " < #include #include +#include #include #include @@ -360,7 +361,7 @@ QFuture ModelManager::refreshSourceFiles(const QStringList &sourceFiles, QFuture result = QtConcurrent::run(&ModelManager::parse, workingCopy(), sourceFiles, - this, + this, Language::Qml, emitDocumentOnDiskChanged); if (m_synchronizer.futures().size() > 10) { @@ -386,7 +387,7 @@ void ModelManager::fileChangedOnDisk(const QString &path) { QtConcurrent::run(&ModelManager::parse, workingCopy(), QStringList() << path, - this, true); + this, Language::Unknown, true); } void ModelManager::removeFiles(const QStringList &files) @@ -700,7 +701,8 @@ static bool findNewQmlLibraryInPath(const QString &path, ModelManager *modelManager, QStringList *importedFiles, QSet *scannedPaths, - QSet *newLibraries) + QSet *newLibraries, + bool ignoreMissing) { // if we know there is a library, done const LibraryInfo &existingInfo = snapshot.libraryInfo(path); @@ -715,8 +717,10 @@ static bool findNewQmlLibraryInPath(const QString &path, const QDir dir(path); QFile qmldirFile(dir.filePath(QLatin1String("qmldir"))); if (!qmldirFile.exists()) { - LibraryInfo libraryInfo(LibraryInfo::NotFound); - modelManager->updateLibraryInfo(path, libraryInfo); + if (!ignoreMissing) { + LibraryInfo libraryInfo(LibraryInfo::NotFound); + modelManager->updateLibraryInfo(path, libraryInfo); + } return false; } @@ -765,18 +769,18 @@ static void findNewQmlLibrary( QString::number(version.minorVersion())); findNewQmlLibraryInPath( libraryPath, snapshot, modelManager, - importedFiles, scannedPaths, newLibraries); + importedFiles, scannedPaths, newLibraries, false); libraryPath = QString::fromLatin1("%1.%2").arg( path, QString::number(version.majorVersion())); findNewQmlLibraryInPath( libraryPath, snapshot, modelManager, - importedFiles, scannedPaths, newLibraries); + importedFiles, scannedPaths, newLibraries, false); findNewQmlLibraryInPath( path, snapshot, modelManager, - importedFiles, scannedPaths, newLibraries); + importedFiles, scannedPaths, newLibraries, false); } static void findNewLibraryImports(const Document::Ptr &doc, const Snapshot &snapshot, @@ -785,7 +789,7 @@ static void findNewLibraryImports(const Document::Ptr &doc, const Snapshot &snap { // scan current dir findNewQmlLibraryInPath(doc->path(), snapshot, modelManager, - importedFiles, scannedPaths, newLibraries); + importedFiles, scannedPaths, newLibraries, false); // scan dir and lib imports const QStringList importPaths = modelManager->importPaths(); @@ -793,7 +797,7 @@ static void findNewLibraryImports(const Document::Ptr &doc, const Snapshot &snap if (import.type() == ImportType::Directory) { const QString targetPath = import.path(); findNewQmlLibraryInPath(targetPath, snapshot, modelManager, - importedFiles, scannedPaths, newLibraries); + importedFiles, scannedPaths, newLibraries, false); } if (import.type() == ImportType::Library) { @@ -808,24 +812,18 @@ static void findNewLibraryImports(const Document::Ptr &doc, const Snapshot &snap } } -void ModelManager::parse(QFutureInterface &future, - WorkingCopy workingCopy, - QStringList files, - ModelManager *modelManager, - bool emitDocChangedOnDisk) +void ModelManager::parseLoop(QSet &scannedPaths, + QSet &newLibraries, + WorkingCopy workingCopy, + QStringList files, + ModelManager *modelManager, + Language::Enum mainLanguage, + bool emitDocChangedOnDisk, + Utils::function reportProgress) { - int progressRange = files.size(); - future.setProgressRange(0, progressRange); - - // paths we have scanned for files and added to the files list - QSet scannedPaths; - // libraries we've found while scanning imports - QSet newLibraries; - for (int i = 0; i < files.size(); ++i) { - if (future.isCanceled()) - break; - future.setProgressValue(qreal(i) / files.size() * progressRange); + if (!reportProgress(qreal(i) / files.size())) + return; const QString fileName = files.at(i); @@ -835,7 +833,9 @@ void ModelManager::parse(QFutureInterface &future, modelManager->updateQrcFile(fileName); continue; } - + if (language == Language::Qml + && (mainLanguage == Language::QmlQtQuick1 || Language::QmlQtQuick2)) + language = mainLanguage; QString contents; int documentRevision = 0; @@ -878,7 +878,116 @@ void ModelManager::parse(QFutureInterface &future, if (emitDocChangedOnDisk) modelManager->emitDocumentChangedOnDisk(doc); } +} +class FutureReporter +{ +public: + FutureReporter(QFutureInterface &future, int multiplier = 100, int base = 0) + :future(future), multiplier(multiplier), base(base) + { } + bool operator()(qreal val) + { + if (future.isCanceled()) + return false; + future.setProgressValue(int(base + multiplier * val)); + return true; + } +private: + QFutureInterface &future; + int multiplier; + int base; +}; + +void ModelManager::parse(QFutureInterface &future, + WorkingCopy workingCopy, + QStringList files, + ModelManager *modelManager, + Language::Enum mainLanguage, + bool emitDocChangedOnDisk) +{ + FutureReporter reporter(future); + future.setProgressRange(0, 100); + + // paths we have scanned for files and added to the files list + QSet scannedPaths; + // libraries we've found while scanning imports + QSet newLibraries; + parseLoop(scannedPaths, newLibraries, workingCopy, files, modelManager, mainLanguage, + emitDocChangedOnDisk, reporter); + future.setProgressValue(100); +} + +struct ScanItem { + QString path; + int depth; + ScanItem(QString path = QString(), int depth = 0) + : path(path), depth(depth) + { } +}; + +void ModelManager::importScan(QFutureInterface &future, + ModelManagerInterface::WorkingCopy workingCopy, + QStringList paths, ModelManager *modelManager, + Language::Enum language, + bool emitDocChangedOnDisk) +{ + // paths we have scanned for files and added to the files list + QSet scannedPaths = modelManager->m_scannedPaths; + // libraries we've found while scanning imports + QSet newLibraries; + + QVector pathsToScan; + pathsToScan.reserve(paths.size()); + foreach (const QString &path, paths) { + QString cPath = QDir::cleanPath(path); + if (modelManager->m_scannedPaths.contains(cPath)) + continue; + pathsToScan.append(ScanItem(cPath)); + } + const int maxScanDepth = 5; + int progressRange = pathsToScan.size() * (1 << (2 + maxScanDepth)); + int totalWork(progressRange), workDone(0); + future.setProgressRange(0, progressRange); // update max length while iterating? + const bool libOnly = true; // FIXME remove when tested more + while (!pathsToScan.isEmpty() && !future.isCanceled()) { + ScanItem toScan = pathsToScan.last(); + pathsToScan.removeLast(); + int pathBudget = (maxScanDepth + 2 - toScan.depth); + if (!scannedPaths.contains(toScan.path)) { + QStringList importedFiles; + const Snapshot snapshot = modelManager->snapshot(); + if (!findNewQmlLibraryInPath(toScan.path, snapshot, modelManager, &importedFiles, + &scannedPaths, &newLibraries, true) + && !libOnly && snapshot.documentsInDirectory(toScan.path).isEmpty()) + importedFiles += qmlFilesInDirectory(toScan.path); + workDone += 1; + future.setProgressValue(progressRange * workDone / totalWork); + if (!importedFiles.isEmpty()) { + FutureReporter reporter(future, progressRange * pathBudget / (4 * totalWork), + progressRange * workDone / totalWork); + parseLoop(scannedPaths, newLibraries, workingCopy, importedFiles, modelManager, + language, emitDocChangedOnDisk, reporter); // run in parallel?? + importedFiles.clear(); + } + workDone += pathBudget / 4 - 1; + future.setProgressValue(progressRange * workDone / totalWork); + } else { + workDone += pathBudget / 4; + } + // always descend tree, as we might have just scanned with a smaller depth + if (toScan.depth < maxScanDepth) { + QDir dir(toScan.path); + QStringList subDirs(dir.entryList(QDir::Dirs)); + workDone += 1; + totalWork += pathBudget / 2 * subDirs.size() - pathBudget * 3 / 4 + 1; + foreach (const QString path, subDirs) + pathsToScan.append(ScanItem(dir.absoluteFilePath(path), toScan.depth + 1)); + } else { + workDone += pathBudget *3 / 4; + } + future.setProgressValue(progressRange * workDone / totalWork); + } future.setProgressValue(progressRange); } @@ -993,6 +1102,33 @@ void ModelManager::updateImportPaths() findNewLibraryImports(doc, snapshot, this, &importedFiles, &scannedPaths, &newLibraries); updateSourceFiles(importedFiles, true); + + QStringList pathToScan; + foreach (QString importPath, allImportPaths) + if (!m_scannedPaths.contains(importPath)) + pathToScan.append(importPath); + + if (pathToScan.count() > 1) { + QFuture result = QtConcurrent::run(&ModelManager::importScan, + workingCopy(), pathToScan, + this, Language::Qml, + true); + + if (m_synchronizer.futures().size() > 10) { + QList > futures = m_synchronizer.futures(); + + m_synchronizer.clearFutures(); + + foreach (const QFuture &future, futures) { + if (! (future.isFinished() || future.isCanceled())) + m_synchronizer.addFuture(future); + } + } + + m_synchronizer.addFuture(result); + + ProgressManager::addTask(result, tr("Qml import scan"), Constants::TASK_IMPORT_SCAN); + } } void ModelManager::loadPluginTypes(const QString &libraryPath, const QString &importPath, @@ -1133,6 +1269,7 @@ ViewerContext ModelManager::completeVContext(const ViewerContext &vCtx, case ViewerContext::AddAllPaths: res.paths << importPaths(); } + res.flags = ViewerContext::Complete; return res; } diff --git a/src/plugins/qmljstools/qmljsmodelmanager.h b/src/plugins/qmljstools/qmljsmodelmanager.h index 9b3111afd52..6d30d536e24 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.h +++ b/src/plugins/qmljstools/qmljsmodelmanager.h @@ -34,6 +34,7 @@ #include #include +#include #include #include @@ -135,11 +136,22 @@ protected: QFuture refreshSourceFiles(const QStringList &sourceFiles, bool emitDocumentOnDiskChanged); + static void parseLoop(QSet &scannedPaths, QSet &newLibraries, + WorkingCopy workingCopy, QStringList files, ModelManager *modelManager, + QmlJS::Language::Enum mainLanguage, bool emitDocChangedOnDisk, + Utils::function reportProgress); static void parse(QFutureInterface &future, WorkingCopy workingCopy, QStringList files, ModelManager *modelManager, + QmlJS::Language::Enum mainLanguage, bool emitDocChangedOnDisk); + static void importScan(QFutureInterface &future, + WorkingCopy workingCopy, + QStringList paths, + ModelManager *modelManager, + QmlJS::Language::Enum mainLanguage, + bool emitDocChangedOnDisk); void loadQmlTypeDescriptions(); void loadQmlTypeDescriptions(const QString &path); @@ -167,6 +179,7 @@ private: QmlJS::QmlLanguageBundles m_activeBundles; QmlJS::QmlLanguageBundles m_extendedBundles; QmlJS::ViewerContext m_vContext; + QSet m_scannedPaths; QTimer *m_updateCppQmlTypesTimer; QTimer *m_asyncResetTimer; diff --git a/src/plugins/qmljstools/qmljstoolsconstants.h b/src/plugins/qmljstools/qmljstoolsconstants.h index 4662204fe01..2a0d7644f1f 100644 --- a/src/plugins/qmljstools/qmljstoolsconstants.h +++ b/src/plugins/qmljstools/qmljstoolsconstants.h @@ -43,6 +43,7 @@ const char JS_MIMETYPE[] = "application/javascript"; const char JSON_MIMETYPE[] = "application/json"; const char TASK_INDEX[] = "QmlJSEditor.TaskIndex"; +const char TASK_IMPORT_SCAN[] = "QmlJSEditor.TaskImportScan"; const char QML_JS_CODE_STYLE_SETTINGS_ID[] = "A.Code Style"; const char QML_JS_CODE_STYLE_SETTINGS_NAME[] = QT_TRANSLATE_NOOP("QmlJSTools", "Code Style"); From 551b3ed36824457add0425c72439e41fe283f3cc Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 20 Nov 2013 00:34:58 +0100 Subject: [PATCH 10/56] Debugger: Disable theadname extraction (again) This only affects MinGW where the feature triggered QTCREATORBUG-5200 in the past. Right now the performance impact of c9c0f80 (fixing QTCREATORBUG-10826) is unclear and no time to investigate. Trading the feature for robustness seems in order. Power-users can remove the return line in the script to get it back. Change-Id: If5a30808b72969493e5f40dd0fcbafdcccec343e Reviewed-by: Eike Ziller Reviewed-by: Orgad Shaneh --- share/qtcreator/debugger/gdbbridge.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index 1c2f63473a2..e028f54e46f 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -1609,6 +1609,10 @@ class Dumper(DumperBase): return out def threadnames(self, maximalStackDepth): + # FIXME: This needs a proper implementation for MinGW, and only there. + # Linux, Mac and QNX mirror the objectName()to the underlying threads, + # so we get the names already as part of the -thread-info output. + return '[]' out = '[' oldthread = gdb.selected_thread() if oldthread: From 601951a4e837f02f63ed6a5c2e199db9d325ccc0 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Wed, 20 Nov 2013 10:18:22 +0100 Subject: [PATCH 11/56] Clean up EditorManagerPlaceHolder The fix in acca83add48df wasn't enough: One has to make sure that even ~EditorManagerPlaceholder doesn't delete EditorManager implicitly, since it's explicitly deleted in ~MainWindow. Anyway, EditorManagerPlaceHolder::current() is never used, so we can get rid of this static variable entirely and simplify the code by just checking for EditorManager::parent() in the PlaceHolder destructor. Change-Id: I3a0374d20c9f3f9d2680cf8302953a336670fc8a Reviewed-by: Eike Ziller Reviewed-by: Daniel Teske --- .../coreplugin/editormanager/editormanager.cpp | 18 +++++------------- .../coreplugin/editormanager/editormanager.h | 2 -- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 13e142d5bed..b10cf3d2b2d 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -114,8 +114,6 @@ using namespace Utils; //===================EditorManager===================== -EditorManagerPlaceHolder *EditorManagerPlaceHolder::m_current = 0; - EditorManagerPlaceHolder::EditorManagerPlaceHolder(Core::IMode *mode, QWidget *parent) : QWidget(parent), m_mode(mode) { @@ -129,16 +127,17 @@ EditorManagerPlaceHolder::EditorManagerPlaceHolder(Core::IMode *mode, QWidget *p EditorManagerPlaceHolder::~EditorManagerPlaceHolder() { - if (m_current == this) { - EditorManager::instance()->setParent(0); - EditorManager::instance()->hide(); + // EditorManager will be deleted in ~MainWindow() + EditorManager *em = EditorManager::instance(); + if (em && em->parent() == this) { + em->hide(); + em->setParent(0); } } void EditorManagerPlaceHolder::currentModeChanged(Core::IMode *mode) { if (m_mode == mode) { - m_current = this; QWidget *previousFocus = 0; if (EditorManager::instance()->focusWidget() && EditorManager::instance()->focusWidget()->hasFocus()) previousFocus = EditorManager::instance()->focusWidget(); @@ -146,16 +145,9 @@ void EditorManagerPlaceHolder::currentModeChanged(Core::IMode *mode) EditorManager::instance()->show(); if (previousFocus) previousFocus->setFocus(); - } else if (m_current == this) { - m_current = 0; } } -EditorManagerPlaceHolder* EditorManagerPlaceHolder::current() -{ - return m_current; -} - // ---------------- EditorManager namespace Core { diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h index 4b58092b414..9e554b4a46a 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.h +++ b/src/plugins/coreplugin/editormanager/editormanager.h @@ -79,12 +79,10 @@ class CORE_EXPORT EditorManagerPlaceHolder : public QWidget public: explicit EditorManagerPlaceHolder(Core::IMode *mode, QWidget *parent = 0); ~EditorManagerPlaceHolder(); - static EditorManagerPlaceHolder* current(); private slots: void currentModeChanged(Core::IMode *); private: Core::IMode *m_mode; - static EditorManagerPlaceHolder* m_current; }; class CORE_EXPORT EditorManager : public QWidget From f65f7509f2b762eafc68f588666d9e4de4e0d568 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 19 Nov 2013 13:05:42 +0100 Subject: [PATCH 12/56] FileIconProvider: Do some more caching ourselves QFileIconProvider already does some pixmap caching, but only in some cases (non-executable, non-link). Since QFileIconProvider is expensive, we want as much caching as possible. It still should be investigated why it seems to be even more expensive on OS X 10.9 in some cases though. Task-number: QTCREATORBUG-10491 Change-Id: I5a0f995eafdced47dc6da869c72a1ca016b25f63 Reviewed-by: Daniel Teske --- src/plugins/coreplugin/fileiconprovider.cpp | 23 ++++++++++++--------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/plugins/coreplugin/fileiconprovider.cpp b/src/plugins/coreplugin/fileiconprovider.cpp index 6bba67ba064..4e56cd96b9e 100644 --- a/src/plugins/coreplugin/fileiconprovider.cpp +++ b/src/plugins/coreplugin/fileiconprovider.cpp @@ -75,7 +75,7 @@ public: : m_unknownFileIcon(qApp->style()->standardIcon(QStyle::SP_FileIcon)) {} - QIcon icon(const QFileInfo &info) const; + QIcon icon(const QFileInfo &info); using QFileIconProvider::icon; void registerIconOverlayForSuffix(const QIcon &icon, const QString &suffix) @@ -113,23 +113,26 @@ QFileIconProvider *iconProvider() return instance(); } -QIcon FileIconProviderImplementation::icon(const QFileInfo &fileInfo) const +QIcon FileIconProviderImplementation::icon(const QFileInfo &fileInfo) { if (debug) qDebug() << "FileIconProvider::icon" << fileInfo.absoluteFilePath(); // Check for cached overlay icons by file suffix. - if (!m_cache.isEmpty() && !fileInfo.isDir()) { - const QString suffix = fileInfo.suffix(); - if (!suffix.isEmpty() && m_cache.contains(suffix)) { + bool isDir = fileInfo.isDir(); + QString suffix = !isDir ? fileInfo.suffix() : QString(); + if (!m_cache.isEmpty() && !isDir && !suffix.isEmpty()) { + if (m_cache.contains(suffix)) return m_cache.value(suffix); - } } // Get icon from OS. + QIcon icon; if (HostOsInfo::isWindowsHost() || HostOsInfo::isMacHost()) - return QFileIconProvider::icon(fileInfo); - - // File icons are unknown on linux systems. - return fileInfo.isDir() ? QFileIconProvider::icon(fileInfo) : m_unknownFileIcon; + icon = QFileIconProvider::icon(fileInfo); + else // File icons are unknown on linux systems. + icon = isDir ? QFileIconProvider::icon(fileInfo) : m_unknownFileIcon; + if (!isDir && !suffix.isEmpty()) + m_cache.insert(suffix, icon); + return icon; } /*! From 72db114180ee10144fec03f84afeff9a6ab8dddf Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 20 Nov 2013 13:55:01 +0100 Subject: [PATCH 13/56] Doc: update QML Profiler screenshot Change-Id: Ifc45fcb1c3953d72558899dc44fba825846a1c2b Reviewed-by: Leena Miettinen --- .../qtcreator-qml-performance-monitor.png | Bin 18422 -> 82849 bytes 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 doc/images/qtcreator-qml-performance-monitor.png diff --git a/doc/images/qtcreator-qml-performance-monitor.png b/doc/images/qtcreator-qml-performance-monitor.png old mode 100644 new mode 100755 index 6cd007d8e53555452578fc00af48b0f8793c7de1..28c2a143d4de4a5f8352f138c929212615725caa GIT binary patch literal 82849 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 z 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 MAh5 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 From 180e613e719d5c56bb910ea62f5811e5fb835e3e Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 20 Nov 2013 14:41:36 +0100 Subject: [PATCH 14/56] QmlJsTools: Fix compilation with Qt4 Change-Id: I76e067ec8223c42b480ad9d296cd3b7357831aab Reviewed-by: Friedemann Kleint --- src/plugins/qmljstools/qmljsmodelmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp index 0a65c484ece..61470f40c20 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.cpp +++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp @@ -952,7 +952,7 @@ void ModelManager::importScan(QFutureInterface &future, const bool libOnly = true; // FIXME remove when tested more while (!pathsToScan.isEmpty() && !future.isCanceled()) { ScanItem toScan = pathsToScan.last(); - pathsToScan.removeLast(); + pathsToScan.pop_back(); int pathBudget = (maxScanDepth + 2 - toScan.depth); if (!scannedPaths.contains(toScan.path)) { QStringList importedFiles; From cae38634e128d3e1f727eaf82377605e26fe342f Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 20 Nov 2013 14:29:46 +0100 Subject: [PATCH 15/56] QmlJS: Fix compilation with Qt4 Change-Id: I036f2ccf07b836ecff63a055e3204327d006c0d0 Reviewed-by: Friedemann Kleint --- src/libs/qmljs/qmljsdocument.cpp | 2 +- src/libs/qmljs/qmljsimportdependencies.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp index 1d8527f8d6b..68fb5eadd53 100644 --- a/src/libs/qmljs/qmljsdocument.cpp +++ b/src/libs/qmljs/qmljsdocument.cpp @@ -533,7 +533,7 @@ void Snapshot::insertLibraryInfo(const QString &path, const LibraryInfo &info) QStringList splitPath = path.split(QLatin1Char('/')); foreach (const ImportKey &importKey, packages) { QString requiredPath = QStringList(splitPath.mid(0, splitPath.size() - importKey.splitPath.size())) - .join(QLatin1Char('/')); + .join(QLatin1String("/")); cImport.possibleExports << Export(importKey, requiredPath, true); } foreach (const QmlDirParser::Component &component, info.components()) { diff --git a/src/libs/qmljs/qmljsimportdependencies.cpp b/src/libs/qmljs/qmljsimportdependencies.cpp index 4b9c05d7718..712442c2c3d 100644 --- a/src/libs/qmljs/qmljsimportdependencies.cpp +++ b/src/libs/qmljs/qmljsimportdependencies.cpp @@ -432,7 +432,7 @@ QString ImportKey::toString() const res = path(); break; case ImportType::Library: - res = splitPath.join(QLatin1Char('.')); + res = splitPath.join(QLatin1String(".")); break; } From 1cfdacc0c38f4159a2b286b4a2a1d52f2fe0d611 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Mon, 18 Nov 2013 14:33:34 +0100 Subject: [PATCH 16/56] QmlDesigner: Change version for Qml1Puppet to 2 Change-Id: I599598795fda265030c319f45329e1c67e6f5bfa Reviewed-by: Thomas Hartmann --- share/qtcreator/qml/qmlpuppet/qmlpuppet/qmlpuppetmain.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/qmlpuppetmain.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/qmlpuppetmain.cpp index 4f712d0f862..13ce89e792d 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/qmlpuppetmain.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/qmlpuppetmain.cpp @@ -35,6 +35,8 @@ #include #endif +#include + #include #ifdef ENABLE_QT_BREAKPAD @@ -60,11 +62,11 @@ int main(int argc, char *argv[]) QCoreApplication::setOrganizationName("QtProject"); QCoreApplication::setOrganizationDomain("qt-project.org"); QCoreApplication::setApplicationName("QmlPuppet"); - QCoreApplication::setApplicationVersion("1.1.0"); + QCoreApplication::setApplicationVersion("2.0.0"); if (application.arguments().count() == 2 && application.arguments().at(1) == "--version") { - qDebug() << QCoreApplication::applicationVersion(); + std::cout << 2; return 0; } From 40f3c3ce034f4631697af6aa58720ec599a98c24 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 20 Nov 2013 14:47:31 +0100 Subject: [PATCH 17/56] Debugger: Fix compilation with Qt4 Change-Id: I04e03d107f5c96c4dc8d78cd88da70bce932b34c Reviewed-by: hjk --- src/plugins/debugger/threadshandler.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/debugger/threadshandler.cpp b/src/plugins/debugger/threadshandler.cpp index ede8b5aee85..63b1e1375e7 100644 --- a/src/plugins/debugger/threadshandler.cpp +++ b/src/plugins/debugger/threadshandler.cpp @@ -265,7 +265,8 @@ struct Sorter const QVariant v2 = threadPart(t2, m_column); if (v1 == v2) return false; - return (v1 < v2) ^ (m_order == Qt::DescendingOrder); + // FIXME: Use correct toXXX(); + return (v1.toString() < v2.toString()) ^ (m_order == Qt::DescendingOrder); } int m_column; From 509047c8e8d7deb2f157ac45d1924c6153ed9b7d Mon Sep 17 00:00:00 2001 From: Tim Sander Date: Wed, 20 Nov 2013 13:43:34 +0100 Subject: [PATCH 18/56] baremetal: don't append executable suffix The current implementation has been tested with a wrongly configured qmake on windows. But the suffix should not be appended. Change-Id: I5f01637698a1fe2dca646eb08ed1b7bd2a1f56a7 Reviewed-by: Christian Kandeler Reviewed-by: hjk --- src/plugins/baremetal/baremetalruncontrolfactory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/baremetal/baremetalruncontrolfactory.cpp b/src/plugins/baremetal/baremetalruncontrolfactory.cpp index 3ba17b73bf1..50edf9a152a 100644 --- a/src/plugins/baremetal/baremetalruncontrolfactory.cpp +++ b/src/plugins/baremetal/baremetalruncontrolfactory.cpp @@ -89,7 +89,7 @@ DebuggerStartParameters BareMetalRunControlFactory::startParameters(const BareMe params.languages |= CppLanguage; params.processArgs = runConfig->arguments(); params.startMode = AttachToRemoteServer; - params.executable = Utils::HostOsInfo::withExecutableSuffix(runConfig->localExecutableFilePath()); + params.executable = runConfig->localExecutableFilePath(); params.remoteSetupNeeded = false; //FIXME probably start debugserver with that, how? params.displayName = runConfig->displayName(); if (const Project *project = target->project()) { From 17b63c2dc2707f19223bce2f431349b63f158960 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 20 Nov 2013 14:03:04 +0100 Subject: [PATCH 19/56] Doc: update Valgrind menu labels Change-Id: I412fa5696651a2b9dbe85d0e6fb6c762d03aa57c Reviewed-by: hjk --- doc/images/qtcreator-analyze-menu.png | Bin 13988 -> 27136 bytes .../analyze/creator-valgrind-overview.qdoc | 4 ++-- doc/src/analyze/creator-valgrind.qdoc | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) mode change 100644 => 100755 doc/images/qtcreator-analyze-menu.png diff --git a/doc/images/qtcreator-analyze-menu.png b/doc/images/qtcreator-analyze-menu.png old mode 100644 new mode 100755 index 9a95504164010b5a88d28dcefa05b2124fc30c4d..986ab48d916a7050544b7367f9666e5e69537e52 GIT binary patch literal 27136 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 MPgg&ebxsLQ09>qzvj6}9 diff --git a/doc/src/analyze/creator-valgrind-overview.qdoc b/doc/src/analyze/creator-valgrind-overview.qdoc index 820b0cb9c72..7f69b554a19 100644 --- a/doc/src/analyze/creator-valgrind-overview.qdoc +++ b/doc/src/analyze/creator-valgrind-overview.qdoc @@ -36,8 +36,8 @@ to use them from \QC. To run the Valgrind tools on a remote host over SSH, select \gui {Analyze - > Valgrind Memory Analyzer (External)} or \gui {Valgrind Function Profiler - (External)}. + > Valgrind Memory Analyzer (Remote)} or \gui {Valgrind Function Profiler + (Remote)}. To stop the currently running analyzer, select \gui {Analyze > Stop}. diff --git a/doc/src/analyze/creator-valgrind.qdoc b/doc/src/analyze/creator-valgrind.qdoc index 00e2edca209..b0272c9a3f4 100644 --- a/doc/src/analyze/creator-valgrind.qdoc +++ b/doc/src/analyze/creator-valgrind.qdoc @@ -252,8 +252,8 @@ \list 1 - \li Select \gui {Analyze > Valgrind Memory Analyzer (External)} or - \gui {Valgrind Function Profiler (External)}. + \li Select \gui {Analyze > Valgrind Memory Analyzer (Remote)} or + \gui {Valgrind Function Profiler (Remote)}. \image qtcreator-valgrind-remote-settings.png "Start Analyzer dialog" From 11807f0db2c8d5998f33fa3b9d5f83c630371f27 Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Wed, 20 Nov 2013 16:57:27 +0100 Subject: [PATCH 20/56] Polish taskbar-icon for build issues Change-Id: I5998bdabc80e59972446b1f8806ac8703ed5a729 Reviewed-by: Eike Ziller --- src/plugins/coreplugin/core.qrc | 1 + .../coreplugin/images/compile_error_taskbar.png | Bin 0 -> 618 bytes .../progressmanager/progressmanager_win.cpp | 2 +- 3 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 src/plugins/coreplugin/images/compile_error_taskbar.png diff --git a/src/plugins/coreplugin/core.qrc b/src/plugins/coreplugin/core.qrc index d54182e37b8..6fd7523c22b 100644 --- a/src/plugins/coreplugin/core.qrc +++ b/src/plugins/coreplugin/core.qrc @@ -3,6 +3,7 @@ images/clean_pane_small.png images/clear.png images/closebutton.png + images/compile_error_taskbar.png images/dir.png images/editcopy.png images/editcut.png diff --git a/src/plugins/coreplugin/images/compile_error_taskbar.png b/src/plugins/coreplugin/images/compile_error_taskbar.png new file mode 100644 index 0000000000000000000000000000000000000000..71dd4ede4252aee11066fc6eb12552bd027bc193 GIT binary patch literal 618 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>l?&siaqtu?-swWe15RrY^7e@VP5fh9Ujl+Z{)1nwUv>- zQD#HKIp&gwli1h4b4s`5m?6T!Y{7cjPoikSuCFrh4)Z)>uwgsjZhl&6?o@>Y5!arw za?id#k3}67`TX1Co~Nxo`s2ffQucLk4~RQ3-e@^{Ug?)M#~14tj4%FOn)L4Xzcu33 z&KKr8E|~A~MRgDRIcWyvOOe^zCEW!r7p&v%`#hZ?>d71z!R)tY^G^J-X;^hiq=UU# z^48~b8Y^1WP9_{E*%(`VIxE8pH%IYGACCyt;&>+M!*DrgQaFFD{NvvWPIAXrY_&M6 zmZ@qUeC7W-`L+ug1x%p_eCF#ouT^E;sW?SetOverlayIcon(winId, NULL, NULL); } else { - QPixmap pix = QPixmap(QLatin1String(":/projectexplorer/images/compile_error.png")); + QPixmap pix = QPixmap(QLatin1String(":/core/images/compile_error_taskbar.png")); QPainter p(&pix); p.setPen(Qt::white); QFont font = p.font(); From 21dd4c8b1b0e0e8b5d26d8adaf4a4714cab547b6 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 20 Nov 2013 16:00:35 +0100 Subject: [PATCH 21/56] QmlJS: Simplify code, fix MSVC-warning. qmljsviewercontext.cpp:80: warning: C4715: 'QmlJS::ViewerContext::languageIsCompatible': : not all control paths return a value. Change-Id: I22279ef7a43873b9c8f3d73d3826b59d5abaa390 Reviewed-by: Fawzi Mohamed --- src/libs/qmljs/qmljsviewercontext.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/libs/qmljs/qmljsviewercontext.cpp b/src/libs/qmljs/qmljsviewercontext.cpp index 5391a8bc87e..06f5dd1806f 100644 --- a/src/libs/qmljs/qmljsviewercontext.cpp +++ b/src/libs/qmljs/qmljsviewercontext.cpp @@ -58,25 +58,22 @@ bool ViewerContext::languageIsCompatible(Language::Enum l) const { switch (language) { case Language::JavaScript: - return l == Language::JavaScript; case Language::Json: - return l == Language::Json; + case Language::QmlProject: + case Language::QmlQbs: + case Language::QmlTypeInfo: + return language == l; case Language::Qml: return l == Language::Qml || l == Language::QmlQtQuick1 || l == Language::QmlQtQuick2 || Language::JavaScript; - case Language::QmlProject: - return l == Language::QmlProject; - case Language::QmlQbs: - return l == Language::QmlQbs; case Language::QmlQtQuick1: return l == Language::Qml || l == Language::QmlQtQuick1 || Language::JavaScript; case Language::QmlQtQuick2: return l == Language::Qml || l == Language::QmlQtQuick2 || Language::JavaScript; - case Language::QmlTypeInfo: - return l == Language::QmlTypeInfo; case Language::Unknown: // ? - return true; + break; } + return true; } } // namespace QmlJS From 939b0cae13eb72aaf6c606173a68ea77f3ecdfd2 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 20 Nov 2013 17:14:05 +0100 Subject: [PATCH 22/56] Doc: update Callgrind screenshot Change-Id: I3ae1e2c3c4d299015068a978c99a24682162b30f Reviewed-by: Leena Miettinen --- doc/images/qtcreator-valgrind-callgrind.png | Bin 30989 -> 87032 bytes 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 doc/images/qtcreator-valgrind-callgrind.png diff --git a/doc/images/qtcreator-valgrind-callgrind.png b/doc/images/qtcreator-valgrind-callgrind.png old mode 100644 new mode 100755 index 756c86e70d8baef278c0a94202d82752fce54859..e29d25202708925e833591248bd394c8c400dc4d GIT binary patch literal 87032 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 P00p$CtDnm{r-UW|_(&D% literal 30989 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 Date: Mon, 18 Nov 2013 17:15:05 +0100 Subject: [PATCH 23/56] Qnx: Handle bbnk-env file extension when adding manual target MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTCREATORBUG-10745 Change-Id: Ibefc228699ee339adccef5126cc167575be3ba5e Reviewed-by: David Kaspar Reviewed-by: Tobias Nätterlund Reviewed-by: Nicolas Arnaud-Cormos --- src/plugins/qnx/blackberryinstallwizardpages.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/plugins/qnx/blackberryinstallwizardpages.cpp b/src/plugins/qnx/blackberryinstallwizardpages.cpp index b854475ff52..b2bd3f5dc0d 100644 --- a/src/plugins/qnx/blackberryinstallwizardpages.cpp +++ b/src/plugins/qnx/blackberryinstallwizardpages.cpp @@ -64,10 +64,13 @@ NdkPathChooser::NdkPathChooser(Mode mode, QWidget *parent) : Utils::PathChooser(parent) , m_mode(mode) { - if (m_mode == NdkPathChooser::InstallMode) + if (m_mode == NdkPathChooser::InstallMode) { setExpectedKind(Utils::PathChooser::Directory); - else + } else { setExpectedKind(Utils::PathChooser::File); + setPromptDialogFilter(Utils::HostOsInfo::isWindowsHost() ? QLatin1String("*.bat") : + QLatin1String("*.sh")); + } } bool NdkPathChooser::validatePath(const QString &path, QString *errorMessage) @@ -80,7 +83,10 @@ bool NdkPathChooser::validatePath(const QString &path, QString *errorMessage) return !(QnxUtils::sdkInstallerPath(path).isEmpty()); QFileInfo fi(path); - return (fi.suffix() == QLatin1String("sh") || fi.suffix() == QLatin1String("bat")); + if (Utils::HostOsInfo::isWindowsHost()) + return fi.suffix() == QLatin1String("bat"); + + return fi.suffix() == QLatin1String("sh"); } //------------------------------------------------------------------ From 7e8f2687fc1d88342a1a63fc39397c9dcef7a135 Mon Sep 17 00:00:00 2001 From: El Mehdi Fekari Date: Mon, 11 Nov 2013 15:44:41 +0100 Subject: [PATCH 24/56] Qnx: Fix displayed information for BlackBerry configs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update the target's information list when selecting a manual configuration. * Fix the target's name on Windows as QNX_TARGET value uses Unix-like separator. Task-number: QTCREATORBUG-10600 Change-Id: If1cd5ec2457c9f59f0290a74dd71fa4ffd0d73df Reviewed-by: David Kaspar Reviewed-by: Tobias Nätterlund Reviewed-by: Nicolas Arnaud-Cormos --- src/plugins/qnx/blackberryconfiguration.cpp | 23 +++++++++++-------- src/plugins/qnx/blackberryconfiguration.h | 2 ++ .../qnx/blackberryndksettingswidget.cpp | 21 +++++++++-------- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/plugins/qnx/blackberryconfiguration.cpp b/src/plugins/qnx/blackberryconfiguration.cpp index 397c82ab942..9125b07a62b 100644 --- a/src/plugins/qnx/blackberryconfiguration.cpp +++ b/src/plugins/qnx/blackberryconfiguration.cpp @@ -73,27 +73,27 @@ BlackBerryConfiguration::BlackBerryConfiguration(const FileName &ndkEnvFile, boo m_qnxEnv = QnxUtils::qnxEnvironmentFromNdkFile(m_ndkEnvFile.toString()); QString ndkTarget; - QString qnxHost; foreach (const Utils::EnvironmentItem &item, m_qnxEnv) { if (item.name == QLatin1String("QNX_TARGET")) ndkTarget = item.value; else if (item.name == QLatin1String("QNX_HOST")) - qnxHost = item.value; + m_qnxHost = item.value; } - QString sep = QString::fromLatin1("%1qnx6").arg(QDir::separator()); - m_targetName = ndkTarget.split(sep).first().split(QDir::separator()).last(); + // The QNX_TARGET value is using Unix-like separator on all platforms. + QString sep = QString::fromLatin1("/qnx6"); + m_targetName = ndkTarget.split(sep).first().split(QLatin1Char('/')).last(); if (QDir(ndkTarget).exists()) m_sysRoot = FileName::fromString(ndkTarget); - FileName qmake4Path = QnxUtils::executableWithExtension(FileName::fromString(qnxHost + QLatin1String("/usr/bin/qmake"))); - FileName qmake5Path = QnxUtils::executableWithExtension(FileName::fromString(qnxHost + QLatin1String("/usr/bin/qt5/qmake"))); - FileName gccPath = QnxUtils::executableWithExtension(FileName::fromString(qnxHost + QLatin1String("/usr/bin/qcc"))); - FileName deviceGdbPath = QnxUtils::executableWithExtension(FileName::fromString(qnxHost + QLatin1String("/usr/bin/ntoarm-gdb"))); - FileName simulatorGdbPath = QnxUtils::executableWithExtension(FileName::fromString(qnxHost + QLatin1String("/usr/bin/ntox86-gdb"))); + FileName qmake4Path = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/qmake"))); + FileName qmake5Path = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/qt5/qmake"))); + FileName gccPath = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/qcc"))); + FileName deviceGdbPath = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/ntoarm-gdb"))); + FileName simulatorGdbPath = QnxUtils::executableWithExtension(FileName::fromString(m_qnxHost + QLatin1String("/usr/bin/ntox86-gdb"))); if (qmake4Path.toFileInfo().exists()) m_qmake4BinaryFile = qmake4Path; @@ -126,6 +126,11 @@ QString BlackBerryConfiguration::targetName() const return m_targetName; } +QString BlackBerryConfiguration::qnxHost() const +{ + return m_qnxHost; +} + bool BlackBerryConfiguration::isAutoDetected() const { return m_isAutoDetected; diff --git a/src/plugins/qnx/blackberryconfiguration.h b/src/plugins/qnx/blackberryconfiguration.h index 51473a5b0aa..1b31d186b31 100644 --- a/src/plugins/qnx/blackberryconfiguration.h +++ b/src/plugins/qnx/blackberryconfiguration.h @@ -66,6 +66,7 @@ public: QString ndkPath() const; QString displayName() const; QString targetName() const; + QString qnxHost() const; bool isAutoDetected() const; bool isActive() const; bool isValid() const; @@ -81,6 +82,7 @@ public: private: QString m_displayName; QString m_targetName; + QString m_qnxHost; bool m_isAutoDetected; Utils::FileName m_ndkEnvFile; Utils::FileName m_qmake4BinaryFile; diff --git a/src/plugins/qnx/blackberryndksettingswidget.cpp b/src/plugins/qnx/blackberryndksettingswidget.cpp index 9ca62b4aa68..a1982539e7e 100644 --- a/src/plugins/qnx/blackberryndksettingswidget.cpp +++ b/src/plugins/qnx/blackberryndksettingswidget.cpp @@ -144,15 +144,18 @@ void BlackBerryNDKSettingsWidget::updateInfoTable(QTreeWidgetItem* currentItem) if (!config) return; - foreach (const NdkInstallInformation &ndkInfo, QnxUtils::installedNdks()) - { - if (ndkInfo.name == config->displayName()) { - m_ui->baseNameLabel->setText(ndkInfo.name); - m_ui->ndkPathLabel->setText(ndkInfo.path); - m_ui->versionLabel->setText(ndkInfo.version); - m_ui->hostLabel->setText(ndkInfo.host); - m_ui->targetLabel->setText(ndkInfo.target); - break; + m_ui->baseNameLabel->setText(config->displayName()); + m_ui->ndkPathLabel->setText(QDir::toNativeSeparators(config->ndkPath())); + m_ui->hostLabel->setText(QDir::toNativeSeparators(config->qnxHost())); + m_ui->targetLabel->setText(QDir::toNativeSeparators(config->sysRoot().toString())); + m_ui->versionLabel->clear(); + // TODO: Add a versionNumber attribute for the BlackBerryConfiguration class + if (config->isAutoDetected()) { + foreach (const NdkInstallInformation &ndkInfo, QnxUtils::installedNdks()) { + if (ndkInfo.name == config->displayName()) { + m_ui->versionLabel->setText(ndkInfo.version); + break; + } } } From 5e1d6fcfe8b41167da1e4c7f486d14b7dc2d93fe Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Wed, 20 Nov 2013 15:51:42 +0100 Subject: [PATCH 25/56] Android Settings: Fix crash on clicking remove avd twice Task-number: QTCREATORBUG-10848 Change-Id: Iea0a815530f8a07c07f4b1562fc7189aadc85ab8 Reviewed-by: BogDan Vatra --- src/plugins/android/androidsettingswidget.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp index fc0a01c22a1..e5338944219 100644 --- a/src/plugins/android/androidsettingswidget.cpp +++ b/src/plugins/android/androidsettingswidget.cpp @@ -404,12 +404,14 @@ void AndroidSettingsWidget::addAVD() { AndroidConfigurations::instance().createAVD(); m_AVDModel.setAvdList(AndroidConfigurations::instance().androidVirtualDevices()); + avdActivated(m_ui->AVDTableView->currentIndex()); } void AndroidSettingsWidget::removeAVD() { AndroidConfigurations::instance().removeAVD(m_AVDModel.avdName(m_ui->AVDTableView->currentIndex())); m_AVDModel.setAvdList(AndroidConfigurations::instance().androidVirtualDevices()); + avdActivated(m_ui->AVDTableView->currentIndex()); } void AndroidSettingsWidget::startAVD() From 1f837610facef06c9e835f0421da86113e948069 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 20 Nov 2013 17:09:11 +0100 Subject: [PATCH 26/56] Doc: new Memcheck options Update screenshots. Change-Id: I45e0404e9213be3bae526607d55453cf53d8ea80 Reviewed-by: hjk --- doc/images/analyzer-issues.png | Bin 18296 -> 75473 bytes .../qtcreator-valgrind-memcheck-options.png | Bin 4070 -> 28803 bytes doc/src/analyze/creator-valgrind.qdoc | 19 ++++++++++++++++++ 3 files changed, 19 insertions(+) mode change 100644 => 100755 doc/images/analyzer-issues.png mode change 100644 => 100755 doc/images/qtcreator-valgrind-memcheck-options.png diff --git a/doc/images/analyzer-issues.png b/doc/images/analyzer-issues.png old mode 100644 new mode 100755 index c60f86607c66e1118c6fa7c263512aa7a2bb9844..7bcaeeecf650c979dcd000a8d086ef2337f44bfb GIT binary patch literal 75473 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∋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 Ci?(+F literal 18296 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 Bokaiu diff --git a/doc/images/qtcreator-valgrind-memcheck-options.png b/doc/images/qtcreator-valgrind-memcheck-options.png old mode 100644 new mode 100755 index baca54ecf65c020eb2f83eae00e8ac01e3a3d8f6..a102b61367a80c704bb4ed3f16796064226b7abe GIT binary patch literal 28803 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 literal 4070 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 diff --git a/doc/src/analyze/creator-valgrind.qdoc b/doc/src/analyze/creator-valgrind.qdoc index b0272c9a3f4..7d00ae97922 100644 --- a/doc/src/analyze/creator-valgrind.qdoc +++ b/doc/src/analyze/creator-valgrind.qdoc @@ -97,6 +97,25 @@ uninitialized memory} check box is selected by default. You can deselect it to make Memcheck run faster. + Memcheck searches for memory leaks when the client application finishes. To + view the amount of leaks that occurred, select \gui {Summary Only} in the + \gui {Check for leaks on finish} field. To also view details of each leak, + select \gui Full. + + \section2 Showing Reachable and Indirectly Lost Blocks + + \e Reachable blocks are blocks that are pointed at by a pointer or chain + of pointers and that might have been freed before the application exited. + \e {Indirectly lost} blocks are considered lost because all the blocks that + point to them are themselves lost. For example, all the children of a lost + root node are indirectly lost. + + By default, Memcheck does not report reachable and indirectly lost blocks. + To have them reported, select the \gui {Show reachable and indirectly lost + blocks}. + + \section2 Suppressing Errors + Memcheck detects numerous problems in the system libraries, such as the C library, which come pre-installed with your OS. As you cannot easily fix them, you want to suppress them. Valgrind reads a list of errors to suppress From 7a3ff86163dacff2fc0196bf6746b85c462d5993 Mon Sep 17 00:00:00 2001 From: Knut Petter Svendsen Date: Thu, 21 Nov 2013 09:49:19 +0100 Subject: [PATCH 27/56] ClearCase: Fix: File operations in already checked out dirs cleartool reports errors to stdErr not stdOut. Change-Id: Ice47e40f56157d52f8e4f73ba6ed8d87ad39f3c4 Reviewed-by: Orgad Shaneh --- src/plugins/clearcase/clearcaseplugin.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp index 4775f2e8764..73d2cfe59d0 100644 --- a/src/plugins/clearcase/clearcaseplugin.cpp +++ b/src/plugins/clearcase/clearcaseplugin.cpp @@ -1526,7 +1526,7 @@ bool ClearCasePlugin::vcsOpen(const QString &workingDir, const QString &fileName QFile::rename(absPath + QLatin1String(".hijack"), absPath); } - if ((!response.error || response.stdOut.contains(QLatin1String("already checked out"))) + if ((!response.error || response.stdErr.contains(QLatin1String("already checked out"))) && !m_settings.disableIndexer) { setStatus(absPath, FileStatus::CheckedOut); } @@ -1658,7 +1658,7 @@ bool ClearCasePlugin::ccFileOp(const QString &workingDir, const QString &title, runCleartool(workingDir, args, m_settings.timeOutMS(), ShowStdOutInLogWindow | FullySynchronously); if (coResponse.error) { - if (coResponse.stdOut.contains(QLatin1String("already checked out"))) + if (coResponse.stdErr.contains(QLatin1String("already checked out"))) noCheckout = true; else return false; From 149242ee6f828b54524226852fc798a2ee5de9a9 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Tue, 19 Nov 2013 19:53:48 +0200 Subject: [PATCH 28/56] CppEditor: Make doxygen tests data-driven Change-Id: I7b859a7304cb2a6e19eabf114345b31fe11d98b1 Reviewed-by: Nikolai Kosjar --- src/plugins/cppeditor/cppdoxygen_test.cpp | 141 +++++++--------------- src/plugins/cppeditor/cppeditorplugin.h | 12 +- 2 files changed, 46 insertions(+), 107 deletions(-) diff --git a/src/plugins/cppeditor/cppdoxygen_test.cpp b/src/plugins/cppeditor/cppdoxygen_test.cpp index 8feffc6579a..56a75178ff7 100644 --- a/src/plugins/cppeditor/cppdoxygen_test.cpp +++ b/src/plugins/cppeditor/cppdoxygen_test.cpp @@ -51,6 +51,9 @@ using namespace CPlusPlus; using namespace CppEditor::Internal; namespace { + +typedef QByteArray _; + /** * Encapsulates the whole process of setting up an editor, * pressing ENTER and checking the result. @@ -140,205 +143,149 @@ void TestCase::run(const QByteArray &expected, int undoCount) } } // anonymous namespace -void CppEditorPlugin::test_doxygen_comments_qt_style() +void CppEditorPlugin::test_doxygen_comments_data() { - const QByteArray given = + QTest::addColumn("given"); + QTest::addColumn("expected"); + + QTest::newRow("qt_style") << _( "bool preventFolding;\n" "/*!|\n" "int a;\n" - ; - const QByteArray expected = + ) << _( "bool preventFolding;\n" "/*!\n" " * \\brief a\n" " */\n" "int a;\n" - ; + ); - TestCase data(given); - data.run(expected); -} - -void CppEditorPlugin::test_doxygen_comments_qt_style_continuation() -{ - const QByteArray given = + QTest::newRow("qt_style_continuation") << _( "bool preventFolding;\n" "/*!\n" " * \\brief a|\n" " */\n" "int a;\n" - ; - const QByteArray expected = + ) << _( "bool preventFolding;\n" "/*!\n" " * \\brief a\n" " *\n" " */\n" "int a;\n" - ; + ); - TestCase data(given); - data.run(expected); -} - -void CppEditorPlugin::test_doxygen_comments_java_style() -{ - const QByteArray given = + QTest::newRow("java_style") << _( "bool preventFolding;\n" "/**|\n" "int a;\n" - ; - const QByteArray expected = + ) << _( "bool preventFolding;\n" "/**\n" " * @brief a\n" " */\n" "int a;\n" - ; + ); - TestCase data(given); - data.run(expected); -} - -void CppEditorPlugin::test_doxygen_comments_java_style_continuation() -{ - const QByteArray given = + QTest::newRow("java_style_continuation") << _( "bool preventFolding;\n" "/**\n" " * @brief a|\n" " */\n" "int a;\n" - ; - const QByteArray expected = + ) << _( "bool preventFolding;\n" "/**\n" " * @brief a\n" " *\n" " */\n" "int a;\n" - ; + ); - TestCase data(given); - data.run(expected); -} - -void CppEditorPlugin::test_doxygen_comments_cpp_styleA() -{ - const QByteArray given = + QTest::newRow("cpp_styleA") << _( "bool preventFolding;\n" "///|\n" "int a;\n" - ; - - const QByteArray expected = + ) << _( "bool preventFolding;\n" "///\n" "/// \\brief a\n" "///\n" "int a;\n" - ; - TestCase data(given); - data.run(expected); -} + ); -void CppEditorPlugin::test_doxygen_comments_cpp_styleB() -{ - const QByteArray given = + QTest::newRow("cpp_styleB") << _( "bool preventFolding;\n" "//!|\n" "int a;\n" - ; - - const QByteArray expected = + ) << _( "bool preventFolding;\n" "//!\n" "//! \\brief a\n" "//!\n" "int a;\n" - ; - TestCase data(given); - data.run(expected); -} + ); -void CppEditorPlugin::test_doxygen_comments_cpp_styleA_continuation() -{ - const QByteArray given = + QTest::newRow("cpp_styleA_continuation") << _( "bool preventFolding;\n" "///\n" "/// \\brief a|\n" "///\n" "int a;\n" - ; - const QByteArray expected = + ) << _( "bool preventFolding;\n" "///\n" "/// \\brief a\n" "///\n" "///\n" "int a;\n" - ; + ); - TestCase data(given); - data.run(expected); -} - -/// test cpp style doxygen comment when inside a indented scope -void CppEditorPlugin::test_doxygen_comments_cpp_styleA_indented() -{ - const QByteArray given = + /// test cpp style doxygen comment when inside a indented scope + QTest::newRow("cpp_styleA_indented") << _( " bool preventFolding;\n" " ///|\n" " int a;\n" - ; - - const QByteArray expected = + ) << _( " bool preventFolding;\n" " ///\n" " /// \\brief a\n" " ///\n" " int a;\n" - ; - TestCase data(given); - data.run(expected); -} + ); -/// test cpp style doxygen comment continuation when inside a indented scope -void CppEditorPlugin::test_doxygen_comments_cpp_styleA_indented_continuation() -{ - const QByteArray given = + /// test cpp style doxygen comment continuation when inside a indented scope + QTest::newRow("cpp_styleA_indented_continuation") << _( " bool preventFolding;\n" " ///\n" " /// \\brief a|\n" " ///\n" " int a;\n" - ; - const QByteArray expected = + ) << _( " bool preventFolding;\n" " ///\n" " /// \\brief a\n" " ///\n" " ///\n" " int a;\n" - ; + ); - TestCase data(given); - data.run(expected); -} - -void CppEditorPlugin::test_doxygen_comments_cpp_styleA_corner_case() -{ - const QByteArray given = + QTest::newRow("cpp_styleA_corner_case") << _( "bool preventFolding;\n" "///\n" "void d(); ///|\n" - ; - const QByteArray expected = + ) << _( "bool preventFolding;\n" "///\n" "void d(); ///\n" "\n" - ; + ); +} +void CppEditorPlugin::test_doxygen_comments() +{ + QFETCH(QByteArray, given); + QFETCH(QByteArray, expected); TestCase data(given); data.run(expected); } diff --git a/src/plugins/cppeditor/cppeditorplugin.h b/src/plugins/cppeditor/cppeditorplugin.h index 93d574c6825..b5b110feee7 100644 --- a/src/plugins/cppeditor/cppeditorplugin.h +++ b/src/plugins/cppeditor/cppeditorplugin.h @@ -117,16 +117,8 @@ private slots: void test_FollowSymbolUnderCursor_virtualFunctionCall(); void test_FollowSymbolUnderCursor_virtualFunctionCall_multipleDocuments(); - void test_doxygen_comments_qt_style(); - void test_doxygen_comments_qt_style_continuation(); - void test_doxygen_comments_java_style(); - void test_doxygen_comments_java_style_continuation(); - void test_doxygen_comments_cpp_styleA(); - void test_doxygen_comments_cpp_styleB(); - void test_doxygen_comments_cpp_styleA_indented(); - void test_doxygen_comments_cpp_styleA_continuation(); - void test_doxygen_comments_cpp_styleA_indented_continuation(); - void test_doxygen_comments_cpp_styleA_corner_case(); + void test_doxygen_comments_data(); + void test_doxygen_comments(); void test_quickfix_CompleteSwitchCaseStatement_basic1(); void test_quickfix_CompleteSwitchCaseStatement_basic2(); From 2e1a2138b0a9b6a8dc08c54e0036abcdac00c94c Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 21 Nov 2013 10:46:40 +0100 Subject: [PATCH 29/56] Doc: deploying CMake Projects to embedded Linux devices Change-Id: Ia281f0601886abb60a46359966c4f16bb48617f4 Reviewed-by: Oleksii Serdiuk Reviewed-by: Daniel Teske --- doc/src/projects/creator-projects-cmake.qdoc | 63 ++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/doc/src/projects/creator-projects-cmake.qdoc b/doc/src/projects/creator-projects-cmake.qdoc index 54638f942a8..8443334240b 100644 --- a/doc/src/projects/creator-projects-cmake.qdoc +++ b/doc/src/projects/creator-projects-cmake.qdoc @@ -110,6 +110,69 @@ For more information about known issues for the current version, see \l{Known Issues}. + \section1 Deploying CMake Projects to Embedded Linux Devices + + \QC cannot extract files to be installed from a CMake project, and + therefore, only executable targets are automatically added to deployment + files. You must specify all other files in the \c QtCreatorDeployment.txt + file that you create and place in the root directory of the CMake project. + + Use the following syntax in the file: + + \code + + : + ... + : + \endcode + + Where: + + \list + + \li \c{} is the (absolute) path prefix to where files + are copied on the remote machine. + + \li \c{} is the file path relative to the CMake + project root. No directories or wildcards are allowed in this + value. + + \li \c{} is the destination directory path + relative to \c{deployment/prefix}. + + \endlist + + To automate the creation of \c QtCreatorDeployment.txt file: + + \list 1 + + \li Define the following macros in the top level \c CMakeLists.txt file: + + \code + file(WRITE "${CMAKE_SOURCE_DIR}/QtCreatorDeployment.txt" "\n") + + macro(add_deployment_file SRC DEST) + file(RELATIVE_PATH path ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) + file(APPEND "${CMAKE_SOURCE_DIR}/QtCreatorDeployment.txt" "${path}/${SRC}:${DEST}\n") + endmacro() + + macro(add_deployment_directory SRC DEST) + file(GLOB_RECURSE files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${SRC}/*") + foreach(filename ${files}) + get_filename_component(path ${filename} PATH) + add_deployment_file("${filename}" "${DEST}/${path}") + endforeach(filename) + endmacro() + \endcode + + \li Use \c {add_deployment_file()} to add files and + \c {add_deployment_directory()} to add directories + (including subdirectories) to the \c QtCreatorDeployment.txt file. + + \li Re-run \c cmake after you add or remove files using the macros. + + \endlist + \section1 Adding External Libraries to CMake Projects Through external libraries, \QC can support code completion and syntax From 659b998738d73445568433af50a9ebbfac18d40d Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 21 Nov 2013 11:30:42 +0100 Subject: [PATCH 30/56] Doc: write CDB in all caps Change-Id: Ic900ee39982e3b190920a65696e69447458e6660 Reviewed-by: hjk --- doc/src/debugger/creator-debugger.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/debugger/creator-debugger.qdoc b/doc/src/debugger/creator-debugger.qdoc index e5b58c126cd..fcd31d10bf3 100644 --- a/doc/src/debugger/creator-debugger.qdoc +++ b/doc/src/debugger/creator-debugger.qdoc @@ -901,7 +901,7 @@ \li There is no GDB to communicate with MSVC compiled applications on Windows. So information can be displayed nicely only in a limited - fashion by using a cdb extension DLL. + fashion by using a CDB extension DLL. \endlist From 1c74480e9f4cd3e9c78143914ae7501bbad6bba7 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 21 Nov 2013 11:32:25 +0100 Subject: [PATCH 31/56] Doc: use QDoc commands correctly in Debugging Helpers Use \gui only for text that appears in the Qt Creator UI. Use \c for code. Change-Id: I263d7a6dae5ef77469c561b40847157b833e2016 Reviewed-by: hjk --- doc/src/debugger/creator-debugger.qdoc | 46 +++++++++++++------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/doc/src/debugger/creator-debugger.qdoc b/doc/src/debugger/creator-debugger.qdoc index fcd31d10bf3..09f84364577 100644 --- a/doc/src/debugger/creator-debugger.qdoc +++ b/doc/src/debugger/creator-debugger.qdoc @@ -986,13 +986,13 @@ ]}" \endcode - The value of the \gui{iname} field is the internal name of the object, + The value of the \c iname field is the internal name of the object, constituting a dot-separated list of identifiers, corresponding to the position of the object's representation in the view. If it is not present, is it generated by concatenating the parent object's iname, a dot, and a sequential number. - The value of the\gui{name} field is displayed in the \gui{name} column + The value of the \c name field is displayed in the \gui{Name} column of the view. If it is not specified, a simple number in brackets is used instead. @@ -1003,44 +1003,44 @@ enums, known and unknown structs as well as some convenience functions to handle common situations. - The member functions of the \gui{Dumper} class are the following: + The member functions of the \c Dumper class are the following: \list - \li \gui{__init__(self)} - Initializes the output to an empty string and + \li \c{__init__(self)} - Initializes the output to an empty string and empties the child stack. This should not be used in user code. - \li \gui{put(self, value)} - Low level function to directly append to the + \li \c{put(self, value)} - Low level function to directly append to the output string. That is also the fastest way to append output. - \li \gui{putField(self, name, value)} - Appends a name='value' field. + \li \c{putField(self, name, value)} - Appends a \c{name='value'} field. - \li \gui{childRange(self)} - Returns the range of children specified in + \li \c{childRange(self)} - Returns the range of children specified in the current \c Children scope. - \li \gui{putItemCount(self, count)} - Appends a field + \li \c{putItemCount(self, count)} - Appends a field \c {value='<%d items'} to the output. - \li \gui{putEllipsis(self)} - Appends fields + \li \c{putEllipsis(self)} - Appends fields \c {'{name="",value="",type="",numchild="0"}'}. This is automatically done by \c endChildren if the number of children to print is smaller than the number of actual children. - \li \gui{putName(self, name)} - Appends a \c {name=''} field. + \li \c{putName(self, name)} - Appends a \c {name=''} field. - \li \gui{putType(self, type, priority=0)} - Appends a field \c {type=''} + \li \c{putType(self, type, priority=0)} - Appends a field \c {type=''} unless the \a type coincides with the parent's default child type or \c putType was already called for the current item with a higher value of \c priority. - \li \gui{putBetterType(self, type)} - Overrides the last recorded + \li \c{putBetterType(self, type)} - Overrides the last recorded \c type. - \li \gui{putNumChild(self, numchild)} - Appends a field \c {numchild=''} + \li \c{putNumChild(self, numchild)} - Appends a field \c {numchild=''} unless the \c numchild coincides with the parent's default child numchild value. - \li \gui{putValue(self, value, encoding = None)} - Append a file \c {value=''}, + \li \c{putValue(self, value, encoding = None)} - Append a file \c {value=''}, optionally followed by a field \c {valueencoding=''}. The \c value needs to be convertible to a string entirely consisting of alphanumerical values. The \c encoding parameter can be used to @@ -1072,16 +1072,16 @@ double quotes are added. \endlist - \li \gui{putStringValue(self, value)} - Encodes a QString and calls + \li \c{putStringValue(self, value)} - Encodes a QString and calls \c putValue with the correct \c encoding setting. - \li \gui{putByteArrayValue(self, value)} - Encodes a QByteArray and calls + \li \c{putByteArrayValue(self, value)} - Encodes a QByteArray and calls \c putValue with the correct \c encoding setting. - \li \gui{isExpanded()} - Checks whether the current item + \li \c{isExpanded()} - Checks whether the current item is expanded in the view. - \li \gui{putIntItem(self, name, value)} - Equivalent to: + \li \c{putIntItem(self, name, value)} - Equivalent to: \code with SubItem(self, name): self.putValue(value) @@ -1090,7 +1090,7 @@ self.putNumChild(0) \endcode - \li \gui{putBoolItem(self, name, value)} - Equivalent to: + \li \c{putBoolItem(self, name, value)} - Equivalent to: \code with SubItem(self, name): self.putValue(value) @@ -1098,7 +1098,7 @@ self.putNumChild(0) \endcode - \li \gui{putCallItem(self, name, value, func, *args)} - + \li \c{putCallItem(self, name, value, func, *args)} - Uses GDB to call the function \c func on the value specified by \a {value} and output the resulting item. Use \c{putCallItem} only if there is no other way to access the data. @@ -1107,12 +1107,12 @@ and have the potential to change the state of the debugged program. - \li \gui{putItem(self, value)} - The "master function", handling + \li \c{putItem(self, value)} - The "master function", handling basic types, references, pointers and enums directly, iterates over base classes and class members of compound types and calls \c qdump__* functions whenever appropriate. - \li \gui{putSubItem(self, component, value)} - Equivalent to: + \li \c{putSubItem(self, component, value)} - Equivalent to: \code with SubItem(self, component): self.putItem(value) @@ -1135,7 +1135,7 @@ use \c Children and \c SubItem \e{Context Managers} to create the nested items. - The \c Children constructor \gui{__init__(self, dumper, numChild = 1, + The \c Children constructor \c{__init__(self, dumper, numChild = 1, childType = None, childNumChild = None, maxNumChild = None, addrBase = None, addrStep = None)} uses one mandatory argument and several optional arguments. The mandatory argument refers to the current \c Dumper From 0ed2f4e5a21d6f1b1cef23f4b4644765f4d46f95 Mon Sep 17 00:00:00 2001 From: hjk Date: Sun, 17 Nov 2013 21:36:37 +0100 Subject: [PATCH 32/56] Debugger: Mark views as inactive while retrieving large backtraces Task-number: QTCREATORBUG-10403 Change-Id: Iebd34dc20d98cc6b79b3a492a2556d1bc62066fe Reviewed-by: Robert Loehning --- src/plugins/debugger/gdb/gdbengine.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index ae83e0801f1..2bab82cded0 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -3603,6 +3603,7 @@ void GdbEngine::handleStackSelectThread(const GdbResponse &) void GdbEngine::reloadFullStack() { PENDING_DEBUG("RELOAD FULL STACK"); + resetLocation(); postCommand("-stack-list-frames", Discardable, CB(handleStackListFrames), QVariant::fromValue(StackCookie(true, true))); } From d91d552c822554c4ea6f0a24e13d4a1b6ff1de6f Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Thu, 21 Nov 2013 11:15:26 +0100 Subject: [PATCH 33/56] CppEditor: Append extra ' ' in comment continuations ...for c style multiline comments and doxygens "///" and "//!". Task-number: QTCREATORBUG-10856 Change-Id: I84a4f95ba9e676991484e45bb0f64be996ac3be9 Reviewed-by: Ulf Hermann Reviewed-by: David Schulz --- src/plugins/cppeditor/cppdoxygen_test.cpp | 8 ++++---- src/plugins/cppeditor/cppeditor.cpp | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/plugins/cppeditor/cppdoxygen_test.cpp b/src/plugins/cppeditor/cppdoxygen_test.cpp index 56a75178ff7..ab8a9479406 100644 --- a/src/plugins/cppeditor/cppdoxygen_test.cpp +++ b/src/plugins/cppeditor/cppdoxygen_test.cpp @@ -170,7 +170,7 @@ void CppEditorPlugin::test_doxygen_comments_data() "bool preventFolding;\n" "/*!\n" " * \\brief a\n" - " *\n" + " * \n" " */\n" "int a;\n" ); @@ -197,7 +197,7 @@ void CppEditorPlugin::test_doxygen_comments_data() "bool preventFolding;\n" "/**\n" " * @brief a\n" - " *\n" + " * \n" " */\n" "int a;\n" ); @@ -236,7 +236,7 @@ void CppEditorPlugin::test_doxygen_comments_data() "bool preventFolding;\n" "///\n" "/// \\brief a\n" - "///\n" + "/// \n" "///\n" "int a;\n" ); @@ -265,7 +265,7 @@ void CppEditorPlugin::test_doxygen_comments_data() " bool preventFolding;\n" " ///\n" " /// \\brief a\n" - " ///\n" + " /// \n" " ///\n" " int a;\n" ); diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 331c66946ce..63d5bc2e5b7 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -430,6 +430,7 @@ bool handleDoxygenCppStyleContinuation(QTextCursor &cursor, const QString commentMarker = text.mid(offset, 3); newLine.append(commentMarker); + newLine.append(QLatin1Char(' ')); cursor.insertText(newLine); e->accept(); @@ -481,12 +482,13 @@ bool handleDoxygenContinuation(QTextCursor &cursor, c.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor, offset); newLine.append(c.selectedText()); if (text.at(offset) == QLatin1Char('/')) { - newLine.append(QLatin1String(" *")); + newLine.append(QLatin1String(" * ")); } else { int start = offset; while (offset < blockPos && text.at(offset) == QLatin1Char('*')) ++offset; newLine.append(QString(offset - start, QLatin1Char('*'))); + newLine.append(QLatin1Char(' ')); } cursor.insertText(newLine); e->accept(); From 25f69fa54228f94c7312c5b699e37f6e20077835 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Wed, 20 Nov 2013 17:55:24 +0100 Subject: [PATCH 34/56] Android: Fix sign package behavior Ensure that the widget and the step's settings are in sync with each other. Also don't restore the sign state since that leads to a password prompt on restoring the project. Task-number: QTCREATORBUG-10835 Change-Id: I4c3ead74e8caa6c87096c13173530a9c8ccae6aa Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/plugins/android/androiddeployqtstep.cpp | 2 +- src/plugins/android/androiddeployqtwidget.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp index e1d591eb720..2e42b763f58 100644 --- a/src/plugins/android/androiddeployqtstep.cpp +++ b/src/plugins/android/androiddeployqtstep.cpp @@ -388,7 +388,7 @@ bool AndroidDeployQtStep::fromMap(const QVariantMap &map) m_deployAction = AndroidDeployQtAction(map.value(QLatin1String(DeployActionKey), BundleLibrariesDeployment).toInt()); m_keystorePath = Utils::FileName::fromString(map.value(KeystoreLocationKey).toString()); - m_signPackage = map.value(SignPackageKey).toBool(); + m_signPackage = false; // don't restore this m_buildTargetSdk = map.value(BuildTargetSdkKey).toString(); m_verbose = map.value(VerboseOutputKey).toBool(); m_inputFile = map.value(InputFile).toString(); diff --git a/src/plugins/android/androiddeployqtwidget.cpp b/src/plugins/android/androiddeployqtwidget.cpp index a1dee1ddba9..7cc2e1561c2 100644 --- a/src/plugins/android/androiddeployqtwidget.cpp +++ b/src/plugins/android/androiddeployqtwidget.cpp @@ -82,9 +82,11 @@ AndroidDeployQtWidget::AndroidDeployQtWidget(AndroidDeployQtStep *step) } // signing + m_ui->signPackageCheckBox->setChecked(m_step->signPackage()); m_ui->KeystoreLocationLineEdit->setText(m_step->keystorePath().toUserOutput()); m_ui->signingDebugWarningIcon->hide(); m_ui->signingDebugWarningLabel->hide(); + signPackageCheckBoxToggled(m_step->signPackage()); m_ui->verboseOutputCheckBox->setChecked(m_step->verboseOutput()); m_ui->openPackageLocationCheckBox->setChecked(m_step->openPackageLocation()); From 5bede659a3bf88a83a74f09ade4a57fee42c773a Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 18 Nov 2013 17:28:46 +0100 Subject: [PATCH 35/56] Doc: Snapshots view is now opened by default Also, the view name is now in plural. Change-Id: I488db96f364113e7922bdb1d578a7b9cc72d96f0 Reviewed-by: hjk --- doc/src/debugger/creator-debugger.qdoc | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/doc/src/debugger/creator-debugger.qdoc b/doc/src/debugger/creator-debugger.qdoc index 09f84364577..ffe1a4d7461 100644 --- a/doc/src/debugger/creator-debugger.qdoc +++ b/doc/src/debugger/creator-debugger.qdoc @@ -800,15 +800,13 @@ A snapshot contains the complete state of the debugged program at a time, including the full memory contents. - To create snapshots of a debugged program, select \gui Create in the - context menu in the \gui Snapshot view. + To create snapshots of a debugged program, select \gui {Create Snapshot} in + the context menu in the \gui Snapshots view. - Double-click on entries in the snapshot view to switch between + Double-click on entries in the \gui Snapshots view to switch between snapshots. The debugger views are updated to reflect the state of the program at time of taking the snapshot. - By default, the \gui{Snapshots} view is hidden. - */ From 38dbb6ab1102cdb8b9d17fcc3bb37cc1379e3f92 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Wed, 20 Nov 2013 20:58:25 +0200 Subject: [PATCH 36/56] Fix compiler warning Change-Id: Ib77456e9d0143eeddecc2c2027eecaabddea0a66 Reviewed-by: Thomas Hartmann --- .../qmldesigner/components/itemlibrary/itemlibrarywidget.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp index ad7edd745c6..99e92d88ea2 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp @@ -367,13 +367,10 @@ void ItemLibraryWidget::startDragAndDrop(int itemLibId) { QMimeData *mimeData = m_itemLibraryModel->getMimeData(itemLibId); QDrag *drag = new QDrag(this); - const QImage image = qvariant_cast(mimeData->imageData()); drag->setPixmap(m_itemLibraryModel->getIcon(itemLibId).pixmap(32, 32)); drag->setMimeData(mimeData); - QQuickItem *rootItem = qobject_cast(m_itemsView->rootObject()); - drag->exec(); } From dc3e594dad9d0bf1815db2af48633bfa55ca145a Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Wed, 20 Nov 2013 17:34:11 +0100 Subject: [PATCH 37/56] WelcomeScreen: fix fuzzy fonts in the side bar Use native text rendering to get crisp fonts Change-Id: I75ca9ae323f2e4bd60e080cdcc2a6d90f0234c33 Reviewed-by: Jens Bache-Wiig Reviewed-by: Thomas Hartmann --- share/qtcreator/welcomescreen/widgets/SideBar.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/welcomescreen/widgets/SideBar.qml b/share/qtcreator/welcomescreen/widgets/SideBar.qml index 5183c4b906f..20ba652277f 100644 --- a/share/qtcreator/welcomescreen/widgets/SideBar.qml +++ b/share/qtcreator/welcomescreen/widgets/SideBar.qml @@ -101,13 +101,13 @@ ColumnLayout { width: parent.width } - Text { + NativeText { text: qsTr("New to Qt?") font.pixelSize: 18 font.bold: false } - Text { + NativeText { text: qsTr("Learn how to develop your own applications and explore Qt Creator.") font.pixelSize: 12 wrapMode: Text.WordWrap From ca57a394f46856274d73bdd7201a4cb373aea086 Mon Sep 17 00:00:00 2001 From: Fawzi Mohamed Date: Thu, 21 Nov 2013 11:26:18 +0100 Subject: [PATCH 38/56] qmljs: fix import cache correct update of m_importCache Change-Id: I70a2c6777c8f0e8df7b130fcff96cd67f83ca3e4 Reviewed-by: Thomas Hartmann --- src/libs/qmljs/qmljsimportdependencies.cpp | 35 +++++++++++++++------- src/libs/qmljs/qmljsimportdependencies.h | 2 ++ 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/libs/qmljs/qmljsimportdependencies.cpp b/src/libs/qmljs/qmljsimportdependencies.cpp index 712442c2c3d..dffcf8ee4b7 100644 --- a/src/libs/qmljs/qmljsimportdependencies.cpp +++ b/src/libs/qmljs/qmljsimportdependencies.cpp @@ -719,10 +719,15 @@ void ImportDependencies::addCoreImport(const CoreImport &import) CoreImport newImport = import; if (m_coreImports.contains(import.importId)) { CoreImport oldVal = m_coreImports.value(import.importId); - foreach (const Export &e, oldVal.possibleExports) - if (!e.intrinsic) + foreach (const Export &e, oldVal.possibleExports) { + if (e.intrinsic) + removeImportCacheEntry(e.exportName, import.importId); + else newImport.possibleExports.append(e); + } } + foreach (const Export &e, import.possibleExports) + m_importCache[e.exportName].append(import.importId); m_coreImports.insert(newImport.importId, newImport); if (debugImportDependencies) { QDebug dbg(qDebug()); @@ -741,16 +746,30 @@ void ImportDependencies::removeCoreImport(const QString &importId) CoreImport &cImport = m_coreImports[importId]; QList newExports; foreach (const Export &e, cImport.possibleExports) - if (!e.intrinsic) + if (e.intrinsic) + removeImportCacheEntry(e.exportName, importId); + else newExports.append(e); if (newExports.size()>0) cImport.possibleExports = newExports; else m_coreImports.remove(importId); + if (debugImportDependencies) qDebug() << "removed import with id:"<< importId; } +void ImportDependencies::removeImportCacheEntry(const ImportKey &importKey, const QString &importId) +{ + QStringList &cImp = m_importCache[importKey]; + if (!cImp.removeOne(importId)) { + qDebug() << "missing possibleExport backpointer for " << importKey.toString() << " to " + << importId; + } + if (cImp.isEmpty()) + m_importCache.remove(importKey); +} + void ImportDependencies::addExport(const QString &importId, const ImportKey &importKey, const QString &requiredPath) { @@ -759,10 +778,12 @@ void ImportDependencies::addExport(const QString &importId, const ImportKey &imp newImport.language = Language::Unknown; newImport.possibleExports.append(Export(importKey, requiredPath, false)); m_coreImports.insert(newImport.importId, newImport); + m_importCache[importKey].append(importId); return; } CoreImport &importValue = m_coreImports[importId]; importValue.possibleExports.append(Export(importKey, requiredPath, false)); + m_importCache[importKey].append(importId); if (debugImportDependencies) qDebug() << "added export "<< importKey.toString() << " for id " < libraryImports(const ViewerContext &viewContext) const; QSet subdirImports(const ImportKey &baseKey, const ViewerContext &viewContext) const; private: + void removeImportCacheEntry(const ImportKey &importKey, const QString &importId); + QMap m_importCache; QMap m_coreImports; }; From f10dfe8679536ec978b88b870bad6282c77d638d Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 21 Nov 2013 15:19:23 +0100 Subject: [PATCH 39/56] QmlDesigner.SubComponentManager: removing bottleneck The function checkIfDerivedFromItem()is really slow, since it does require a link. Since not much harm is done when we display QtObjects, I remove the check for now, until we find a faster solution. Change-Id: Ibd75bd7ed17cfc8268ec0745e330d75cb4e69ebe Reviewed-by: Thomas Hartmann --- .../qmldesigner/designercore/metainfo/subcomponentmanager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp index badaa52ba3a..bf845dcc81f 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp @@ -75,6 +75,8 @@ static inline QStringList importPaths() { static inline bool checkIfDerivedFromItem(const QString &fileName) { + return true; + QmlJS::Snapshot snapshot; From 14659c09871a9edc0e755777f568549d6709d370 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 21 Nov 2013 14:43:39 +0100 Subject: [PATCH 40/56] QmlDesigner: Get imports from the code model Change-Id: I96928025aede350bf4ff084555f612568d9389d8 Reviewed-by: Fawzi Mohamed --- .../qmldesigner/designercore/include/model.h | 2 + .../qmldesigner/designercore/model/model.cpp | 27 ++++---- .../qmldesigner/designercore/model/model_p.h | 2 + .../designercore/model/texttomodelmerger.cpp | 64 +++++++++++++++++++ .../designercore/model/texttomodelmerger.h | 2 + 5 files changed, 82 insertions(+), 15 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/include/model.h b/src/plugins/qmldesigner/designercore/include/model.h index 8e4334d87c5..3d6e903d93b 100644 --- a/src/plugins/qmldesigner/designercore/include/model.h +++ b/src/plugins/qmldesigner/designercore/include/model.h @@ -99,6 +99,8 @@ public: QList possibleImports() const; QList usedImports() const; void changeImports(const QList &importsToBeAdded, const QList &importsToBeRemoved); + void setPossibleImports(const QList &possibleImports); + void setUsedImports(const QList &usedImports); bool hasImport(const Import &import, bool ignoreAlias = true, bool allowHigherVersion = false); QString pathForImport(const Import &import); diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp index df895a4048b..b2c2019bb79 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -1731,25 +1731,12 @@ QList Model::imports() const QList Model::possibleImports() const { - QList possibleImportList; - - possibleImportList.append(Import::createLibraryImport("QtQuick.Controls", "1.0")); - possibleImportList.append(Import::createLibraryImport("QtQuick.Layouts", "1.0")); - possibleImportList.append(Import::createLibraryImport("QtQuick.Window", "2.0")); - - return possibleImportList; + return d->m_possibleImportList; } QList Model::usedImports() const { - QList usedImportList; - - usedImportList.append(Import::createLibraryImport("QtQuick", "1.0")); - usedImportList.append(Import::createLibraryImport("QtQuick", "1.1")); - usedImportList.append(Import::createLibraryImport("QtQuick", "2.0")); - usedImportList.append(Import::createLibraryImport("QtQuick", "2.1")); - - return usedImportList; + return d->m_usedImportList; } void Model::changeImports(const QList &importsToBeAdded, const QList &importsToBeRemoved) @@ -1757,6 +1744,16 @@ void Model::changeImports(const QList &importsToBeAdded, const QListchangeImports(importsToBeAdded, importsToBeRemoved); } +void Model::setPossibleImports(const QList &possibleImports) +{ + d->m_possibleImportList = possibleImports; +} + +void Model::setUsedImports(const QList &usedImports) +{ + d->m_usedImportList = usedImports; +} + static bool compareVersions(const QString &version1, const QString &version2, bool allowHigherVersion) { diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h index 7dcc150491d..8b2653ed9ca 100644 --- a/src/plugins/qmldesigner/designercore/model/model_p.h +++ b/src/plugins/qmldesigner/designercore/model/model_p.h @@ -236,6 +236,8 @@ private: Model *m_q; MetaInfo m_metaInfo; QList m_imports; + QList m_possibleImportList; + QList m_usedImportList; QList > m_viewList; QList m_selectedInternalNodeList; QHash m_idNodeHash; diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index e37d2711605..7b0b170d23d 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -48,6 +48,7 @@ #include #include #include +#include #include @@ -726,6 +727,67 @@ void TextToModelMerger::setupImports(const Document::Ptr &doc, differenceHandler.importAbsentInQMl(import); } +void TextToModelMerger::setupPossibleImports(const QmlJS::Snapshot &snapshot, const QmlJS::ViewerContext &viewContext) +{ + QList possibleImports; + + QSet possibleImportKeys = snapshot.importDependencies()->libraryImports(viewContext); + + QHash filteredPossibleImportKeys; + foreach (const ImportKey &importKey, possibleImportKeys) { + if (!filteredPossibleImportKeys.contains(importKey.path()) + || filteredPossibleImportKeys.value(importKey.path()).majorVersion < importKey.majorVersion + || (filteredPossibleImportKeys.value(importKey.path()).majorVersion == importKey.majorVersion + && filteredPossibleImportKeys.value(importKey.path()).minorVersion < importKey.minorVersion)) + filteredPossibleImportKeys.insert(importKey.path(), importKey); + } + + filteredPossibleImportKeys.remove(QLatin1String("")); + filteredPossibleImportKeys.remove(QLatin1String("QML")); + filteredPossibleImportKeys.remove(QLatin1String("QtQml")); + filteredPossibleImportKeys.remove(QLatin1String("QtQuick/PrivateWidgets")); + + QList allImports = m_scopeChain->context()->imports(m_document.data())->all(); + + foreach (const QmlJS::Import &import, allImports) { + filteredPossibleImportKeys.remove(import.info.path()); + } + + foreach (const ImportKey &importKey, filteredPossibleImportKeys) { + QString libraryName = importKey.splitPath.join(QLatin1Char('.')); + QString version = QString(QStringLiteral("%1.%2").arg(importKey.majorVersion).arg(importKey.minorVersion)); + possibleImports.append(Import::createLibraryImport(libraryName, version)); + } + + if ( m_rewriterView->isAttached()) + m_rewriterView->model()->setPossibleImports(possibleImports); +} + +void TextToModelMerger::setupUsedImports() +{ + QList allImports = m_scopeChain->context()->imports(m_document.data())->all(); + + QList usedImports; + + foreach (const QmlJS::Import &import, allImports) { + if (import.used) { + if (import.info.type() == ImportType::Library) { + usedImports.append(Import::createLibraryImport(import.info.name(), import.info.version().toString(), import.info.as())); + } else if (import.info.type() == ImportType::Directory || import.info.type() == ImportType::File) { + usedImports.append(Import::createFileImport(import.info.name(), import.info.version().toString(), import.info.as())); + } + } + } + // even if not explicitly used we probably want to keep QtQuick imports + usedImports.append(Import::createLibraryImport("QtQuick", "1.0")); + usedImports.append(Import::createLibraryImport("QtQuick", "1.1")); + usedImports.append(Import::createLibraryImport("QtQuick", "2.0")); + usedImports.append(Import::createLibraryImport("QtQuick", "2.1")); + + if (m_rewriterView->isAttached()) + m_rewriterView->model()->setUsedImports(usedImports); +} + bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceHandler) { // qDebug() << "TextToModelMerger::load with data:" << data; @@ -768,6 +830,8 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH } setupImports(doc, differenceHandler); + setupPossibleImports(snapshot, vContext); + setupUsedImports(); 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 8c98376db2d..d82bf851fed 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h @@ -59,6 +59,8 @@ public: bool isActive() const; void setupImports(const QmlJS::Document::Ptr &doc, DifferenceHandler &differenceHandler); + void setupPossibleImports(const QmlJS::Snapshot &snapshot, const QmlJS::ViewerContext &viewContext); + void setupUsedImports(); bool load(const QString &data, DifferenceHandler &differenceHandler); RewriterView *view() const From 8e267a7e9de770e8c25b6bfcaf15645b93b8eb6f Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 21 Nov 2013 15:12:05 +0100 Subject: [PATCH 41/56] QmlDesigner.ItemLibrary: Allow higher version We should propably introduce a version range. Change-Id: I74db2ff6efafa26902c5f2a67040661ca6755508 Reviewed-by: Thomas Hartmann --- .../qmldesigner/components/itemlibrary/itemlibrarymodel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp index 8358c186086..1205aae5aec 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp @@ -510,7 +510,7 @@ void ItemLibraryModel::update(ItemLibraryInfo *itemLibraryInfo, Model *model) if ((valid || entry.forceImport()) && (entry.requiredImport().isEmpty() - || model->hasImport(entryToImport(entry), true, false) || entry.forceImport())) { + || model->hasImport(entryToImport(entry), true, true) || entry.forceImport())) { QString itemSectionName = entry.category(); ItemLibrarySectionModel *sectionModel; ItemLibraryItemModel *itemModel; From 03a3cf9fe2b9a7e5707e657b05c4e542cb3f8043 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 21 Nov 2013 15:26:04 +0100 Subject: [PATCH 42/56] QmlDesigner.FormEditor: crash fix Fix a crash when closing Qt Creator and clear() is called from the destructor. Change-Id: I037599653a6ca32e326b2263e7e6f526523e6f8e Reviewed-by: Thomas Hartmann --- .../qmldesigner/components/formeditor/formeditoritem.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index 9ed39b9f633..677d13bd81d 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -119,6 +119,9 @@ void FormEditorItem::setHighlightBoundingRect(bool highlight) void FormEditorItem::blurContent(bool blurContent) { + if (!scene()) + return; + if (m_blurContent != blurContent) { m_blurContent = blurContent; update(); From c28689e3af7c9077cfd5c2522500de4b4db2d2b5 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 21 Nov 2013 15:07:37 +0100 Subject: [PATCH 43/56] Doc: update information about Qbs Fix the link to the newly published Qbs Manual in qt-project.org/doc/qbs/. Describe how to use the Qbs project wizards. Update screenshot to show a project generated by the wizard. Change-Id: I5fa7ce03499a4fdcdfdeea676a933ded64200598 Reviewed-by: Christian Kandeler --- doc/images/creator-qbs-project.png | Bin 35937 -> 30296 bytes doc/src/projects/creator-projects-qbs.qdoc | 18 ++++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/doc/images/creator-qbs-project.png b/doc/images/creator-qbs-project.png index ec4dcadae105bcd6c389188b2e2bb1f732ea3805..76466d4758a6b9f877e49e7b48e49f6f72114265 100644 GIT binary patch literal 30296 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 \gui {Open File or Project}. - - \li Select the .qbs file for your project. + \li Select \gui File > \gui {New File or Project} > \gui {Plain C + Project (Qbs Build)} or \gui {Plain C++ Project (Qbs Build)} > + \gui Choose, and follow the instructions of the wizard to create a + Qbs project. \image creator-qbs-project.png + \li Edit the .qbs file for you project. Usually, you must add the + \c Depends item for a Qt application. For examples, see the + \c {examples} directory in the qbs repository. + \li Click the \inlineimage qtcreator-run.png - (\gui Run) button to run the application. + (\gui Run) button to build, deploy, and run the application. \endlist From acba504a53ac2d9139557fc2f4329f3d6fa11804 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Wed, 20 Nov 2013 15:14:17 +0100 Subject: [PATCH 44/56] QmlProfiler: Centralize redrawing of custom canvas Don't handle redraw events in QML anymore and instead trigger a redraw on geometryChange as well as componentComplete from C++. This reduces redundant code and glitches from forgotten QML event handlers. Change-Id: I0eadfb54cf8e392152c4d91b83c874b37b1aca96 Reviewed-by: Kai Koehne --- .../qmlprofiler/canvas/qmlprofilercanvas.cpp | 7 +++++++ .../qmlprofiler/canvas/qmlprofilercanvas.h | 1 + src/plugins/qmlprofiler/qml/TimeDisplay.qml | 11 ----------- src/plugins/qmlprofiler/qml/TimeMarks.qml | 15 --------------- 4 files changed, 8 insertions(+), 26 deletions(-) diff --git a/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.cpp b/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.cpp index 9107e53d483..35038078965 100644 --- a/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.cpp +++ b/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.cpp @@ -92,6 +92,13 @@ void QmlProfilerCanvas::componentComplete() QMetaObject::connect(this, p.notifySignalIndex(), this, requestPaintMethod, 0, 0); } QQuickItem::componentComplete(); + requestRedraw(); +} + +void QmlProfilerCanvas::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) +{ + QQuickItem::geometryChanged(newGeometry, oldGeometry); + requestRedraw(); } } diff --git a/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.h b/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.h index b320601396c..4a360d012cd 100644 --- a/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.h +++ b/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.h @@ -61,6 +61,7 @@ private slots: protected: virtual void paint(QPainter *); virtual void componentComplete(); + virtual void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); private: Context2D *m_context2d; diff --git a/src/plugins/qmlprofiler/qml/TimeDisplay.qml b/src/plugins/qmlprofiler/qml/TimeDisplay.qml index 81bc47d3375..5a6a63b9e47 100644 --- a/src/plugins/qmlprofiler/qml/TimeDisplay.qml +++ b/src/plugins/qmlprofiler/qml/TimeDisplay.qml @@ -38,17 +38,6 @@ Canvas2D { property real endTime : 0 property real timePerPixel: 0 - - Component.onCompleted: { - requestRedraw(); - } - onWidthChanged: { - requestRedraw(); - } - onHeightChanged: { - requestRedraw(); - } - Connections { target: zoomControl onRangeChanged: { diff --git a/src/plugins/qmlprofiler/qml/TimeMarks.qml b/src/plugins/qmlprofiler/qml/TimeMarks.qml index ee06d501d83..6d48cbb0146 100644 --- a/src/plugins/qmlprofiler/qml/TimeMarks.qml +++ b/src/plugins/qmlprofiler/qml/TimeMarks.qml @@ -38,21 +38,6 @@ Canvas2D { property real endTime property real timePerPixel - Component.onCompleted: { - requestRedraw(); - } - - onWidthChanged: { - requestRedraw(); - } - onHeightChanged: { - requestRedraw(); - } - - onYChanged: { - requestRedraw(); - } - Connections { target: labels onHeightChanged: { requestRedraw(); } From d7ede938e1eca7003f03c0c6a3439fe6f281c23b Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Thu, 21 Nov 2013 15:43:47 +0100 Subject: [PATCH 45/56] Fix wrong header file name in QMLJS Fix a qmake warning introduced in e1b44e870f5c15 . Change-Id: I8f7913ceabc411044785634d1708fbc035b0a5c4 Reviewed-by: Thomas Hartmann Reviewed-by: Fawzi Mohamed --- src/libs/qmljs/qmljs-lib.pri | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/qmljs/qmljs-lib.pri b/src/libs/qmljs/qmljs-lib.pri index e2c78c4d72d..beb80b8fb8c 100644 --- a/src/libs/qmljs/qmljs-lib.pri +++ b/src/libs/qmljs/qmljs-lib.pri @@ -41,7 +41,7 @@ HEADERS += \ $$PWD/qmljsqrcparser.h \ $$PWD/qmljsconstants.h \ $$PWD/qmljsimportdependencies.h \ - $$PWD/viewercontext.h + $$PWD/qmljsviewercontext.h SOURCES += \ $$PWD/qmljsbind.cpp \ From 7458a8235a26e1fd4c6a01a712360536a81ca2f8 Mon Sep 17 00:00:00 2001 From: Fawzi Mohamed Date: Tue, 19 Nov 2013 10:45:00 +0100 Subject: [PATCH 46/56] ios: do not stop in debugger when debuggings an app the attached process is seen as still running just after the attach and continuing fails, immediately later a spontaneous stop is detected and on ios (where we set continueAfterAttach) we continue after the spontanous stop. This also work in the desktop case. Change-Id: I92fbcd3ba319da7d9e664f67c8cbbea00f0daa43 Reviewed-by: hjk --- share/qtcreator/debugger/lldbbridge.py | 10 +++++++-- src/plugins/debugger/lldb/lldbengine.cpp | 26 +++++++++++++++++------- src/plugins/debugger/lldb/lldbengine.h | 1 + src/plugins/ios/iosdebugsupport.cpp | 2 ++ 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index 235c56069b6..07b8ead43c4 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -618,7 +618,10 @@ class Dumper(DumperBase): self.report('state="inferiorrunfailed"') return self.report('pid="%s"' % self.process.GetProcessID()) - self.report('state="enginerunandinferiorstopok"') + # even if it stops it seems that lldb assumes it is running and later detects that + # it did stop after all, so it is be better to mirror that and wait for the spontaneous + # stop + self.report('state="enginerunandinferiorrunok"') elif len(self.remoteChannel_) > 0: self.process = self.target.ConnectRemote( self.debugger.GetListener(), @@ -626,7 +629,10 @@ class Dumper(DumperBase): if not error.Success(): self.report('state="inferiorrunfailed"') return - self.report('state="enginerunandinferiorstopok"') + # even if it stops it seems that lldb assumes it is running and later detects that + # it did stop after all, so it is be better to mirror that and wait for the spontaneous + # stop + self.report('state="enginerunandinferiorrunok"') else: launchInfo = lldb.SBLaunchInfo(self.processArgs_.split()) launchInfo.SetWorkingDirectory(os.getcwd()) diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index 7e740f0bd85..c2c7b691416 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -83,7 +83,7 @@ static QByteArray tooltipIName(const QString &exp) /////////////////////////////////////////////////////////////////////// LldbEngine::LldbEngine(const DebuggerStartParameters &startParameters) - : DebuggerEngine(startParameters) + : DebuggerEngine(startParameters), m_continueAtNextSpontaneousStop(false) { m_lastAgentId = 0; m_lastToken = 0; @@ -197,13 +197,19 @@ void LldbEngine::setupInferior() cmd.arg("executable", QFileInfo(sp.executable).absoluteFilePath()); cmd.arg("startMode", sp.startMode); // directly relying on this is brittle wrt. insertions, so check it here cmd.arg("processArgs", sp.processArgs); - cmd.arg("attachPid", ((sp.startMode == AttachCrashedExternal || sp.startMode == AttachExternal) - ? sp.attachPID : 0)); + + QTC_CHECK(!sp.attachPID || (sp.startMode == AttachCrashedExternal + || sp.startMode == AttachExternal)); + cmd.arg("attachPid", sp.attachPID); cmd.arg("sysRoot", sp.sysRoot); cmd.arg("remoteChannel", ((sp.startMode == AttachToRemoteProcess || sp.startMode == AttachToRemoteServer) ? sp.remoteChannel : QString())); cmd.arg("platform", sp.platform); + QTC_CHECK(!sp.continueAfterAttach || (sp.startMode == AttachToRemoteProcess + || sp.startMode == AttachExternal + || sp.startMode == AttachToRemoteServer)); + m_continueAtNextSpontaneousStop = false; runCommand(cmd); updateLocals(); // update display options } @@ -1014,9 +1020,13 @@ void LldbEngine::refreshState(const GdbMi &reportedState) notifyInferiorRunOk(); else if (newState == "inferiorrunfailed") notifyInferiorRunFailed(); - else if (newState == "stopped") + else if (newState == "stopped") { notifyInferiorSpontaneousStop(); - else if (newState == "inferiorstopok") + if (m_continueAtNextSpontaneousStop) { + m_continueAtNextSpontaneousStop = false; + continueInferior(); + } + } else if (newState == "inferiorstopok") notifyInferiorStopOk(); else if (newState == "inferiorstopfailed") notifyInferiorStopFailed(); @@ -1028,9 +1038,11 @@ void LldbEngine::refreshState(const GdbMi &reportedState) notifyEngineRunFailed(); else if (newState == "inferiorsetupok") notifyInferiorSetupOk(); - else if (newState == "enginerunandinferiorrunok") + else if (newState == "enginerunandinferiorrunok") { + if (startParameters().continueAfterAttach) + m_continueAtNextSpontaneousStop = true; notifyEngineRunAndInferiorRunOk(); - else if (newState == "enginerunandinferiorstopok") + } else if (newState == "enginerunandinferiorstopok") notifyEngineRunAndInferiorStopOk(); else if (newState == "inferiorshutdownok") notifyInferiorShutdownOk(); diff --git a/src/plugins/debugger/lldb/lldbengine.h b/src/plugins/debugger/lldb/lldbengine.h index 22d05cb2937..dc4e174768a 100644 --- a/src/plugins/debugger/lldb/lldbengine.h +++ b/src/plugins/debugger/lldb/lldbengine.h @@ -201,6 +201,7 @@ private: // FIXME: Make generic. int m_lastAgentId; int m_lastToken; + int m_continueAtNextSpontaneousStop; QMap, int> m_disassemblerAgents; QMap, int> m_memoryAgents; QHash > m_memoryAgentTokens; diff --git a/src/plugins/ios/iosdebugsupport.cpp b/src/plugins/ios/iosdebugsupport.cpp index 0d761320b9d..32d69447af4 100644 --- a/src/plugins/ios/iosdebugsupport.cpp +++ b/src/plugins/ios/iosdebugsupport.cpp @@ -84,6 +84,8 @@ RunControl *IosDebugSupport::createDebugRunControl(IosRunConfiguration *runConfi } params.displayName = runConfig->appName(); params.remoteSetupNeeded = true; + if (!params.breakOnMain) + params.continueAfterAttach = true; Debugger::DebuggerRunConfigurationAspect *aspect = runConfig->extraAspect(); From 1e9adb22b0c1d0876908d20bb014b13be4e70213 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 20 Nov 2013 18:55:09 +0100 Subject: [PATCH 47/56] Debugger: Fix editing of std::{string,vector} values Change-Id: I3ff3f032af9ca54f2c48fe6e611fee73691e5ea2 Reviewed-by: Ulf Hermann Reviewed-by: hjk --- share/qtcreator/debugger/gdbbridge.py | 41 ++++++++++++++++++--------- share/qtcreator/debugger/qttypes.py | 37 +++++++++++------------- share/qtcreator/debugger/stdtypes.py | 21 +++++++------- 3 files changed, 54 insertions(+), 45 deletions(-) diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index e028f54e46f..6de1c2891d1 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -420,7 +420,7 @@ class LocalItem: ####################################################################### def bbedit(args): - theDumper.bbedit(args.split(",")) + theDumper.bbedit(args) registerCommand("bbedit", bbedit) @@ -706,7 +706,8 @@ class Dumper(DumperBase): if type.find(":") >= 0: type = "'" + type + "'" # 'class' is needed, see http://sourceware.org/bugzilla/show_bug.cgi?id=11912 - exp = "((class %s*)%s)->%s(%s)" % (type, value.address, func, arg) + #exp = "((class %s*)%s)->%s(%s)" % (type, value.address, func, arg) + exp = "((%s*)%s)->%s(%s)" % (type, value.address, func, arg) #warn("CALL: %s" % exp) result = None try: @@ -903,6 +904,15 @@ class Dumper(DumperBase): # Try _some_ fallback (good enough for the std::complex dumper) return gdb.parse_and_eval("{%s}%s" % (referencedType, address)) + def setValue(self, address, type, value): + cmd = "set {%s}%s=%s" % (type, address, value) + gdb.execute(cmd) + + def setValues(self, address, type, values): + cmd = "set {%s[%s]}%s={%s}" \ + % (type, len(values), address, ','.join(map(str, values))) + gdb.execute(cmd) + def selectedInferior(self): try: # gdb.Inferior is new in gdb 7.2 @@ -1659,22 +1669,25 @@ class Dumper(DumperBase): return namespace - def bbedit(self, type, expr, value): - type = b16decode(type) + def bbedit(self, args): + (typeName, expr, data) = args.split(',') + typeName = b16decode(typeName) ns = self.qtNamespace() - if type.startswith(ns): - type = type[len(ns):] - type = type.replace("::", "__") - pos = type.find('<') + if typeName.startswith(ns): + typeName = typeName[len(ns):] + typeName = typeName.replace("::", "__") + pos = typeName.find('<') if pos != -1: - type = type[0:pos] + typeName = typeName[0:pos] expr = b16decode(expr) - value = b16decode(value) - #warn("EDIT: %s %s %s %s: " % (pos, type, expr, value)) - if self.qqEditable.has_key(type): - self.qqEditable[type](expr, value) + data = b16decode(data) + if typeName in self.qqEditable: + #self.qqEditable[typeName](self, expr, data) + value = gdb.parse_and_eval(expr) + self.qqEditable[typeName](self, value, data) else: - gdb.execute("set (%s)=%s" % (expr, value)) + cmd = "set variable (%s)=%s" % (expr, data) + gdb.execute(cmd) def hasVTable(self, type): fields = type.fields() diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index fba8d299874..06676b2632e 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -1640,17 +1640,10 @@ def qdump__QStandardItem(d, value): d.putPlainChildren(value) -def qedit__QString(expr, value): - cmd = "call (%s).resize(%d)" % (expr, len(value)) - gdb.execute(cmd) - d = gdb.parse_and_eval(expr)["d"]["data"] - cmd = "set {short[%d]}%s={" % (len(value), d.pointerValue(d)) - for i in range(len(value)): - if i != 0: - cmd += ',' - cmd += str(ord(value[i])) - cmd += '}' - gdb.execute(cmd) +def qedit__QString(d, value, data): + d.call(value, "resize", str(len(data))) + (base, size, alloc) = d.stringData(value) + d.setValues(base, "short", [ord(c) for c in data]) def qform__QString(): return "Inline,Separate Window" @@ -1976,15 +1969,19 @@ def qdump__QVariant(d, value): return tdata.type -def qedit__QVector(expr, value): - values = value.split(',') - ob = gdb.parse_and_eval(expr) - cmd = "call (%s).resize(%d)" % (expr, len(values)) - gdb.execute(cmd) - innerType = d.templateArgument(ob.type, 0) - ptr = ob["p"]["array"].cast(d.voidPtrType()) - cmd = "set {%s[%d]}%s={%s}" % (innerType, len(values), d.pointerValue(ptr), value) - gdb.execute(cmd) +def qedit__QVector(d, value, data): + values = data.split(',') + size = len(values) + d.call(value, "resize", str(size)) + innerType = d.templateArgument(value.type, 0) + try: + # Qt 5. Will fail on Qt 4 due to the missing 'offset' member. + offset = value["d"]["offset"] + base = d.pointerValue(value["d"].cast(d.charPtrType()) + offset) + except: + # Qt 4. + base = d.pointerValue(value["p"]["array"]) + d.setValues(base, innerType, values) def qform__QVector(): diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index 0438585f4ca..588187e494a 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -497,16 +497,16 @@ def qdump__std____debug__unordered_set(d, value): qdump__std__unordered_set(d, value) -def qedit__std__vector(expr, value): - values = value.split(',') +def qedit__std__vector(d, value, data): + import gdb + values = data.split(',') n = len(values) - ob = gdb.parse_and_eval(expr) - innerType = d.templateArgument(ob.type, 0) + innerType = d.templateArgument(value.type, 0) cmd = "set $d = (%s*)calloc(sizeof(%s)*%s,1)" % (innerType, innerType, n) gdb.execute(cmd) - cmd = "set {void*[3]}%s = {$d, $d+%s, $d+%s}" % (ob.address, n, n) + cmd = "set {void*[3]}%s = {$d, $d+%s, $d+%s}" % (value.address, n, n) gdb.execute(cmd) - cmd = "set (%s[%d])*$d={%s}" % (innerType, n, value) + cmd = "set (%s[%d])*$d={%s}" % (innerType, n, data) gdb.execute(cmd) def qdump__std__vector(d, value): @@ -566,12 +566,11 @@ def qdump__std____1__vector(d, value): def qdump__std____debug__vector(d, value): qdump__std__vector(d, value) -def qedit__std__string(expr, value): - cmd = "print (%s).assign(\"%s\")" % (expr, value) - gdb.execute(cmd) +def qedit__std__string(d, value, data): + d.call(value, "assign", '"%s"' % data.replace('"', '\\"')) -def qedit__string(expr, value): - qedit__std__string(expr, value) +def qedit__string(d, expr, value): + qedit__std__string(d, expr, value) def qdump__string(d, value): qdump__std__string(d, value) From 71f3baae6b0a264813a9d460f1cc85f0d2cd8c28 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Thu, 21 Nov 2013 15:01:57 +0100 Subject: [PATCH 48/56] QmlProfiler: Remover "rubber" behavior for horizontal Flickable. By overflicking you could reduce the selected range and implicitly zoom in. That seemed wrong. The rubber effect doesn't serve a real purpose on desktop applications anyway. Task-number: QTCREATORBUG-10864 Change-Id: Id4d6107e23c184621c5fcce21bf042e6ed4bd8e6 Reviewed-by: Kai Koehne --- src/plugins/qmlprofiler/qml/MainView.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/qmlprofiler/qml/MainView.qml b/src/plugins/qmlprofiler/qml/MainView.qml index f0674228196..9b2864c19be 100644 --- a/src/plugins/qmlprofiler/qml/MainView.qml +++ b/src/plugins/qmlprofiler/qml/MainView.qml @@ -330,6 +330,7 @@ Rectangle { contentWidth: 0 height: labels.height + labelsTail.height flickableDirection: Flickable.HorizontalFlick + boundsBehavior: Flickable.StopAtBounds onContentXChanged: view.updateZoomControl() clip:true From 8c6cb64d1ed52b39ff1ddeae7346a69df9de0f57 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Thu, 21 Nov 2013 15:04:49 +0100 Subject: [PATCH 49/56] QmlProfiler: Make range selection boundaries consistent You shouldn't be able to select out of range areas with the selector in the timeline if you can't scroll to see them anyway. Change-Id: Ia1909f463db2c64dc2605eac7f4be53a76222338 Reviewed-by: Kai Koehne --- src/plugins/qmlprofiler/qml/SelectionRange.qml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/plugins/qmlprofiler/qml/SelectionRange.qml b/src/plugins/qmlprofiler/qml/SelectionRange.qml index 86fdb2a7c6f..e3930c7d168 100644 --- a/src/plugins/qmlprofiler/qml/SelectionRange.qml +++ b/src/plugins/qmlprofiler/qml/SelectionRange.qml @@ -69,6 +69,11 @@ RangeMover { } function setPos(pos) { + if (pos < 0) + pos = 0; + else if (pos > width) + pos = width; + switch (creationState) { case 1: { setLeft(pos); From 4042fa708281dec5cff23364b65f82edfdc2edb1 Mon Sep 17 00:00:00 2001 From: hluk Date: Wed, 20 Nov 2013 19:21:04 +0100 Subject: [PATCH 50/56] FakeVim: Get rid of signed/unsigned compare compiler warning Change-Id: I9647eb7a3679e6a1a545d8ed71d9c531e1691d25 Reviewed-by: hjk --- src/plugins/fakevim/fakevimhandler.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 5caa0df6dd9..9540e41933d 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -784,6 +784,12 @@ static const QMap &vimKeyNames() return k; } +bool isControlModifier(const Qt::KeyboardModifiers &mods) +{ + static const int ctrl = HostOsInfo::controlModifier(); + return (mods & ctrl) == ctrl; +} + Range::Range() : beginPos(-1), endPos(-1), rangemode(RangeCharMode) @@ -938,12 +944,12 @@ public: bool is(int c) const { - return m_xkey == c && m_modifiers != HostOsInfo::controlModifier(); + return m_xkey == c && !isControl(); } bool isControl() const { - return m_modifiers == HostOsInfo::controlModifier(); + return isControlModifier(m_modifiers); } bool isControl(int c) const @@ -2215,7 +2221,7 @@ bool FakeVimHandler::Private::wantsOverride(QKeyEvent *ev) } // We are interested in overriding most Ctrl key combinations. - if (mods == HostOsInfo::controlModifier() + if (isControlModifier(mods) && !config(ConfigPassControlKey).toBool() && ((key >= Key_A && key <= Key_Z && key != Key_K) || key == Key_BracketLeft || key == Key_BracketRight)) { From ee909267e07b05b422b8105b240dcbc204ece932 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Thu, 21 Nov 2013 18:01:23 +0100 Subject: [PATCH 51/56] Android: Give AndroidDeviceDialog a parent Change-Id: Ia5b4f9a1be705dd2b6a0a5ae1f5d44f272973c17 Reviewed-by: hjk Reviewed-by: Robert Loehning --- src/plugins/android/androidconfigurations.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index 5d5d71bee65..e5a282e2206 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -422,7 +422,7 @@ AndroidDeviceInfo AndroidConfigurations::showDeviceDialog(ProjectExplorer::Proje return info; } - AndroidDeviceDialog dialog(apiLevel, abi); + AndroidDeviceDialog dialog(apiLevel, abi, Core::ICore::mainWindow()); if (dialog.exec() == QDialog::Accepted) { AndroidDeviceInfo info = dialog.device(); if (dialog.saveDeviceSelection()) { From cf5ec760f61522ce0387b5ea44b017459c200ab8 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Thu, 21 Nov 2013 18:09:53 +0100 Subject: [PATCH 52/56] Android: Give Create Avd dialog a proper parent Change-Id: I0e57d83526dff0edb435f9d81b18e22d4ee26e08 Reviewed-by: Robert Loehning --- src/plugins/android/androidconfigurations.cpp | 4 ++-- src/plugins/android/androidconfigurations.h | 2 +- src/plugins/android/androiddevicedialog.cpp | 2 +- src/plugins/android/androidsettingswidget.cpp | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index e5a282e2206..f3cf89e562c 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -496,9 +496,9 @@ QVector AndroidConfigurations::connectedDevices(QString *erro return devices; } -QString AndroidConfigurations::createAVD(int minApiLevel, QString targetArch) const +QString AndroidConfigurations::createAVD(QWidget *parent, int minApiLevel, QString targetArch) const { - QDialog d; + QDialog d(parent); Ui::AddNewAVDDialog avdDialog; avdDialog.setupUi(&d); // NOTE: adb list targets does actually include information on which abis are supported per apilevel diff --git a/src/plugins/android/androidconfigurations.h b/src/plugins/android/androidconfigurations.h index 0ffd279c14e..1d87f5b27d6 100644 --- a/src/plugins/android/androidconfigurations.h +++ b/src/plugins/android/androidconfigurations.h @@ -101,7 +101,7 @@ public: Utils::FileName zipalignPath() const; Utils::FileName stripPath(ProjectExplorer::Abi::Architecture architecture, const QString &ndkToolChainVersion) const; Utils::FileName readelfPath(ProjectExplorer::Abi::Architecture architecture, const QString &ndkToolChainVersion) const; - QString createAVD(int minApiLevel = 0, QString targetArch = QString()) const; + QString createAVD(QWidget *parent, int minApiLevel = 0, QString targetArch = QString()) const; QString createAVD(const QString &target, const QString &name, const QString &abi, int sdcardSize) const; bool removeAVD(const QString &name) const; QVector connectedDevices(QString *error = 0) const; diff --git a/src/plugins/android/androiddevicedialog.cpp b/src/plugins/android/androiddevicedialog.cpp index 66f4c1ea98f..6b3fb90bd58 100644 --- a/src/plugins/android/androiddevicedialog.cpp +++ b/src/plugins/android/androiddevicedialog.cpp @@ -446,7 +446,7 @@ void AndroidDeviceDialog::refreshDeviceList() void AndroidDeviceDialog::createAvd() { - QString avd = AndroidConfigurations::instance().createAVD(m_apiLevel, m_abi); + QString avd = AndroidConfigurations::instance().createAVD(this, m_apiLevel, m_abi); if (avd.isEmpty()) return; refreshDeviceList(); diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp index e5338944219..4ab8228d0b3 100644 --- a/src/plugins/android/androidsettingswidget.cpp +++ b/src/plugins/android/androidsettingswidget.cpp @@ -402,7 +402,7 @@ void AndroidSettingsWidget::browseOpenJDKLocation() void AndroidSettingsWidget::addAVD() { - AndroidConfigurations::instance().createAVD(); + AndroidConfigurations::instance().createAVD(this); m_AVDModel.setAvdList(AndroidConfigurations::instance().androidVirtualDevices()); avdActivated(m_ui->AVDTableView->currentIndex()); } From 5036d822dec2ade4c27890f983d353fe66c64f33 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 21 Nov 2013 16:33:05 +0100 Subject: [PATCH 53/56] Debugger: Fix assignment to 'unsigned int' values Change-Id: I80bc3f21eec194580adf0e82bd0429e5ae27ad51 Reviewed-by: Ulf Hermann Reviewed-by: hjk --- src/plugins/debugger/gdb/gdbengine.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 2bab82cded0..882dfaac9d5 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -4308,10 +4308,8 @@ void GdbEngine::assignValueInDebugger(const WatchData *data, + value.toString().toUtf8().toHex(); postCommand(cmd, Discardable, CB(handleVarAssign)); } else { - postCommand("-var-delete assign"); - postCommand("-var-create assign * " + expression.toLatin1()); - postCommand("-var-assign assign " + - GdbMi::escapeCString(value.toString().toLatin1()), + postCommand("set variable (" + expression.toLatin1() + ")=" + + GdbMi::escapeCString(value.toString().toLatin1()), Discardable, CB(handleVarAssign)); } } From 390e90a07a3e20a48e946e9057ce742ebd17f907 Mon Sep 17 00:00:00 2001 From: Petar Perisin Date: Fri, 22 Nov 2013 05:59:08 +0200 Subject: [PATCH 54/56] Git: Fix ability to open file on double click since show can be called with file name as source, we get its repository as source in diffhandler Task-number: QTCREATORBUG-10780 Change-Id: Ib0076c583eb5d43e66deb68adfdff1d25fc5a798 Reviewed-by: Orgad Shaneh --- src/plugins/git/gitclient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index b9363115f17..af2bc36bd11 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -1443,7 +1443,7 @@ void GitClient::show(const QString &source, const QString &id, GitDiffHandler *handler = new GitDiffHandler(diffEditor, gitBinaryPath(), - workingDirectory, + findRepositoryForDirectory(workingDirectory), processEnvironment(), settings()->intValue(GitSettings::timeoutKey)); handler->show(id); From a82c52739a3048b3e07afa33ec9247626eec6db2 Mon Sep 17 00:00:00 2001 From: Thomas BOUTROUE Date: Fri, 15 Nov 2013 17:00:24 +0100 Subject: [PATCH 55/56] Added support for 'dsIdentifier' to generic highlighter Change-Id: I80d889c4db32d5ee69d3cfea0adadd96a44a7751 Reviewed-by: David Schulz --- src/plugins/texteditor/generichighlighter/highlighter.cpp | 4 +++- src/plugins/texteditor/generichighlighter/highlighter.h | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/plugins/texteditor/generichighlighter/highlighter.cpp b/src/plugins/texteditor/generichighlighter/highlighter.cpp index 19211acdbbf..a894b2f0923 100644 --- a/src/plugins/texteditor/generichighlighter/highlighter.cpp +++ b/src/plugins/texteditor/generichighlighter/highlighter.cpp @@ -75,7 +75,8 @@ Highlighter::Highlighter(QTextDocument *parent) : << TextEditor::C_TEXT // TODO : add style for error (eg. red underline) << TextEditor::C_FUNCTION << TextEditor::C_TEXT - << TextEditor::C_TEXT; + << TextEditor::C_TEXT + << TextEditor::C_LOCAL; } setTextFormatCategories(categories); @@ -113,6 +114,7 @@ KateFormatMap::KateFormatMap() m_ids.insert(QLatin1String("dsFunction"), Highlighter::Function); m_ids.insert(QLatin1String("dsRegionMarker"), Highlighter::RegionMarker); m_ids.insert(QLatin1String("dsOthers"), Highlighter::Others); + m_ids.insert(QLatin1String("dsIdentifier"), Highlighter::Identifier); } Q_GLOBAL_STATIC(KateFormatMap, kateFormatMap) diff --git a/src/plugins/texteditor/generichighlighter/highlighter.h b/src/plugins/texteditor/generichighlighter/highlighter.h index 968a48a6c12..ef0498036a0 100644 --- a/src/plugins/texteditor/generichighlighter/highlighter.h +++ b/src/plugins/texteditor/generichighlighter/highlighter.h @@ -83,7 +83,8 @@ public: Error, Function, RegionMarker, - Others + Others, + Identifier }; void setTabSettings(const TabSettings &ts); From cf3a9b019204e734324f9eedd128f2547e4a2e79 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Thu, 21 Nov 2013 13:49:53 +0100 Subject: [PATCH 56/56] BlackBerry: Remove some dead code Change-Id: I3b6c41f687b1763316cc05dbf66b204857e84747 Reviewed-by: David Kaspar Reviewed-by: Mehdi Fekari Reviewed-by: Fanda Vacek Reviewed-by: Eike Ziller --- src/plugins/qnx/cascadesimport/cascadesimportwizard.cpp | 5 ----- src/plugins/qnx/cascadesimport/cascadesimportwizard.h | 1 - 2 files changed, 6 deletions(-) diff --git a/src/plugins/qnx/cascadesimport/cascadesimportwizard.cpp b/src/plugins/qnx/cascadesimport/cascadesimportwizard.cpp index 3291e0c7623..d21fa5af862 100644 --- a/src/plugins/qnx/cascadesimport/cascadesimportwizard.cpp +++ b/src/plugins/qnx/cascadesimport/cascadesimportwizard.cpp @@ -129,11 +129,6 @@ CascadesImportWizard::~CascadesImportWizard() { } -Core::FeatureSet CascadesImportWizard::requiredFeatures() const -{ - return Core::FeatureSet(Constants::QNX_BB_FEATURE); -} - Core::BaseFileWizard::ExtensionList CascadesImportWizard::selectExtensions() { return Core::BaseFileWizard::ExtensionList(); diff --git a/src/plugins/qnx/cascadesimport/cascadesimportwizard.h b/src/plugins/qnx/cascadesimport/cascadesimportwizard.h index 599be858e6f..9a60db994ee 100644 --- a/src/plugins/qnx/cascadesimport/cascadesimportwizard.h +++ b/src/plugins/qnx/cascadesimport/cascadesimportwizard.h @@ -68,7 +68,6 @@ public: CascadesImportWizard(QObject *parent = 0); virtual ~CascadesImportWizard(); - Core::FeatureSet requiredFeatures() const; protected: ExtensionList selectExtensions(); QWizard* createWizardDialog(QWidget *parent,