From 5ef822da9f77e76ae0059a2cf96e82ad05654fd7 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 23 Jan 2018 16:12:47 +0100 Subject: [PATCH 01/59] AutoTest: Redo check state handling Simplify and re-arrange to avoid wrong indirections and unnecessary delegation. Beside this ensure correct check states of group nodes when adding them. Change-Id: I24a32249d785e48c9d27111d062c2a06a17327ef Reviewed-by: David Schulz --- src/plugins/autotest/qtest/qttesttreeitem.cpp | 2 +- src/plugins/autotest/testtreeitem.cpp | 69 +---------------- src/plugins/autotest/testtreeitem.h | 4 +- src/plugins/autotest/testtreemodel.cpp | 77 ++++++++++++++----- src/plugins/autotest/testtreemodel.h | 4 +- src/plugins/autotest/testtreeview.cpp | 6 +- 6 files changed, 66 insertions(+), 96 deletions(-) diff --git a/src/plugins/autotest/qtest/qttesttreeitem.cpp b/src/plugins/autotest/qtest/qttesttreeitem.cpp index a06598db74e..642bcfa21df 100644 --- a/src/plugins/autotest/qtest/qttesttreeitem.cpp +++ b/src/plugins/autotest/qtest/qttesttreeitem.cpp @@ -38,7 +38,7 @@ QtTestTreeItem::QtTestTreeItem(const QString &name, const QString &filePath, Tes : TestTreeItem(name, filePath, type) { if (type == TestDataTag) - setChecked(Qt::Checked); + setData(0, Qt::Checked, Qt::CheckStateRole); } QVariant QtTestTreeItem::data(int column, int role) const diff --git a/src/plugins/autotest/testtreeitem.cpp b/src/plugins/autotest/testtreeitem.cpp index 5c3b03724db..a597a2de7ad 100644 --- a/src/plugins/autotest/testtreeitem.cpp +++ b/src/plugins/autotest/testtreeitem.cpp @@ -106,9 +106,9 @@ QVariant TestTreeItem::data(int /*column*/, int role) const bool TestTreeItem::setData(int /*column*/, const QVariant &data, int role) { if (role == Qt::CheckStateRole) { - Qt::CheckState old = checked(); - setChecked((Qt::CheckState)data.toInt()); - return checked() != old; + Qt::CheckState old = m_checked; + m_checked = (Qt::CheckState)data.toInt(); + return m_checked != old; } return false; } @@ -168,34 +168,6 @@ bool TestTreeItem::modifyLineAndColumn(const TestParseResult *result) return hasBeenModified; } -void TestTreeItem::setChecked(const Qt::CheckState checkState) -{ - switch (m_type) { - case TestDataTag: { - m_checked = (checkState == Qt::Unchecked ? Qt::Unchecked : Qt::Checked); - if (auto parent = parentItem()) - parent->revalidateCheckState(); - break; - } - case Root: - case GroupNode: - case TestFunctionOrSet: - case TestCase: { - Qt::CheckState usedState = (checkState == Qt::Unchecked ? Qt::Unchecked : Qt::Checked); - for (int row = 0, count = childCount(); row < count; ++row) - childItem(row)->setChecked(usedState); - m_checked = usedState; - if (m_type != Root) { - if (auto parent = parentItem()) - parent->revalidateCheckState(); - } - break; - } - default: - return; - } -} - Qt::CheckState TestTreeItem::checked() const { switch (m_type) { @@ -327,41 +299,6 @@ QSet TestTreeItem::internalTargets() const return targets; } -void TestTreeItem::revalidateCheckState() -{ - const Type ttiType = type(); - if (ttiType != TestCase && ttiType != TestFunctionOrSet && ttiType != Root && ttiType != GroupNode) - return; - if (childCount() == 0) // can this happen? (we're calling revalidateCS() on parentItem() - return; - bool foundChecked = false; - bool foundUnchecked = false; - bool foundPartiallyChecked = false; - for (int row = 0, count = childCount(); row < count; ++row) { - TestTreeItem *child = childItem(row); - switch (child->type()) { - case TestDataFunction: - case TestSpecialFunction: - continue; - default: - break; - } - - foundChecked |= (child->checked() == Qt::Checked); - foundUnchecked |= (child->checked() == Qt::Unchecked); - foundPartiallyChecked |= (child->checked() == Qt::PartiallyChecked); - if (foundPartiallyChecked || (foundChecked && foundUnchecked)) { - m_checked = Qt::PartiallyChecked; - if (ttiType == TestFunctionOrSet || ttiType == TestCase || ttiType == GroupNode) - parentItem()->revalidateCheckState(); - return; - } - } - m_checked = (foundUnchecked ? Qt::Unchecked : Qt::Checked); - if (ttiType == TestFunctionOrSet || ttiType == TestCase || ttiType == GroupNode) - parentItem()->revalidateCheckState(); -} - inline bool TestTreeItem::modifyFilePath(const QString &filePath) { if (m_filePath != filePath) { diff --git a/src/plugins/autotest/testtreeitem.h b/src/plugins/autotest/testtreeitem.h index 33d7117e4fe..8234321bc03 100644 --- a/src/plugins/autotest/testtreeitem.h +++ b/src/plugins/autotest/testtreeitem.h @@ -89,7 +89,6 @@ public: unsigned column() const { return m_column; } QString proFile() const { return m_proFile; } void setProFile(const QString &proFile) { m_proFile = proFile; } - virtual void setChecked(const Qt::CheckState checked); virtual Qt::CheckState checked() const; Type type() const { return m_type; } void markForRemoval(bool mark); @@ -123,7 +122,6 @@ protected: const QString &file); private: - void revalidateCheckState(); bool modifyFilePath(const QString &filePath); bool modifyName(const QString &name); @@ -143,7 +141,7 @@ private: QString m_proFile; Status m_status = NewlyAdded; - friend class TestTreeModel; // grant access to (private) revalidateCheckState() + friend class TestTreeModel; // grant access to (protected) findChildBy() }; class TestCodeLocationAndType diff --git a/src/plugins/autotest/testtreemodel.cpp b/src/plugins/autotest/testtreemodel.cpp index 63d83e54e6a..a4dea3c8e00 100644 --- a/src/plugins/autotest/testtreemodel.cpp +++ b/src/plugins/autotest/testtreemodel.cpp @@ -108,21 +108,18 @@ bool TestTreeModel::setData(const QModelIndex &index, const QVariant &value, int if (item && item->setData(index.column(), value, role)) { emit dataChanged(index, index); if (role == Qt::CheckStateRole) { - switch (item->type()) { - case TestTreeItem::Root: - case TestTreeItem::GroupNode: - case TestTreeItem::TestCase: - if (item->childCount() > 0) - emit dataChanged(index.child(0, 0), index.child(item->childCount() - 1, 0)); - break; - case TestTreeItem::TestFunctionOrSet: - emit dataChanged(index.parent(), index.parent()); - break; - default: // avoid warning regarding unhandled enum member - break; + Qt::CheckState checked = item->checked(); + if (item->hasChildren() && checked != Qt::PartiallyChecked) { + // handle the new checkstate for children as well... + for (Utils::TreeItem *child : *item) { + const QModelIndex &idx = indexForItem(child); + setData(idx, checked ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); + } } + if (item->parent() != rootItem() && item->parentItem()->checked() != checked) + revalidateCheckState(item->parentItem()); // handle parent too + return true; } - return true; } return false; } @@ -254,7 +251,7 @@ bool TestTreeModel::sweepChildren(TestTreeItem *item) if (child->type() != TestTreeItem::Root && child->markedForRemoval()) { destroyItem(child); - item->revalidateCheckState(); + revalidateCheckState(item); hasChanged = true; } else if (child->hasChildren()) { hasChanged |= sweepChildren(child); @@ -281,6 +278,50 @@ void TestTreeModel::insertItemInParent(TestTreeItem *item, TestTreeItem *root, b } } parentNode->appendChild(item); + if (item->checked() != parentNode->checked()) + revalidateCheckState(parentNode); +} + +void TestTreeModel::revalidateCheckState(TestTreeItem *item) +{ + QTC_ASSERT(item, return); + QTC_ASSERT(item->hasChildren(), return); + const TestTreeItem::Type type = item->type(); + if (type == TestTreeItem::TestSpecialFunction || type == TestTreeItem::TestDataFunction + || type == TestTreeItem::TestDataTag) { + return; + } + const Qt::CheckState oldState = (Qt::CheckState)item->data(0, Qt::CheckStateRole).toInt(); + Qt::CheckState newState = Qt::Checked; + bool foundChecked = false; + bool foundUnchecked = false; + bool foundPartiallyChecked = false; + for (int row = 0, count = item->childCount(); row < count; ++row) { + TestTreeItem *child = item->childItem(row); + switch (child->type()) { + case TestTreeItem::TestDataFunction: + case TestTreeItem::TestSpecialFunction: + continue; + default: + break; + } + + foundChecked |= (child->checked() == Qt::Checked); + foundUnchecked |= (child->checked() == Qt::Unchecked); + foundPartiallyChecked |= (child->checked() == Qt::PartiallyChecked); + if (foundPartiallyChecked || (foundChecked && foundUnchecked)) { + newState = Qt::PartiallyChecked; + break; + } + } + if (newState != Qt::PartiallyChecked) + newState = foundUnchecked ? Qt::Unchecked : Qt::Checked; + if (oldState != newState) { + item->setData(0, newState, Qt::CheckStateRole); + emit dataChanged(item->index(), item->index()); + if (item->parent() != rootItem() && item->parentItem()->checked() != newState) + revalidateCheckState(item->parentItem()); + } } void TestTreeModel::onParseResultReady(const TestParseResultPtr result) @@ -321,12 +362,6 @@ void TestTreeModel::handleParseResult(const TestParseResult *result, TestTreeIte QTC_ASSERT(newItem, return); insertItemInParent(newItem, parentNode, groupingEnabled); - // new items are checked by default - revalidation of parents might be necessary - if (parentNode->checked() != Qt::Checked) { - parentNode->revalidateCheckState(); - const QModelIndex &idx = indexForItem(parentNode); - emit dataChanged(idx, idx); - } } void TestTreeModel::removeAllTestItems() @@ -335,7 +370,7 @@ void TestTreeModel::removeAllTestItems() item->removeChildren(); TestTreeItem *testTreeItem = static_cast(item); if (testTreeItem->checked() == Qt::PartiallyChecked) - testTreeItem->setChecked(Qt::Checked); + testTreeItem->setData(0, Qt::Checked, Qt::CheckStateRole); } emit testTreeModelChanged(); } diff --git a/src/plugins/autotest/testtreemodel.h b/src/plugins/autotest/testtreemodel.h index a47fc9bea77..58c9b279aaa 100644 --- a/src/plugins/autotest/testtreemodel.h +++ b/src/plugins/autotest/testtreemodel.h @@ -87,8 +87,8 @@ private: void removeTestRootNodes(); void removeFiles(const QStringList &files); bool sweepChildren(TestTreeItem *item); - static void insertItemInParent(TestTreeItem *item, TestTreeItem *root, bool groupingEnabled); - + void insertItemInParent(TestTreeItem *item, TestTreeItem *root, bool groupingEnabled); + void revalidateCheckState(TestTreeItem *item); explicit TestTreeModel(QObject *parent = 0); void setupParsingConnections(); diff --git a/src/plugins/autotest/testtreeview.cpp b/src/plugins/autotest/testtreeview.cpp index a6bbe91b909..5c285ee229a 100644 --- a/src/plugins/autotest/testtreeview.cpp +++ b/src/plugins/autotest/testtreeview.cpp @@ -71,7 +71,7 @@ void TestTreeView::changeCheckStateAll(const Qt::CheckState checkState) int funcCount = model->rowCount(classesIndex); TestTreeItem *item = static_cast(classesIndex.internalPointer()); if (item) { - item->setChecked(checkState); + item->setData(0, checkState, Qt::CheckStateRole); if (!item->childCount()) last = classesIndex; } @@ -79,12 +79,12 @@ void TestTreeView::changeCheckStateAll(const Qt::CheckState checkState) last = model->index(functionRow, 0, classesIndex); TestTreeItem *item = static_cast(last.internalPointer()); if (item) - item->setChecked(checkState); + item->setData(0, checkState, Qt::CheckStateRole); } } if (count == 0) { if (auto item = static_cast(currentRootIndex.internalPointer())) - item->setChecked(checkState); + item->setData(0, checkState, Qt::CheckStateRole); } emit dataChanged(currentRootIndex, last); } From 78b9d642e3faccfa6872780e8e52923b9bdc970d Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 25 Jan 2018 13:55:20 +0100 Subject: [PATCH 02/59] Doc: Describe new locator filters, b and t For locating bookmarks (b) and triggering menu commands (t). Change-Id: I4c2ee705a5e87a86a44bdeb8e2c9ca04cefff112 Reviewed-by: Eike Ziller --- doc/src/editors/creator-editors.qdoc | 9 +++++++++ doc/src/howto/creator-sessions.qdoc | 3 +++ 2 files changed, 12 insertions(+) diff --git a/doc/src/editors/creator-editors.qdoc b/doc/src/editors/creator-editors.qdoc index 72023523c3b..658a4d686e2 100644 --- a/doc/src/editors/creator-editors.qdoc +++ b/doc/src/editors/creator-editors.qdoc @@ -2851,6 +2851,9 @@ \li Locating files belonging to your project (\c {p}), such as source, header resource, and \c {.ui} files, or to any project (\c {a}) + \li Locating bookmarks (\c {b}). + For more information, see \l{Using Bookmarks}. + \li Locating class (\c {c}), enum, and function (m) definitions in your project or anywhere referenced from your project (\c {:}) @@ -2874,6 +2877,8 @@ \li Executing version control system commands (\c {git}). For more information, see \l{Using Version Control Systems} + \li Triggering menu items from the main menu (\c {t}) + \li Running external tools (\c x) \endlist @@ -2914,6 +2919,10 @@ followed by \key Space, followed by path and file name, and then press \key Enter. + You can use the filter that triggers menu commands to open sessions. Enter + \c {t yoursess} or \c {t sess yoursess} to trigger \uicontrol File > + \uicontrol Sessions > \e yoursessionname. + By default, the following filters are enabled and you do not need to use their prefixes explicitly: diff --git a/doc/src/howto/creator-sessions.qdoc b/doc/src/howto/creator-sessions.qdoc index dc73f9bceb1..bb627e607e2 100644 --- a/doc/src/howto/creator-sessions.qdoc +++ b/doc/src/howto/creator-sessions.qdoc @@ -98,6 +98,9 @@ \image qtcreator-welcome-session.png + You can also use the \c t locator filter to open a session. For more + information, see \l{Searching with the Locator}. + To view more information about a session, select the down arrow icon that appears when you move the mouse cursor over the session name. Select actions to clone, rename, and delete sessions. From a5b82fe827f553bbb4b0ae117f5799fc85cb9a3a Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Wed, 17 Jan 2018 09:51:45 +0100 Subject: [PATCH 03/59] AutoTest: Fix running test cases with grouping When gathering information for running tests we need to take the grouping into account if enabled. This patch amends 4eabcda3a1ccce6cd503a29c86f65ce1c024a5d3. Task-number: QTCREATORBUG-17979 Change-Id: I27c17a5de8596c95f3b207530560d2a7c2cb5e99 Reviewed-by: Christian Stenger Reviewed-by: David Schulz --- src/plugins/autotest/gtest/gtesttreeitem.cpp | 134 ++++++++---------- src/plugins/autotest/gtest/gtesttreeitem.h | 1 + src/plugins/autotest/qtest/qttesttreeitem.cpp | 112 ++++++++------- .../autotest/quick/quicktesttreeitem.cpp | 111 +++++++++------ 4 files changed, 185 insertions(+), 173 deletions(-) diff --git a/src/plugins/autotest/gtest/gtesttreeitem.cpp b/src/plugins/autotest/gtest/gtesttreeitem.cpp index e31bd5ec3fb..4e1f7737024 100644 --- a/src/plugins/autotest/gtest/gtesttreeitem.cpp +++ b/src/plugins/autotest/gtest/gtesttreeitem.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include namespace Autotest { @@ -122,35 +123,67 @@ TestConfiguration *GTestTreeItem::debugConfiguration() const return config; } -QList GTestTreeItem::getAllTestConfigurations() const +struct TestCases +{ + QStringList filters; + int testSetCount = 0; + QSet internalTargets; +}; + +static void collectTestInfo(const GTestTreeItem *item, + QHash &testCasesForProFile, + bool ignoreCheckState) +{ + QTC_ASSERT(item, return); + if (item->type() == TestTreeItem::GroupNode) { + for (int row = 0, count = item->childCount(); row < count; ++row) { + auto child = static_cast(item->childItem(row)); + collectTestInfo(child, testCasesForProFile, ignoreCheckState); + } + return; + } + const int childCount = item->childCount(); + QTC_ASSERT(childCount != 0, return); + QTC_ASSERT(item->type() == TestTreeItem::TestCase, return); + if (ignoreCheckState || item->checked() == Qt::Checked) { + const QString &projectFile = item->childItem(0)->proFile(); + testCasesForProFile[projectFile].filters.append( + gtestFilter(item->state()).arg(item->name()).arg('*')); + testCasesForProFile[projectFile].testSetCount += childCount - 1; + testCasesForProFile[projectFile].internalTargets.unite(item->internalTargets()); + } else if (item->checked() == Qt::PartiallyChecked) { + for (int childRow = 0; childRow < childCount; ++childRow) { + const TestTreeItem *child = item->childItem(childRow); + QTC_ASSERT(child->type() == TestTreeItem::TestFunctionOrSet, continue); + if (child->checked() == Qt::Checked) { + testCasesForProFile[child->proFile()].filters.append( + gtestFilter(item->state()).arg(item->name()).arg(child->name())); + testCasesForProFile[child->proFile()].internalTargets.unite( + child->internalTargets()); + } + } + } +} + +QList GTestTreeItem::getTestConfigurations(bool ignoreCheckState) const { QList result; - ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject(); if (!project || type() != Root) return result; - QHash proFilesWithTestSets; - QHash > proFilesWithInternalTargets; + QHash testCasesForProFile; for (int row = 0, count = childCount(); row < count; ++row) { - const GTestTreeItem *child = static_cast(childItem(row)); - - const int grandChildCount = child->childCount(); - for (int grandChildRow = 0; grandChildRow < grandChildCount; ++grandChildRow) { - const TestTreeItem *grandChild = child->childItem(grandChildRow); - const QString &key = grandChild->proFile(); - proFilesWithTestSets.insert(key, proFilesWithTestSets[key] + 1); - proFilesWithInternalTargets[key].unite(grandChild->internalTargets()); - } + auto child = static_cast(childItem(row)); + collectTestInfo(child, testCasesForProFile, ignoreCheckState); } - QHash::ConstIterator it = proFilesWithTestSets.begin(); - QHash::ConstIterator end = proFilesWithTestSets.end(); - for ( ; it != end; ++it) { - const QSet &internalTargets = proFilesWithInternalTargets[it.key()]; - for (const QString &target : internalTargets) { + for (auto it = testCasesForProFile.begin(), end = testCasesForProFile.end(); it != end; ++it) { + for (const QString &target : Utils::asConst(it.value().internalTargets)) { GTestConfiguration *tc = new GTestConfiguration; - tc->setTestCaseCount(it.value()); + if (!ignoreCheckState) + tc->setTestCases(it.value().filters); + tc->setTestCaseCount(tc->testCaseCount() + it.value().testSetCount); tc->setProjectFile(it.key()); tc->setProject(project); tc->setInternalTarget(target); @@ -161,69 +194,14 @@ QList GTestTreeItem::getAllTestConfigurations() const return result; } -struct TestCases +QList GTestTreeItem::getAllTestConfigurations() const { - QStringList filters; - int additionalTestCaseCount = 0; -}; + return getTestConfigurations(true); +} QList GTestTreeItem::getSelectedTestConfigurations() const { - QList result; - ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject(); - if (!project || type() != Root) - return result; - - QHash proFilesWithCheckedTestSets; - QHash > proFilesWithInternalTargets; - for (int row = 0, count = childCount(); row < count; ++row) { - const GTestTreeItem *child = static_cast(childItem(row)); - - const int grandChildCount = child->childCount(); - QTC_ASSERT(grandChildCount != 0, continue); - - switch (child->checked()) { - case Qt::Unchecked: - continue; - case Qt::Checked: { - auto &testCases = proFilesWithCheckedTestSets[child->childItem(0)->proFile()]; - testCases.filters.append(gtestFilter(child->state()).arg(child->name()).arg('*')); - testCases.additionalTestCaseCount += grandChildCount - 1; - proFilesWithInternalTargets[child->childItem(0)->proFile()].unite( - child->internalTargets()); - break; - } - case Qt::PartiallyChecked: { - for (int grandChildRow = 0; grandChildRow < grandChildCount; ++grandChildRow) { - const TestTreeItem *grandChild = child->childItem(grandChildRow); - if (grandChild->checked() == Qt::Checked) { - proFilesWithCheckedTestSets[grandChild->proFile()].filters.append( - gtestFilter(child->state()).arg(child->name()).arg(grandChild->name())); - proFilesWithInternalTargets[grandChild->proFile()].unite( - grandChild->internalTargets()); - } - } - break; - } - } - } - - QHash::ConstIterator it = proFilesWithCheckedTestSets.begin(); - QHash::ConstIterator end = proFilesWithCheckedTestSets.end(); - for ( ; it != end; ++it) { - const QSet &internalTargets = proFilesWithInternalTargets[it.key()]; - for (const QString &target : internalTargets) { - GTestConfiguration *tc = new GTestConfiguration; - tc->setTestCases(it.value().filters); - tc->setTestCaseCount(tc->testCaseCount() + it.value().additionalTestCaseCount); - tc->setProjectFile(it.key()); - tc->setProject(project); - tc->setInternalTarget(target); - result << tc; - } - } - - return result; + return getTestConfigurations(false); } TestTreeItem *GTestTreeItem::find(const TestParseResult *result) diff --git a/src/plugins/autotest/gtest/gtesttreeitem.h b/src/plugins/autotest/gtest/gtesttreeitem.h index 7aad3563dd8..81a89e45ec8 100644 --- a/src/plugins/autotest/gtest/gtesttreeitem.h +++ b/src/plugins/autotest/gtest/gtesttreeitem.h @@ -71,6 +71,7 @@ public: private: bool modifyTestSetContent(const GTestParseResult *result); + QList getTestConfigurations(bool ignoreCheckState) const; GTestTreeItem::TestStates m_state; }; diff --git a/src/plugins/autotest/qtest/qttesttreeitem.cpp b/src/plugins/autotest/qtest/qttesttreeitem.cpp index 642bcfa21df..1502a0954bc 100644 --- a/src/plugins/autotest/qtest/qttesttreeitem.cpp +++ b/src/plugins/autotest/qtest/qttesttreeitem.cpp @@ -139,6 +139,53 @@ TestConfiguration *QtTestTreeItem::testConfiguration() const return config; } +static void fillTestConfigurationsFromCheckState(const TestTreeItem *item, + QList &testConfigurations) +{ + QTC_ASSERT(item, return); + if (item->type() == TestTreeItem::GroupNode) { + for (int row = 0, count = item->childCount(); row < count; ++row) + fillTestConfigurationsFromCheckState(item->childItem(row), testConfigurations); + return; + } + QTC_ASSERT(item->type() == TestTreeItem::TestCase, return); + QtTestConfiguration *testConfig = nullptr; + switch (item->checked()) { + case Qt::Unchecked: + return; + case Qt::Checked: + testConfig = static_cast(item->testConfiguration()); + QTC_ASSERT(testConfig, return); + testConfigurations << testConfig; + return; + case Qt::PartiallyChecked: + default: + int grandChildCount = item->childCount(); + QStringList testCases; + for (int grandChildRow = 0; grandChildRow < grandChildCount; ++grandChildRow) { + const TestTreeItem *grandChild = item->childItem(grandChildRow); + if (grandChild->checked() == Qt::Checked) { + testCases << grandChild->name(); + } else if (grandChild->checked() == Qt::PartiallyChecked) { + const int dtCount = grandChild->childCount(); + const QString funcName = grandChild->name(); + for (int dtRow = 0; dtRow < dtCount; ++dtRow) { + const TestTreeItem *dataTag = grandChild->childItem(dtRow); + if (dataTag->checked() == Qt::Checked) + testCases << funcName + ':' + dataTag->name(); + } + } + } + + testConfig = new QtTestConfiguration(); + testConfig->setTestCases(testCases); + testConfig->setProjectFile(item->proFile()); + testConfig->setProject(ProjectExplorer::SessionManager::startupProject()); + testConfig->setInternalTargets(item->internalTargets()); + testConfigurations << testConfig; + } +} + TestConfiguration *QtTestTreeItem::debugConfiguration() const { QtTestConfiguration *config = static_cast(testConfiguration()); @@ -157,13 +204,19 @@ QList QtTestTreeItem::getAllTestConfigurations() const for (int row = 0, count = childCount(); row < count; ++row) { const TestTreeItem *child = childItem(row); - - TestConfiguration *tc = new QtTestConfiguration(); - tc->setTestCaseCount(child->childCount()); - tc->setProjectFile(child->proFile()); - tc->setProject(project); - tc->setInternalTargets(child->internalTargets()); - result << tc; + TestConfiguration *tc = nullptr; + if (child->type() == TestCase) { + tc = child->testConfiguration(); + QTC_ASSERT(tc, continue); + result << tc; + } else if (child->type() == GroupNode) { + const int groupChildCount = child->childCount(); + for (int groupChildRow = 0; groupChildRow < groupChildCount; ++groupChildRow) { + tc = child->childItem(groupChildRow)->testConfiguration(); + QTC_ASSERT(tc, continue); + result << tc; + } + } } return result; } @@ -175,49 +228,8 @@ QList QtTestTreeItem::getSelectedTestConfigurations() const if (!project || type() != Root) return result; - QtTestConfiguration *testConfiguration = nullptr; - - for (int row = 0, count = childCount(); row < count; ++row) { - const TestTreeItem *child = childItem(row); - - switch (child->checked()) { - case Qt::Unchecked: - continue; - case Qt::Checked: - testConfiguration = new QtTestConfiguration(); - testConfiguration->setTestCaseCount(child->childCount()); - testConfiguration->setProjectFile(child->proFile()); - testConfiguration->setProject(project); - testConfiguration->setInternalTargets(child->internalTargets()); - result << testConfiguration; - continue; - case Qt::PartiallyChecked: - default: - int grandChildCount = child->childCount(); - QStringList testCases; - for (int grandChildRow = 0; grandChildRow < grandChildCount; ++grandChildRow) { - const TestTreeItem *grandChild = child->childItem(grandChildRow); - if (grandChild->checked() == Qt::Checked) { - testCases << grandChild->name(); - } else if (grandChild->checked() == Qt::PartiallyChecked) { - const int dtCount = grandChild->childCount(); - const QString funcName = grandChild->name(); - for (int dtRow = 0; dtRow < dtCount; ++dtRow) { - const TestTreeItem *dataTag = grandChild->childItem(dtRow); - if (dataTag->checked() == Qt::Checked) - testCases << funcName + ':' + dataTag->name(); - } - } - } - - testConfiguration = new QtTestConfiguration(); - testConfiguration->setTestCases(testCases); - testConfiguration->setProjectFile(child->proFile()); - testConfiguration->setProject(project); - testConfiguration->setInternalTargets(child->internalTargets()); - result << testConfiguration; - } - } + for (int row = 0, count = childCount(); row < count; ++row) + fillTestConfigurationsFromCheckState(childItem(row), result); return result; } diff --git a/src/plugins/autotest/quick/quicktesttreeitem.cpp b/src/plugins/autotest/quick/quicktesttreeitem.cpp index 098e7c37689..a1b04f33fe2 100644 --- a/src/plugins/autotest/quick/quicktesttreeitem.cpp +++ b/src/plugins/autotest/quick/quicktesttreeitem.cpp @@ -153,6 +153,43 @@ TestConfiguration *QuickTestTreeItem::testConfiguration() const return config; } +static void testConfigurationFromCheckState(const TestTreeItem *item, + QHash &foundProFiles) +{ + QTC_ASSERT(item, return); + if (item->type() == TestTreeItem::GroupNode) { + for (int row = 0, count = item->childCount(); row < count; ++row) + testConfigurationFromCheckState(item->childItem(row), foundProFiles); + return; + } + QTC_ASSERT(item->type() == TestTreeItem::TestCase, return); + QuickTestConfiguration *tc = nullptr; + if (item->checked() == Qt::Unchecked) + return; + + QStringList testFunctions; + const int childCount = item->childCount(); + for (int childRow = 0; childRow < childCount; ++childRow) { + const TestTreeItem *child = item->childItem(childRow); + if (child->checked() != Qt::Checked || child->type() != TestTreeItem::TestFunctionOrSet) + continue; + testFunctions << item->name() + "::" + child->name(); + } + if (foundProFiles.contains(item->proFile())) { + tc = foundProFiles[item->proFile()]; + QStringList oldFunctions(tc->testCases()); + oldFunctions << testFunctions; + tc->setTestCases(oldFunctions); + } else { + tc = new QuickTestConfiguration; + tc->setTestCases(testFunctions); + tc->setProjectFile(item->proFile()); + tc->setProject(ProjectExplorer::SessionManager::startupProject()); + tc->setInternalTargets(item->internalTargets()); + foundProFiles.insert(item->proFile(), tc); + } +} + TestConfiguration *QuickTestTreeItem::debugConfiguration() const { QuickTestConfiguration *config = static_cast(testConfiguration()); @@ -161,6 +198,17 @@ TestConfiguration *QuickTestTreeItem::debugConfiguration() const return config; } +struct Tests { + int testCount = 0; + QSet internalTargets; +}; + +static void addTestsForItem(Tests &tests, const TestTreeItem *item) +{ + tests.testCount += item->childCount(); + tests.internalTargets = item->internalTargets(); +} + QList QuickTestTreeItem::getAllTestConfigurations() const { QList result; @@ -169,8 +217,7 @@ QList QuickTestTreeItem::getAllTestConfigurations() const if (!project || type() != Root) return result; - QHash foundProFiles; - QHash > proFilesWithTargets; + QHash testsForProfile; for (int row = 0, count = childCount(); row < count; ++row) { const TestTreeItem *child = childItem(row); // unnamed Quick Tests must be handled separately @@ -178,25 +225,29 @@ QList QuickTestTreeItem::getAllTestConfigurations() const for (int childRow = 0, ccount = child->childCount(); childRow < ccount; ++ childRow) { const TestTreeItem *grandChild = child->childItem(childRow); const QString &proFile = grandChild->proFile(); - foundProFiles.insert(proFile, foundProFiles[proFile] + 1); - proFilesWithTargets.insert(proFile, grandChild->internalTargets()); + ++(testsForProfile[proFile].testCount); + testsForProfile[proFile].internalTargets = grandChild->internalTargets(); } continue; } // named Quick Test - const QString &proFile = child->proFile(); - foundProFiles.insert(proFile, foundProFiles[proFile] + child->childCount()); - proFilesWithTargets.insert(proFile, child->internalTargets()); + if (child->type() == TestCase) { + addTestsForItem(testsForProfile[child->proFile()], child); + } else if (child->type() == GroupNode) { + const int groupCount = child->childCount(); + for (int groupRow = 0; groupRow < groupCount; ++groupRow) { + const TestTreeItem *grandChild = child->childItem(groupRow); + addTestsForItem(testsForProfile[grandChild->proFile()], grandChild); + } + } } // create TestConfiguration for each project file - QHash::ConstIterator it = foundProFiles.begin(); - QHash::ConstIterator end = foundProFiles.end(); - for ( ; it != end; ++it) { + for (auto it = testsForProfile.begin(), end = testsForProfile.end(); it != end; ++it) { QuickTestConfiguration *tc = new QuickTestConfiguration; - tc->setTestCaseCount(it.value()); + tc->setTestCaseCount(it.value().testCount); tc->setProjectFile(it.key()); tc->setProject(project); - tc->setInternalTargets(proFilesWithTargets[it.key()]); + tc->setInternalTargets(it.value().internalTargets); result << tc; } return result; @@ -209,7 +260,6 @@ QList QuickTestTreeItem::getSelectedTestConfigurations() co if (!project || type() != Root) return result; - QuickTestConfiguration *tc = nullptr; QHash foundProFiles; for (int row = 0, count = childCount(); row < count; ++row) { @@ -219,39 +269,10 @@ QList QuickTestTreeItem::getSelectedTestConfigurations() co continue; // named Quick Tests - switch (child->checked()) { - case Qt::Unchecked: - continue; - case Qt::Checked: - case Qt::PartiallyChecked: - default: - QStringList testFunctions; - int grandChildCount = child->childCount(); - for (int grandChildRow = 0; grandChildRow < grandChildCount; ++grandChildRow) { - const TestTreeItem *grandChild = child->childItem(grandChildRow); - if (grandChild->checked() != Qt::Checked || grandChild->type() != TestFunctionOrSet) - continue; - testFunctions << child->name() + "::" + grandChild->name(); - } - if (foundProFiles.contains(child->proFile())) { - tc = foundProFiles[child->proFile()]; - QStringList oldFunctions(tc->testCases()); - oldFunctions << testFunctions; - tc->setTestCases(oldFunctions); - } else { - tc = new QuickTestConfiguration; - tc->setTestCases(testFunctions); - tc->setProjectFile(child->proFile()); - tc->setProject(project); - tc->setInternalTargets(child->internalTargets()); - foundProFiles.insert(child->proFile(), tc); - } - break; - } + testConfigurationFromCheckState(child, foundProFiles); } - QHash::ConstIterator it = foundProFiles.begin(); - QHash::ConstIterator end = foundProFiles.end(); - for ( ; it != end; ++it) { + + for (auto it = foundProFiles.begin(), end = foundProFiles.end(); it != end; ++it) { QuickTestConfiguration *config = it.value(); if (!config->unnamedOnly()) result << config; From 1838057c222a2fa5c8d21f26dc60e8a65f3b486b Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 25 Jan 2018 15:55:42 +0100 Subject: [PATCH 04/59] qbs build: Fix clang Probe Due to the way JavaScript's split() function works, an empty string could end up in the list of dynamic libraries, causing a warning when building the pchmanagerbackend. Change-Id: I5af834d4f98af379ee346556b47c57cabf8c98db Reviewed-by: Nikolai Kosjar --- qbs/modules/libclang/functions.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/qbs/modules/libclang/functions.js b/qbs/modules/libclang/functions.js index 29d093dcada..7d5e4149fca 100644 --- a/qbs/modules/libclang/functions.js +++ b/qbs/modules/libclang/functions.js @@ -16,7 +16,10 @@ function readOutput(executable, args) function readListOutput(executable, args) { - return readOutput(executable, args).split(/\s+/); + var list = readOutput(executable, args).split(/\s+/); + if (!list[list.length - 1]) + list.pop(); + return list; } function isSuitableLLVMConfig(llvmConfigCandidate, qtcFunctions) From 4ebe9458c7fa639ddc580e67f291b7404ccd296d Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Tue, 23 Jan 2018 20:08:47 +0100 Subject: [PATCH 05/59] QmlDesigner: Fix testfile for states Change-Id: Ib90334d6f566f0ae5d3a5f4961e23af116d34053 Reviewed-by: Thomas Hartmann --- tests/manual/qml/testfiles_quick2/states.qml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/tests/manual/qml/testfiles_quick2/states.qml b/tests/manual/qml/testfiles_quick2/states.qml index b385b00acda..97ff32143ac 100644 --- a/tests/manual/qml/testfiles_quick2/states.qml +++ b/tests/manual/qml/testfiles_quick2/states.qml @@ -29,6 +29,12 @@ Rectangle { id: rect width: 200 height: 200 + Image { + id: image1 + x: 41 + y: 46 + source: "images/qtcreator.png" + } Text { id: textItem x: 66 @@ -43,7 +49,7 @@ Rectangle { color: "blue" } PropertyChanges { - target: text + target: textItem text: "State1" } }, @@ -54,16 +60,9 @@ Rectangle { color: "gray" } PropertyChanges { - target: text + target: textItem text: "State2" } } ] - - Image { - id: image1 - x: 41 - y: 46 - source: "images/qtcreator.png" - } } From e7bc21e912a0f95b6b3f6d5c25192e914ab5625a Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 25 Jan 2018 16:41:24 +0100 Subject: [PATCH 06/59] QmlDesigner: Allow adding of resources * Allows adding of multiple files * Files are copied * Files are added to the project * Supported file types can be extended Change-Id: I41d1d18c4a3fc9c6c50e0629070d9a2cbf082976 Reviewed-by: Tim Jenssen --- .../componentcore/componentcore_constants.h | 2 + .../componentcore/designeractionmanager.cpp | 26 +++++++ .../componentcore/designeractionmanager.h | 24 +++++++ .../componentcore/modelnodeoperations.cpp | 25 +++++++ .../componentcore/modelnodeoperations.h | 2 +- .../itemlibrary/itemlibrarywidget.cpp | 67 ++++++++++++++++++- .../itemlibrary/itemlibrarywidget.h | 2 + src/plugins/qmldesigner/designmodewidget.cpp | 6 +- 8 files changed, 150 insertions(+), 4 deletions(-) diff --git a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h index 0035b90fad3..028d3a21b4b 100644 --- a/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h +++ b/src/plugins/qmldesigner/components/componentcore/componentcore_constants.h @@ -164,6 +164,8 @@ const int priorityGoIntoComponent = 40; const int priorityGenericToolBar = 50; const int priorityLast = 60; +const char addImagesDisplayString[] = QT_TRANSLATE_NOOP("QmlDesignerAddResources", "Image Files"); + } //ComponentCoreConstants } //QmlDesigner diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index 629f290026e..b658f9fe407 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -178,6 +178,16 @@ void DesignerActionManager::setupContext() m_designerActionManagerView->setupContext(); } +QList DesignerActionManager::addResourceHandler() const +{ + return m_addResourceHandler; +} + +void DesignerActionManager::registerAddResourceHandler(const AddResourceHandler &handler) +{ + m_addResourceHandler.append(handler); +} + class VisiblityModelNodeAction : public ModelNodeContextMenuAction { public: @@ -983,6 +993,22 @@ void DesignerActionManager::createDefaultDesignerActions() addDesignerAction(new ChangeStyleAction()); } +void DesignerActionManager::createDefaultAddResourceHandler() +{ + registerAddResourceHandler(AddResourceHandler(ComponentCoreConstants::addImagesDisplayString, + "*.png", + ModelNodeOperations::addImageToProject)); + registerAddResourceHandler(AddResourceHandler(ComponentCoreConstants::addImagesDisplayString, + "*.jpg", + ModelNodeOperations::addImageToProject)); + registerAddResourceHandler(AddResourceHandler(ComponentCoreConstants::addImagesDisplayString, + "*.bmp", + ModelNodeOperations::addImageToProject)); + registerAddResourceHandler(AddResourceHandler(ComponentCoreConstants::addImagesDisplayString, + "*.svg", + ModelNodeOperations::addImageToProject)); +} + void DesignerActionManager::addDesignerAction(ActionInterface *newAction) { m_designerActions.append(QSharedPointer(newAction)); diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h index 6cd7d7f2e2e..b4531db8959 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h @@ -42,6 +42,25 @@ namespace QmlDesigner { class DesignerActionManagerView; +typedef std::function AddResourceOperation; + +struct AddResourceHandler +{ +public: + AddResourceHandler( const QString &_category, + const QString &_filter, + AddResourceOperation _operation) + : category(_category) + ,filter(_filter) + ,operation(_operation) + { + } + + QString category; + QString filter; + AddResourceOperation operation; +}; + class DesignerActionToolBar : public Utils::StyledBar { public: @@ -64,6 +83,7 @@ public: QList designerActions() const; void createDefaultDesignerActions(); + void createDefaultAddResourceHandler(); DesignerActionManagerView *view(); DesignerActionToolBar *createToolBar(QWidget *parent = 0) const; @@ -76,9 +96,13 @@ public: DesignerActionManager(const DesignerActionManager&) = delete; DesignerActionManager & operator=(const DesignerActionManager&) = delete; + QList addResourceHandler() const; + void registerAddResourceHandler(const AddResourceHandler &handler); + private: QList > m_designerActions; DesignerActionManagerView *m_designerActionManagerView; + QList m_addResourceHandler; }; } //QmlDesigner diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp index 85e67747502..0861597828f 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp @@ -56,6 +56,10 @@ #include +#include +#include +#include + #include #include @@ -1020,6 +1024,27 @@ void addTabBarToStackedContainer(const SelectionContext &selectionContext) } } +bool addImageToProject(const QString &fileName, const QString &directory) +{ + const QString targetFile = directory + "/" + QFileInfo(fileName).fileName(); + const bool success = QFile::copy(fileName, targetFile); + + auto document = QmlDesignerPlugin::instance()->currentDesignDocument(); + + QTC_ASSERT(document, return false); + + if (success) { + ProjectExplorer::Node *node = ProjectExplorer::ProjectTree::nodeForFile(document->fileName()); + if (node) { + ProjectExplorer::FolderNode *containingFolder = node->parentFolderNode(); + if (containingFolder) + containingFolder->addFiles(QStringList(targetFile)); + } + } + + return success; +} + } // namespace Mode } //QmlDesigner diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h index 39dfef4975a..0aec320316e 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h @@ -72,7 +72,7 @@ void addItemToStackedContainer(const SelectionContext &selectionContext); void increaseIndexOfStackedContainer(const SelectionContext &selectionContext); void decreaseIndexOfStackedContainer(const SelectionContext &selectionContext); void addTabBarToStackedContainer(const SelectionContext &selectionContext); - +bool addImageToProject(const QString &fileName, const QString &directory); } // namespace ModelNodeOperationso } //QmlDesigner diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp index 81313c43022..2016fd909c1 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp @@ -45,9 +45,11 @@ #include #include +#include #include #include +#include #include #include #include @@ -76,6 +78,7 @@ ItemLibraryWidget::ItemLibraryWidget(QWidget *parent) : m_itemViewQuickWidget(new QQuickWidget), m_resourcesView(new ItemLibraryResourceView(this)), m_importTagsWidget(new QWidget(this)), + m_addResourcesWidget(new QWidget(this)), m_filterFlag(QtBasic) { m_compressionTimer.setInterval(200); @@ -148,7 +151,8 @@ ItemLibraryWidget::ItemLibraryWidget(QWidget *parent) : layout->addWidget(spacer, 1, 0); layout->addWidget(lineEditFrame, 2, 0, 1, 1); layout->addWidget(m_importTagsWidget.data(), 3, 0, 1, 1); - layout->addWidget(m_stackedWidget.data(), 4, 0, 1, 1); + layout->addWidget(m_addResourcesWidget.data(), 4, 0, 1, 1); + layout->addWidget(m_stackedWidget.data(), 5, 0, 1, 1); setSearchFilter(QString()); @@ -164,6 +168,20 @@ ItemLibraryWidget::ItemLibraryWidget(QWidget *parent) : auto *flowLayout = new Utils::FlowLayout(m_importTagsWidget.data()); flowLayout->setMargin(4); + m_addResourcesWidget->setVisible(false); + flowLayout = new Utils::FlowLayout(m_addResourcesWidget.data()); + flowLayout->setMargin(4); + auto button = new QToolButton(m_addResourcesWidget.data()); + auto font = button->font(); + font.setPixelSize(9); + button->setFont(font); + button->setIcon(Utils::Icons::PLUS.icon()); + button->setText(tr("Add New Resources...")); + button->setToolTip(tr("Add new resources to project.")); + button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + flowLayout->addWidget(button); + connect(button, &QToolButton::clicked, this, &ItemLibraryWidget::addResources); + // init the first load of the QML UI elements reloadQmlSource(); } @@ -232,12 +250,15 @@ void ItemLibraryWidget::setCurrentIndexOfStackedWidget(int index) if (index == 2) { m_filterLineEdit->setVisible(false); m_importTagsWidget->setVisible(true); + m_addResourcesWidget->setVisible(false); } if (index == 1) { m_filterLineEdit->setVisible(true); m_importTagsWidget->setVisible(false); + m_addResourcesWidget->setVisible(true); } else { m_filterLineEdit->setVisible(true); m_importTagsWidget->setVisible(true); + m_addResourcesWidget->setVisible(false); } m_stackedWidget->setCurrentIndex(index); @@ -279,6 +300,7 @@ void ItemLibraryWidget::setupImportTagWidget() button->setIcon(Utils::Icons::PLUS.icon()); button->setText(import); button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + button->setToolTip(tr("Add import %1").arg(import)); connect(button, &QToolButton::clicked, this, [this, import]() { addPossibleImport(import); }); @@ -366,4 +388,47 @@ void ItemLibraryWidget::addPossibleImport(const QString &name) QmlDesignerPlugin::instance()->currentDesignDocument()->updateSubcomponentManager(); } +void ItemLibraryWidget::addResources() +{ + auto document = QmlDesignerPlugin::instance()->currentDesignDocument(); + + QTC_ASSERT(document, return); + + QList handlers = QmlDesignerPlugin::instance()->viewManager().designerActionManager().addResourceHandler(); + QMultiMap map; + for (const AddResourceHandler &handler : handlers) { + map.insert(handler.category, handler.filter); + } + + QStringList filters; + + for (const QString &key : map.uniqueKeys()) { + QString str = key + " ("; + str.append(map.values(key).join(" ")); + str.append(")"); + filters.append(str); + } + + const auto fileNames = QFileDialog::getOpenFileNames(this, + tr("Add Resources"), + document->fileName().parentDir().toString(), + filters.join(";;")); + + if (!fileNames.isEmpty()) { + const auto directory = QFileDialog::getExistingDirectory(this, + tr("Target Direcotry"), + document->fileName().parentDir().toString()); + + for (const QString &fileName : fileNames) { + for (const AddResourceHandler &handler : handlers) { + QString postfix = handler.filter; + postfix.remove(0, 1); + if (fileName.endsWith(postfix)) + if (!handler.operation(fileName, directory)) + Core::AsynchronousMessageBox::warning(tr("Failed to add File"), tr("Could not add %1 to project.").arg(fileName)); + } + } + } +} + } diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h index 8ca7467bfee..5e07f508755 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h @@ -96,6 +96,7 @@ private: void removeImport(const QString &name); void addImport(const QString &name, const QString &version); void addPossibleImport(const QString &name); + void addResources(); QTimer m_compressionTimer; QSize m_itemIconSize; @@ -111,6 +112,7 @@ private: QScopedPointer m_itemViewQuickWidget; QScopedPointer m_resourcesView; QScopedPointer m_importTagsWidget; + QScopedPointer m_addResourcesWidget; QShortcut *m_qmlSourceUpdateShortcut; diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp index 3809e0366bd..cdad6b7bd7f 100644 --- a/src/plugins/qmldesigner/designmodewidget.cpp +++ b/src/plugins/qmldesigner/designmodewidget.cpp @@ -229,8 +229,10 @@ static void hideToolButtons(QList &buttons) void DesignModeWidget::setup() { - viewManager().designerActionManager().createDefaultDesignerActions(); - viewManager().designerActionManager().polishActions(); + auto &actionManager = viewManager().designerActionManager(); + actionManager.createDefaultDesignerActions(); + actionManager.createDefaultAddResourceHandler(); + actionManager.polishActions(); QList factories = ExtensionSystem::PluginManager::getObjects(); From 848c066025c5df16671d94440661198a9bb360de Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 25 Jan 2018 18:10:56 +0100 Subject: [PATCH 07/59] QmlDesigner: Show Fusion and Imagine style in combobox While those only exist since Qt 5.10 I would like to avoid Qt version checks all over the place. Change-Id: I5750a93ef2e5bbc675ab9adcf35e356990b3059a Reviewed-by: Tim Jenssen --- .../qmldesigner/components/componentcore/changestyleaction.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/qmldesigner/components/componentcore/changestyleaction.cpp b/src/plugins/qmldesigner/components/componentcore/changestyleaction.cpp index a6e746d3f0f..41901e6e9de 100644 --- a/src/plugins/qmldesigner/components/componentcore/changestyleaction.cpp +++ b/src/plugins/qmldesigner/components/componentcore/changestyleaction.cpp @@ -64,6 +64,8 @@ QWidget *ChangeStyleWidgetAction::createWidget(QWidget *parent) QComboBox *comboBox = new QComboBox(parent); comboBox->setToolTip(tr(enabledTooltip)); comboBox->addItem("Default"); + comboBox->addItem("Fusion"); + comboBox->addItem("Imagine"); comboBox->addItem("Material"); comboBox->addItem("Universal"); comboBox->setEditable(true); From 933408d95ff767c9a2da02914d9d054f465a8f41 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 25 Jan 2018 16:36:30 +0100 Subject: [PATCH 08/59] Doc: Update screenshots to match changes in the new project wizard Change-Id: I5c602dd0ad13e1b96942557a0a61f798d868e093 Reviewed-by: Tobias Hunger --- doc/images/qtcreator-add-resource-wizard2.png | Bin 31275 -> 11636 bytes doc/images/qtcreator-add-resource-wizard3.png | Bin 37759 -> 19012 bytes doc/images/qtcreator-class-info-qt-gui.png | Bin 49781 -> 23825 bytes .../qtcreator-intro-and-location-qt-gui.png | Bin 48429 -> 25543 bytes ...creator-new-project-qt-versions-qt-gui.png | Bin 45597 -> 48288 bytes .../qtcreator-new-project-summary-qt-gui.png | Bin 46936 -> 22433 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/images/qtcreator-add-resource-wizard2.png b/doc/images/qtcreator-add-resource-wizard2.png index a0c2614b02f6474d4b7329ab920034797b8fe36e..4bf2d9e54fd64e320d9003ec9af5e945baefe0e2 100644 GIT binary patch literal 11636 zcmeAS@N?(olHy`uVBq!ia0y~yU`k|QV65R_Vqjq4F#mmofkD^W)5S5Q;?~={=^;}x z4?Xz%{BT{>`J1-S|9+dd`C;Y!@0DfcY31sr?|uBgmuxwE(~MoDM?rz9D=F-Zpif5w z6IaK?ImMIasCt}Z4LP^-9(PIAo4n(hci&~s`1k*uscoohV0mEc*XO%l?|c7idA;RL zv&U)X%?A?uNB zz+fW8(D2`Q;>3xywYBTxF5SN`FDU4!%*bG0e!aOld~KYuiOH8oZ$5nZ@X9oMUF>c* zWk!aAmbTVTy;CVhJ7d)R?(C`jygqia8xuoa*}Hqaaa*gl&Iq`-v-mr2_~MBS4fADt z-9DfH|4IM<&-wr3d!u}n85t@vQ&LjqUjFss#fup;W|aE*O`0eu#mR8sN7$Ox*Vq02 zWqabng@BLKo^0P%vJ_;5a=!fh?Cb0IS9unE=$&g_e#wL3!1=o;USC_&_h;(WwI)Ig z4D7uu3=M8f3=WvSW02xxU_g>aW}^iJx>Ardc2oIwr#RfxGW_Jgz|cGA6wj@mKkH@* ze&(-Qd~EaXNB8XS9$U=KU{a(dEgP}z>B*NxXaE1yy_$ZdWr?S{->oWZH|^>Yn_UbJ z%FB&jPUtT83fTHBdh+Q>m*#D0ns>_Xu=Zr<+=G|zZ8@~>k>1*~4-HO+x~e|1`g=C{ zadE)W1u5&@-yDCpw9|C4(ProMmrj;m6TiRw#pETT-&(E5Dr2YVuNa z)}EGAzQ;e=eqVb2tDcseN$E8E*?a$-)1RhR)nc+OQ&;e~@V29T-O<^anT4M^?$@Z? z{~B=WPqV3iyAI#xhYRA*u-jF-uM^L^EA;>8zg2p?{>%&)PMo~&G5h7cuUq{4ZGwI0 zy!O$q%CGiZ?>N7}GWp>|x1&c|4-4(}&7P3SGwb7O?Qc8niuT%T>7D2Hyj{1q{*l(Q z2@NdY-GkblHeIuPn6dGbYmNVJ6&=pE+pTrn?<)TY?|XD<-NC)bKkHrJzv~7As4oqBKG(UWm z|FkL385uI3sN_DmYW4T@=Crpn8;&Tq*2n#}ytVh*;tfR^Uw&L%^O$wj`u!_y*MGWv zbR~ba&tprQY0pHJ1;y=lPT6C*;`pEEZtpxMMBj>D_EszNM{%^a+_W{k8P{&;u=CsA zoNH^SX?pr^*^*yRPgKY;G`RWMB{yf^nJ05{s+TC6;T1RUNT-kQV?J%R<_+5UEH2>H zA!FUF-CMr}ew?m%Qj_ErD3%y+@&gAC5TBhNf zwp;VZg~w+%D)UW#wj%%0rqyc?a~*!+aQ>U_$@Wi2vqGECzhj^G@>8eVsXg0Nt5S{n zSs0`&IafYi?ypk6)3kJ>e_KRhm09?^4YP#vMbF=!vFCF?fW^FH=Q9Q6t;KDG8v zXR7S>%71~a=dr@_7>88%_3c9NnY(DBJ>NSs@VaA@`H*!-nul$<- zzBzq+^qQm_Ip6H#6E=5x@2g##AD6ND*8XDA_N!_C&!zIMzM8i6qc#^q@aBmJ`Mu3q z??_9fIx#c+xM{v=as8T)mG#-z7f9&NWfp&*@}BFQz0kDidta{S9kjW1S%2dGqcNA$ zf_S%lfBlwk^OoJKN-rD=W?`5i)LUZvHRI>SDPNy|x;FP@Y^~Pu$5AKOu?L-B5%*p@ zl7Cb75wGL#YmOh7TKZ1?y=l#V>l7KE`=*z-$6eXFS;J=Kr2`OCY^3HrmbBib7xY|Y z=}n2XH^o-RmPhZ?ig_q#`>4?J|Dn4!tfLs z-mJ%GZ3@-fFEf=_{(cv?H!VDF{XBJk27^wiN(+y>)pTvv-+{?ZfArzh3L!`_5fT{%zdzH&1u{ zyWVYn{E5n(m~H!SJ`6}>*R!tsx@`ULj}z23UjFB(|GweIj?Hn}#%;3a<=@UKH)@20 z$IkCjxB6Dd^;d6-{l4_~e2?>K8t2op^q#-WPvL#b=f$^s{?ZBFZ|~pePE;uP`mENR zJJo38^o~#W9`5vWj8qN{)V}`f_`Tg5D%KSzeV*a8^z{A>cV2pISz=gu?$gzWnf?4{ zZ%(sZ^3LDJw7kCJkZ8Yd_2OMpm#*dADX`Z5`{mhBPTRg;*6)m&9#wu~V3@pOB76Rl zT&sTvUMDTO-r6E7E>y!bc~Q5!{?YC4c2AlyC)CKuX2r!7`)_)r9@6aBPdgL4r{d!; zd)cc#4E#4PT0i%ssw`8k`P zImBEsz5m+MDmK02_NvOwVzRXX3$Jf)mHntEQ?_M!{D)n!CnmEq%y8*7k>b4@E313f zcdhPuw(48`tjDe8>r2#Zwl3P`XQg%Vb?LY3Z@BcgUEMhAY+Co%qk+4Q@_nuU*>yH+ z;~pFRZ`1#u{vNe|qxQcab-!#v85%tAdaS;>Dnx5Z&`KXI)0bDTzkm8Oe%Jkr|6=r{ zjiq{RW-&C(&sRRay!z3J?6SfN)7ch6vwhad$WB}_h09R#$wC%}KX;@-75owZ!%4+2 z&hoG|AN(QMe(=$To0(5SF6(Z-r+0nMnF+EU6XlW&BzTVX8+=puKL7lL{FRqe*sOc! z7=1~r4w<@dPqekgvUjqHU?rw($F988-StC_xp$7y606%sYkDWXozL*#{ib_*D*~LA zm-iU1eVftdmA>i!-DwskCQAY|DxNU@;n~^~;g_~L^GQfnio-Im-{m<=`uqKTe0ch8 z8s?`f`#=A4rFTpAui_v%mpl7rhu-_f|21*KvUA$M_wc!ecTe8x`F!!G==u|G`))9Q z?d^a4qi@w?^(Xy&)mFK8=3ZN46czVd_tP2aiJhsn>-UPr$Hz-?Hn{x@=?w|D>D)K} zd(Mj88y780^jI6LVG`CJyM9u(uh`-+<>@>n-}qjCi8|>}et$#Io)@!AyEa~2IBy-} zR!{p&cdweS655`0t*6vB|NSfJE8WiG5?i@;F4@0(b@(cS{_sPK0#1}J+yDFEs}g_n zKiA{`W?lRi)NA|v$(Oa}-ZD|1p`LklftB;m=+qr)+_rAktEO3TOBZcd+rPrm>?3=V zQW*ZVZK?O?yZm?GNY+nM-dAKF5gI8Y zCpP!yvYNNDyphk#R8~FPYF?c1{@sij5&u>)ESPBTsa!g>|9#8xWjy{hanshl&MZmU zb|!IMP0{WR*;_21JD%9O;X}vm?aFd$M~}DO?aQ4ax%;!yy0*JJrG;vK-)nwy+)(jh zf0SFvt%b|B{P?juF^`sk}_gC^@uQakA^rKOYzWD0_Op)>*vt=E9$H z_l`5`*;P&x-*)SJ-rD3HY6b_6mp=7b9&0}PmHgU@{9jeukG?+}v-SUjcUL#3z3JAx z?D1QEPU-DUchfJvTKjSDt}PAc|83F#W!-xvLT1{j+3)uM`@ioCpRde?Th_%*=jZJe zh`$&!dD@IPOC_}praKG2ub26CcD>zKu3c4!@=v}`)7d3Edun9dwHwCQBE{?Vjs86P zx%%tk$Mq&2ujS|4Z!LdV&3%69*DlV~uqQh=KVLtMFG|;W>rKsx69xU3t^Zo}$)K-Z ziy`BQ|0R!hPs4!lIaT&rdb?LS--<5Q*K&WhA>_DwhnrdI5!-X`19)wCxod5*3a+Fa zU2@HP_ou~=x~hGd{nxkKhFS82_RFQ3^3DEocoev59Q^#wIP&=ANz)pyn{9fw?Y(^c z)(;=%ep&X&{oK2C$N6@gnfJ2%@0)u+XV)%HVm6nvnOpGtOuPJdNKWbxXO`qFW$aQUuN{EMV1Ga1ikIpy8cgC(!`UCw5nz1N8g<`x5j$w zqSdQk1XdK)#s{axL~Zojlb-&xH|;e_gkSGL^$x4J&h z_1ns`xBo8c4qmsetgQBvO5XER4;bD5Usa8kGqL^^#J?kc*ChGs%#Z1Ll4sw>&b`}w z*lTZ?-gSw6mp!)5C|aHUIA(gh=xmkgu`~Xzm)E`ZXj9QIlj}@7*M9kR>;I?v+D`#? z|I{7_T{k{|)O0id&bS@QcFTTE_`YtzluHY2Kj($q)=3Rd`)#|*|L*$|jgUKU{?29B zb5EW7`QO><&)4#!_Ga9i_WEQYd+eX{-TJb&5038&1BF-ClEO91G;|GhwM}2f)r5WR zSn~W|uQvas%ZHiIKP%}qTXIBIyxhCm>)lbc-dAsqdJ3NWdg?D zvDCtxn6#^(Kh3c&mwTRej4i%8=Jw?YQlj%$%l&uIt#%HoNO0NqO}(;YYU^#gJF^T@ z%6XRf{(t`efk@z0flc*St>zz&d%Z7W)5C|&E6x_5FSD*XSF=-T(Y1S%AMAbhVClc- zOXakm?UdhF^61LVc30-i<;(Ww#lEgkUV8N5YjL)&TB9!iv+*yat>uDdhOC{wBC61}TR%4) zUAXVrBRPSYg?YzK=3AdXK417{#8Kz_zU}&*m;Y6l9Y1ynnzlSnCR9hp#l=G;7P^yMK-L`dVMRsJ`*m+2p;o zi?fDj8rd-F~$3R~-ZeOCOfwFNKOvb|p)Gp`BVD$*Xux2HyVSK0}S zTa%{Wz3_Ri+o~fAC;B+M&XfQDera8}c2`lE{@;w1n?E1>8Rzcz_5g7q81LmzwoaFfvS0B3_|G3tr~j_& z$zPj2x$JuQm94LjNbgEME1H^WTKe{`?Oma>KkiFz+SeD@9D4nJSm@^*2P3V}RWfFq zb9`1^k(#neaq7jq%i3)5Is7))A|pe8uE}*U|M+m8vaD%pYU=r2DQtUdLd@!3G`!8r z6BHEu6U^wK{Qseprrq&R@~=6i|L&Gge}1r;T~t)`PcY*L<142M%a)1lyjQk0VzJ?^ zN)3hw$FJF?acW+@bVBoR&Q|-p3+m?5TEBf-=N?<6$JTr>;m-%>JqN+%7jit8bnB$2Kt? zQ2BPfY@hIS|F80mZhmoDTX*f;xpUR3RXhx8t3Q4EbnMu%ix)5Er@HOwy?*6NNMvNB z?aNNZjIICr?0mk;T7G;$@=tf{Z8(-kAGwKPfUpXym*Pa?kD+A z?6NESxckqCM8^NWy6lU#}|Z6wfQAizHH&m4RwFpcyF&)IrSy}|LN^B zb@k)VuSuJn`$zRq&c?oc&FpPG=~vUX*8IJdXtclR*W3TzdBE_iuT3>kU?~*pr*ECo1jii-i9# zr0uRgp6WJhzIfZtGjsQ5Tx?oDhhOY;+&`wL^Y7K_m=r(y(6nvgBWu0S;(Adg$Dcdx zx%H;v-xH4qf4$ll*Pqw>|HA7l|BvQvNAu$M{eCjx=hyhP9QR)d#%bHFcym#)-5gG)KEx!ytbG5!8;8DH z+ZEPcS@^`9Z-!8>Nc1kL`v+9M?U300?9={O{nV`{YI(m(Vsj$bhp1()(OsW8`NrB+ z%RVhy^eSv_Yz;@kZkJ3m4YuFMkNH^n=KpVqNtei6d*Zx)mSjMOrAz$h%YT|CT{B#J zH_2$9t>M%Vt*Ps4tGnI)2~1J7EB@B0VafKcW?No(U~S}yI{oWYi>J%>R8&1bq5uDO z{`2?yB!u^rzr3V>U2oRkn?>ujmaeo;e7?tjyZNmDWy)unE6*8=v5S7qGTC%$&yO$5 z-d)-<=bGW_g}Q0SH(s!t?0o-k!PP&e{HvBq`M%$p>;27D^xoIMPx?2{StKMStS_^# zXn8`C;g0)ze$G9= zcI;fN_$=$e-Z@nte@?ai>e-+CK8BYoGtlyv&^HVDok;~Zq`8xtnbzBAN=xvkN5v#O zSbDtmyt~z=zkAnzjXGizv|Lj6{<}RdE4)^RE&pHjQZn@K`Rq%RysVFw+n%qRBUAga zzy8PHU&)G@hU&I=Yv#>Vt1AjkkE(myuw?y0n}6?mr574{E*8FgZQGsM;(ir%A77u9 zG+OO^OQP8Hg_lds{Cf-Eo$&75FI}l0edvqO44+<+XxXmP8ExhUQE$pJZ+tsHEyup} z@uhX5tM$sho66nV^keVM>~qJ`p0~`OV_tsl%unz2DrT;4W>;J7-K%x0`r@+gy}dW{ z_N@zl?^dZZfB(VEzW-|%t-CdeIq&uM+{itLY;$fXXk}JJCuwOqc_`PL?DFdOx0|>1 zSmn(_OMkz&H;q{0-}HUwx|#p}xm&-UU3_i#{5;|L>@%P3zwmfV;O*DjQ!lqJQk=VF zp~`-@)aqj8qjSz&tjPb*^nAj8AGXq?di&>B?sSQ{P+0TzBG=TV55G;D`7T{VIR1^F z_3i`jKb7v+x1YcL-LuKR_FXdG*BJQ7`_e4~`|Y~yd$#+O-z@xfNlsmT|Be~Oa?$-} zd?!~KD>3uE`SWFS=0e`u@3#MbtlYf*`lFfgI>p>PAL2Hgv);Gs^_ye=t?oYcIIxY? z@A~WLAiiC5cV7ycQJgS$_5F*w-eHxhYOZ=SZU0{Qw|M$uRXkPLEnrvP4 zGyNOIYt=LhuDxHjo~Q4u)Ut^ORI-;uw6CmZZoZi&-212GT$}ClbMrsldOCN)q#f0F zU)5?l^CfS+{AufUsjZ85rpK85aKB^qxKjB~;hEC!SO1kS)|a;xDER+uUwqBWIkzos zj4p|9OMm%${`!*JyIy?XKX3k($1^JOPbF;XxVllTIZ)?NmQ4NS=e{l+M;V`IJn44} ze)e_g<(a=G6fFTRwjN^l0xr$F*st=Qf(k|H)j}eR-At^PNw5S4ros`Cb0MFsx|%*~H-V zyBs(6pp*Ub*z3Cw|bjp)#KQ()+Nhj z?iIiCc~W>jevkS2)XS@8p5EqmtYxQ#E>GY3jMuW4BCqs2|KY!rEg#>yCjZvkeUF3o zRcK$ESC{a#duhEZUJK8yKGnP+Xe)iuSghv&EEM(r~)TD@Y$j#aBw zvX1s0n6u}`+jn}rT<-TuPOiVgTXY4Y+Fk9!@!`btUo9Fkff9rMQcWb!Ag8S!U8(kOoO}z8e zPmh21(P`q2(J_0BPIJeK>sX5kO`Tj-dhZagJHM*Ov0d}8ip;rTSN`_jg2T7P&)pWk zdg0Ec4{P?NSFHJ5`F%#1@wMys?%J=K;%Q~QYf0AMA7(=Jb7y#U#ad=Q>EFI?Yr<>y z+rjPeD(5GNzp~HXdcQR|+WuFwd#L}-XE#6ZS$D^O&$DgsE~M_>RQ!C|+Qv|2+m*YY z)qdK0ZR;s-r~hA0{`%6n{mT?*-QK&*zDND7mp;yS`6eD$wktww{l0HU@2Ijq-aqGB z#(vjx6GNXKl>XZ^Dc)xP_rK|N>H%-1h{fBz!a+w+RI}co#zN!B4NrCoN)%X4GdwZ%LJU;E%7V9-n!>6z3J?&|^ z<@b@36O`9|F25^!b6a%ETGLvs#eY6-JZ~TU@V2_zCeMfN<@Y7$UwI{6d)G$qS+BWK z=J{RIy~9`aWW_#y94r5~=-AFba_xI+<}P<%b|!KC-d%?euYY{h|K8^(+SflvT3)o< zz1_@1=jHVBe7==u_HN8N{MD<_c6;S-xs-c1_oUpL>$b6GwwK+n2X}<#pIH8fk7@FT ziAl1{zVVj0b%z$E{>|SX^Sb`!r2nUmo}2k{rktL1|B^DRoaXH{vD0(zJ=|8;`F*F% z%57)=HrGejC`H>A{NG#u@A_WOy~&x=ZJ70b>in*`JoCevj>*PiYi;Yl-uhX*@aWNv z@&B^E9^Tl<+fp;p_g#Tkf*wp4ZYKsh^7t`=>0O{xvgB?EJEq zo?JT%-o0D==t@@W;aigg3O`2q1V(072G70`w)|6OWcQf`k}J;mRj=Cc_pO`Nn^RwA z@8f=^Q(RaWwf$>OVEVq}?VFpA+>cE9b!%?@mCqr|V}r$Z72i8!Dm~}f+HW?OR~C6} z_CNdMNAY>#POXpKzYD&9TVdtuKI`6mT&^`)<;>3_5;_Fr=G%B-3n84f#dtUC57=X%-s?w^nI zBfM@4nVqTG_$4^p@8_?1`!8Ob_kRCD&8<7W-8r{DZB4;`(XvbB$LG2IJ>q}wW5vqb zt#9sRypN53)pqu!<8HIokdxJyuAl#v)cpAnf8Ex-1tk`L&wQK79hMXMy2wc9{k^lM z`?k+;XPUfj;@7WVlj@e$G53b$2V6@%HqXBH&y9_b16kje-Su!RD~sIivPRjo*Tgl( zrtnc!&h%S}*SuDr+RT0Xn9r+!hpxD9{VV00e)4EAqx$(ftKNiK>umb-+mZ2jAFFH1 zm+#xvj-+nUSfb1NQL|1xPSg>Hp!mpLtpD!Glb@Sjizt(d)Z}T-ZS7p4Gm%1!vy13S8?%6exk}{LK zeb>9I2>r~s{?T{;tt!o(OFr$Ku`9|{nR)T!%`Q(9iVG7DUf%UQYVWF@t9I;IQs!a2 zapJnQ|4;p6-o9z~+ehbk`A?VV|IZ89A5-NX9$q}Xq~@_qWcuw1hgL|x)6v$;l%LS! z<<_ge?UU$#jyV{o&pv9{tgh=h2*~wYuYnhlmv}8ul%IkVS0E` zD`<(q`)=Z9=Rs5M7d)guBl<+o=r5QES^_|d9?)6{;`M;mNMKtUfV6}HA$`9q;Q$Fk(DDwXWe*5J@R|?o_K*^Wpk*Y)haqSg1$H|@?!@9G(xRxr zjmF`QHLh_)D@jqrz+f_ol&k>?E>fZuPZX(TD=&}D5AWgiZewKlu~S-FI#_FJedd$t z2W8!QofO#_9z6H+QQCjem%Kh<;03`h}pV9K&E&C;x;e#Rf~pR`eXxA0f#&4865 zuQZ*$9(#AugJFh?N!HSsg*opg+rOS{?*C5lU848?8{1NCrgeo&uMg|*>*M3&zzR_OM|9C^ORE}7oUFW{`u;2$h#& zwrkg}v`fO}L3ct6+yCFnndHWFV2MIp-PWw9d%Y^XHXnSr!GGez9W&N@=1-Yjs-Hd~ zsVFQye*NW_%T8@%I+7>1bm>wPAqKT-<)dBKglB#-TzfTf^DN!q1PhsM)>Ch-mtJ`_ zYrcK`y-SyrZY9s?EtfgQ>SI*5yS${_51y8=c zPuOhNc!5_R51w-N<=VYP@7tG^-j9x4f4{ePy^QEjlbOAbr_T&#-kYo?@@Pujf4^?y z88T&`*KW!;|8#S6y0CX8ciQH|Su(qdZ=~L9a_xSmWAkyru`gfeZkx4s{hrzkvG9Mt z_MA=GR{M8qI=fwLk?HRDYsGZCbnZEW9Fi(^Q`uCi$F29@+xCmE3^d=xm;Czv|GT^R z<=Ii(Oy+CLR|i>saV{-Cd}xte_}4GC-skkD&X75^?_1N97rCGR{Z%x-@UQ&dj! z_YUvOspZ$NK3RTem+ai|%h{W5>&!a1XGh0{3mvl@XXma_ReTlpWbvNF$Dg^ouiZcM ze!F$f{rZDRTAHsslo=CFnQY1qS%3L;=&kMYRhthRRDD15&-CB#zSz#w`|9tVKD<6D z;G4mLtCi0iMU9`!bn_O+TYdh}d))l*_8+qQ9vJ=KU;AmQd&(>0r6(6%+;>_?R?N9# z<*Vr4oUAON*9Kqj->y)4Dr&tys@iUAc1@9mo#_^yD@*3sR3v=;@;%mxtEf5FZr-+n z&%09Vqc-l%3W$_=_xtGd(|^CqYv;V{-C0=h*sT9+@$|Rc`-*R6W=G_`{}J-*w|>q&~kC|7O#TfQj#4 zetCHC$Mdh-ZPMQF`}yRS+kS4&Rr9)h?^)+9PnU`M`thsR=^xdT&%awc<7;KX#}3D( zlRS#PoxfjTyxcwK>hHhPa||So`~x*LmU$=}Kh1TPTI!|T7yJ2|bLxiI$Cdgk*X#;V z5h_am{r|^Po&8px|F7nDFVih7{eEwU_JdcB*WZ?J@;>x^%~#GdUA9{veK(%7&Sr(A z@l4UK^2kM=>-R=3`V*!sEhTm2kI!eZEpD4jH+=iocJ%V~ysuwk_MWqUQ+VT~>F4mu z9lF2Y7~lVJeEM7)f4d3gQ`X(wrnxLj!@T15^Z92!-*`AZ@^D|W74{`2479a}Da6YP!Cs-LbZ zRWfVBqw6L?XU^Yyci>T0@69~fyc7Ms`>M^&78i&3@I(tgUS#~~w00ExFY8ycZv6@| z^2~LvT_2Kuv2TjXvAex}tKXW>5}A9`KWTBY{M0Mkw_Yg@OUbthCn^}^K? zjJ-Y!cd?>$Wwkus#0G-$a>s_1v0|w$nP-h8#8Dch$Y`f(OG4uU?y(n)&a-drwX| zoc!MCm`K!0um7(moVeng{JtW)zBuFRstHO*%cV8V+Gk4j@AOi&``+xvbl^(HlTMz< z;{QJw%a5e{?L8e(m#$HFB++z5p2*3|vqjdMZCbbPo$meqKPNk^b)HR3O-%*WP}Ubu z9I5&_)uu9Ou2P*=&lI+!CwXRCFwOC_uKR!V*6E281wS?hKicq2Y1-S#^L9*rbfWSR z-(?Sm8E>u#>mS@G`e}pE&$X8{4V=23Cb_Pj5wI%$=bsb*{?&b4*z+~GCBj%|qDO`b zgAd~)*Bh(CZ}B|-KlhLG9skLGKi3v?++339C0PE0*Pn!CwV?JTsF4R-f&1q}ugLN% z!s3P!JZ#Me1$?*c%Xo4|T9&UnYR*Oju-Ju_F2b&ouJZq1#`|sQ`Y*gS1uXtCsl%wt c?%)3!-)Xm*6lQoaFfcH9y85}Sb4q9e024l{x&QzG literal 31275 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 diff --git a/doc/images/qtcreator-class-info-qt-gui.png b/doc/images/qtcreator-class-info-qt-gui.png index f3207eeb7297a27febd27e709f0a93fc4d5ec75c..adb7adf60847fe0bf52094864041a3ef10696af6 100644 GIT binary patch literal 23825 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 NJYD@<);T3K0RSlVI28Z@ literal 49781 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 Hr-UW|8l2fv diff --git a/doc/images/qtcreator-intro-and-location-qt-gui.png b/doc/images/qtcreator-intro-and-location-qt-gui.png index dec4933a916a6216cd06374ff39529863846de11..84ece94bc33ace619a1d0fdf33328e6ed54f3d9c 100644 GIT binary patch literal 25543 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 Y*_;12W738W1_lNOPgg&ebxsLQ0En9z{{R30 literal 48429 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

Checking this will enable tooltips in the stack " "view during debugging.")); From 8a8ad532cf124ff1b40d5dcff4ef00dd611b2725 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 31 Jan 2018 08:19:07 +0100 Subject: [PATCH 46/59] qmlproject.qmltypes: Fix syntax error Amends e44504371c99960e05ca42bae4ce404bcc18998a. Change-Id: I0cc3ae874b27cfb6572bf111c1ab628ed113d955 Reviewed-by: Ulf Hermann --- share/qtcreator/qml-type-descriptions/qmlproject.qmltypes | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/qml-type-descriptions/qmlproject.qmltypes b/share/qtcreator/qml-type-descriptions/qmlproject.qmltypes index c7e7cdf937a..70003d049f9 100644 --- a/share/qtcreator/qml-type-descriptions/qmlproject.qmltypes +++ b/share/qtcreator/qml-type-descriptions/qmlproject.qmltypes @@ -11,7 +11,7 @@ Module { "QmlProject/Project 1.1" ] Property { name: "sourceDirectory"; type: "string" } - Property { name: "targetDirectory": type: "string" } + Property { name: "targetDirectory"; type: "string" } Property { name: "mainFile"; type: "string" } Property { name: "importPaths"; type: "string"; isList: true } Property { name: "content"; type: "QmlProjectItem"; isList: true } @@ -70,4 +70,4 @@ Module { ] Property { name: "filter"; type: "string" } } -} \ No newline at end of file +} From 61511cd06b584a5c6898b15dd908246863e0209d Mon Sep 17 00:00:00 2001 From: Vikas Pachdha Date: Mon, 29 Jan 2018 13:31:44 +0100 Subject: [PATCH 47/59] Android: Fix crash when creating new project enableChanged is redundant for updating gradle settings. Task-number: QTCREATORBUG-19652 Change-Id: I3352d3b56caf742f7f034b3bf106cfb361c1f869 Reviewed-by: Ivan Donchevskii --- .../androidqmakebuildconfigurationfactory.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp b/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp index a644ce6221c..3ffa785d60f 100644 --- a/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp +++ b/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp @@ -63,11 +63,9 @@ AndroidQmakeBuildConfiguration::AndroidQmakeBuildConfiguration(Target *target) : QmakeBuildConfiguration(target) { updateCacheAndEmitEnvironmentChanged(); - - auto updateGradle = [this] { AndroidManager::updateGradleProperties(BuildConfiguration::target()); }; - - connect(target->project(), &Project::parsingFinished, this, updateGradle); - connect(this, &AndroidQmakeBuildConfiguration::enabledChanged, this, updateGradle); + connect(target->project(), &Project::parsingFinished, this, [this] { + AndroidManager::updateGradleProperties(BuildConfiguration::target()); + }); } void AndroidQmakeBuildConfiguration::initialize(const BuildInfo *info) From de26df1ee37cc57b7cca79aff5a31d13bbbd2a62 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 30 Jan 2018 17:02:31 +0100 Subject: [PATCH 48/59] Doc: Describe new Git functions Change-Id: I13704198f707881514cbcd3af2aa7c1d036370a1 Reviewed-by: Orgad Shaneh --- doc/src/vcs/creator-vcs-git.qdoc | 6 ++++-- doc/src/vcs/creator-vcs.qdoc | 8 +++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/doc/src/vcs/creator-vcs-git.qdoc b/doc/src/vcs/creator-vcs-git.qdoc index 07214d77096..8637f1f4f69 100644 --- a/doc/src/vcs/creator-vcs-git.qdoc +++ b/doc/src/vcs/creator-vcs-git.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2018 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Creator documentation. @@ -124,10 +124,12 @@ \uicontrol {Fixup Previous Commit}. This operation is done using interactive rebase. In case of conflicts, a merge tool is suggested. + To recover removed files, select \uicontrol Tools > \uicontrol Git > + \uicontrol {Recover Deleted Files}. + To change a series of commits in the local repository, select \uicontrol Tools > \uicontrol Git > \uicontrol {Local Repository} > \uicontrol {Interactive Rebase}. You can reorder or discard commits, squash - them into a single commit, or edit the commit messages. The following sections describe how to manage local and remote branches, apply patches, and use stashes. diff --git a/doc/src/vcs/creator-vcs.qdoc b/doc/src/vcs/creator-vcs.qdoc index 29784b109aa..31dc3c14c61 100644 --- a/doc/src/vcs/creator-vcs.qdoc +++ b/doc/src/vcs/creator-vcs.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2018 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Creator documentation. @@ -234,6 +234,9 @@ show annotation views of previous versions (see \l{Annotating Files}). With Git you can also choose to cherry-pick or revert a change. + With Git, you can click \inlineimage reload_gray.png + (\uicontrol Reload) to rescan the files. + \section2 Annotating Files Annotation views are obtained by selecting \uicontrol{Annotate} or \uicontrol{Blame}. @@ -250,6 +253,9 @@ The same context menu is available when right-clicking on a version identifier in the file log view of a single file. + With Git, you can click \inlineimage reload_gray.png + (\uicontrol Reload) to rescan the files. + \section2 Committing Changes Once you have finished making changes, submit them to the version control From 26283047162224fbc878671b5e5cb61bf419930e Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 31 Jan 2018 09:51:22 +0100 Subject: [PATCH 49/59] Doc: Add a line that was removed by mistake MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I822c5c90312c2e41c01cdfc86cd5f2d7718173ae Reviewed-by: André Hartmann Reviewed-by: Orgad Shaneh --- doc/src/vcs/creator-vcs-git.qdoc | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/src/vcs/creator-vcs-git.qdoc b/doc/src/vcs/creator-vcs-git.qdoc index 8637f1f4f69..56d77d969f8 100644 --- a/doc/src/vcs/creator-vcs-git.qdoc +++ b/doc/src/vcs/creator-vcs-git.qdoc @@ -130,6 +130,7 @@ To change a series of commits in the local repository, select \uicontrol Tools > \uicontrol Git > \uicontrol {Local Repository} > \uicontrol {Interactive Rebase}. You can reorder or discard commits, squash + them into a single commit, or edit the commit messages. The following sections describe how to manage local and remote branches, apply patches, and use stashes. From a8f9ca6ca8ea0eee5155d92b01d67f17ba1e43fa Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 30 Jan 2018 15:20:56 +0100 Subject: [PATCH 50/59] State third-party licenses for LLVM/Clang/Clazy Change-Id: I8ba9e9176a01f49fbf203beaac3dfd229df0046a Reviewed-by: Alessandro Portale --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/README.md b/README.md index d4ee720a07c..0f5e6f07b4f 100644 --- a/README.md +++ b/README.md @@ -268,6 +268,29 @@ http://llvm.org/docs/GettingStarted.html#git-mirror: Qt Creator includes the following third-party components, we thank the authors who made this possible: +### Clazy + + https://github.com/KDE/clazy + + Copyright (C) 2015-2018 Clazy Team + + Distributed under GNU LIBRARY GENERAL PUBLIC LICENSE Version 2 (LGPL2). + + Integrated with patches from QtCreator/dist/clang/patches, see README.md there. + +### LLVM/Clang + + http://llvm.org/svn/llvm-project/llvm + http://llvm.org/svn/llvm-project/cfe/trunk + http://llvm.org/svn/llvm-project/clang-tools-extra/trunk + + Copyright (C) 2003-2018 LLVM Team + + Distributed under the University of Illinois/NCSA Open Source License (NCSA), + see https://github.com/llvm-mirror/llvm/blob/master/LICENSE.TXT + + With additional patches from QtCreator/dist/clang/patches, see README.md there. + ### Reference implementation for std::experimental::optional https://github.com/akrzemi1/Optional From a42ae9e6f59e7f2eb273ef1735a9ebaac50c8b08 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 30 Jan 2018 14:18:45 +0100 Subject: [PATCH 51/59] Debugger: Add the ability to auto-test expression evaluation ... and use it for the hidden "sequence" feature. Change-Id: I3430a24774264a573687ee818064314a8bca7212 Reviewed-by: Christian Stenger --- tests/auto/debugger/tst_dumpers.cpp | 33 +++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 743197ff090..2009eb5ab80 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -480,19 +480,26 @@ struct DumperOptions QString options; }; +struct Watcher : DumperOptions +{ + Watcher(const QString &iname, const QString &exp) + : DumperOptions(QString("\"watchers\":[{\"exp\":\"%2\",\"iname\":\"%1\"}]").arg(iname, toHex(exp))) + {} +}; + struct Check { Check() {} - Check(const QString &iname, const Value &value, const Type &type) - : iname(iname), expectedName(nameFromIName(iname)), - expectedValue(value), expectedType(type) + Check(const QString &iname, const Name &name, const Value &value, const Type &type) + : iname(iname.startsWith("watch") ? iname : "local." + iname), + expectedName(name), + expectedValue(value), + expectedType(type) {} - Check(const QString &iname, const Name &name, - const Value &value, const Type &type) - : iname(iname), expectedName(name), - expectedValue(value), expectedType(type) + Check(const QString &iname, const Value &value, const Type &type) + : Check(iname, nameFromIName(iname), value, type) {} bool matches(DebuggerEngine engine, int debuggerVersion, const Context &context) const @@ -1455,7 +1462,7 @@ void tst_Dumpers::dumper() parent = parentIName(parent); if (parent.isEmpty()) break; - expandedINames.insert("local." + parent); + expandedINames.insert(parent); } } @@ -1670,7 +1677,7 @@ void tst_Dumpers::dumper() for (int i = data.checks.size(); --i >= 0; ) { Check check = data.checks.at(i); - QString iname = "local." + check.iname; + const QString iname = check.iname; WatchItem *item = static_cast(local.findAnyChild([iname](Utils::TreeItem *item) { return static_cast(item)->internalName() == iname; })); @@ -6985,6 +6992,14 @@ void tst_Dumpers::dumper_data() + Check("c", FloatValue("0"), TypeDef("double", "long double")) + Check("d", FloatValue("0.5"), TypeDef("double", "long double")); + QTest::newRow("WatchList") + << Data("", "") + + Watcher("watch.1", "42;43") + + Check("watch.1", "42;43", "<2 items>", "") + + Check("watch.1.0", "42", "42", "int") + + Check("watch.1.1", "43", "43", "int"); + + #ifdef Q_OS_LINUX QTest::newRow("StaticMembersInLib") // We don't seem to have such in the public interface. From b1c659ff8502f1483e6d9f78dbb0526a8d2dbcea Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Wed, 31 Jan 2018 09:10:36 +0100 Subject: [PATCH 52/59] add qmltooling plugin dir to deployqt.py Change-Id: Ie9436c6a29d153400bd8aa4547b8b9abf310f6a6 Reviewed-by: Eike Ziller --- scripts/deployqt.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/deployqt.py b/scripts/deployqt.py index 4ea1fb770df..6f6d5449f6c 100755 --- a/scripts/deployqt.py +++ b/scripts/deployqt.py @@ -309,7 +309,9 @@ def main(): QT_INSTALL_QML = qt_install_info['QT_INSTALL_QML'] QT_INSTALL_TRANSLATIONS = qt_install_info['QT_INSTALL_TRANSLATIONS'] - plugins = ['accessible', 'codecs', 'designer', 'iconengines', 'imageformats', 'platformthemes', 'platforminputcontexts', 'platforms', 'printsupport', 'sqldrivers', 'styles', 'xcbglintegrations'] + plugins = ['accessible', 'codecs', 'designer', 'iconengines', 'imageformats', 'platformthemes', + 'platforminputcontexts', 'platforms', 'printsupport', 'sqldrivers', 'styles', + 'xcbglintegrations', 'qmltooling'] imports = ['Qt', 'QtWebKit'] if common.is_windows_platform(): From e61ec82b090ebedd8b3263e9b76f5d931cb6eea6 Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Wed, 31 Jan 2018 14:58:00 +0100 Subject: [PATCH 53/59] QmlDesigner: improve setupContext calls There was a massive slow down if the clippboard contained a complex qml element. Change-Id: I7b17cc9eab39bade6f2a0ec2f66c2dd2a6279e2d Reviewed-by: Thomas Hartmann --- .../designeractionmanagerview.cpp | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp index 1efd79a1cdf..e46987483f4 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp @@ -53,7 +53,7 @@ void DesignerActionManagerView::modelAboutToBeDetached(Model *model) void DesignerActionManagerView::nodeCreated(const ModelNode &) { - setupContext(); + setupContext(SelectionContext::UpdateMode::Fast); } void DesignerActionManagerView::nodeRemoved(const ModelNode &, const NodeAbstractProperty &, AbstractView::PropertyChangeFlags) @@ -63,17 +63,17 @@ void DesignerActionManagerView::nodeRemoved(const ModelNode &, const NodeAbstrac void DesignerActionManagerView::nodeAboutToBeReparented(const ModelNode &, const NodeAbstractProperty &, const NodeAbstractProperty &, AbstractView::PropertyChangeFlags) { - setupContext(); + setupContext(SelectionContext::UpdateMode::Fast); } void DesignerActionManagerView::nodeReparented(const ModelNode &, const NodeAbstractProperty &, const NodeAbstractProperty &, AbstractView::PropertyChangeFlags) { - setupContext(); + setupContext(SelectionContext::UpdateMode::Fast); } void DesignerActionManagerView::propertiesRemoved(const QList &) { - setupContext(); + setupContext(SelectionContext::UpdateMode::Fast); } void DesignerActionManagerView::rootNodeTypeChanged(const QString &, int, int) @@ -96,7 +96,7 @@ void DesignerActionManagerView::rewriterEndTransaction() void DesignerActionManagerView::currentStateChanged(const ModelNode &) { - setupContext(); + setupContext(SelectionContext::UpdateMode::Fast); } void DesignerActionManagerView::selectedNodesChanged(const QList &selectedNodes, const QList &) @@ -112,7 +112,7 @@ void DesignerActionManagerView::selectedNodesChanged(const QList &sel void DesignerActionManagerView::nodeOrderChanged(const NodeListProperty &, const ModelNode &, int) { - setupContext(); + setupContext(SelectionContext::UpdateMode::Fast); } void DesignerActionManagerView::importsChanged(const QList &, const QList &) @@ -127,21 +127,21 @@ void DesignerActionManagerView::setDesignerActionList(const QList &, AbstractView::PropertyChangeFlags) { - setupContext(); + setupContext(SelectionContext::UpdateMode::Fast); } void DesignerActionManagerView::variantPropertiesChanged(const QList &, AbstractView::PropertyChangeFlags propertyChangeFlag) { if (propertyChangeFlag == AbstractView::PropertiesAdded) - setupContext(); + setupContext(SelectionContext::UpdateMode::Fast); else if (hasSingleSelectedModelNode()) - setupContext(); + setupContext(SelectionContext::UpdateMode::Fast); } void DesignerActionManagerView::bindingPropertiesChanged(const QList &, AbstractView::PropertyChangeFlags propertyChangeFlag) { if (propertyChangeFlag == AbstractView::PropertiesAdded) - setupContext(); + setupContext(SelectionContext::UpdateMode::Fast); } void DesignerActionManagerView::instancePropertyChanged(const QList > &) From f2e6fc95609de5ada890fa225c2a988cec066f94 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 31 Jan 2018 17:10:26 +0100 Subject: [PATCH 54/59] QmlDesigner: Add keyframe support to property editor This patch allows to insert key frames if a timeline is present. Change-Id: I39c8281e5e559a838ad61939d3f2db7c6abcf76b Reviewed-by: Tim Jenssen --- .../HelperWidgets/ExtendedFunctionButton.qml | 6 ++++ .../propertyeditorcontextobject.cpp | 33 +++++++++++++++++++ .../propertyeditorcontextobject.h | 9 +++++ .../propertyeditorqmlbackend.cpp | 4 +++ .../propertyeditor/propertyeditorview.cpp | 9 +++++ .../propertyeditor/propertyeditorview.h | 2 ++ .../designercore/include/qmltimelinemutator.h | 1 + .../designercore/model/qmltimelinemutator.cpp | 17 ++++++++++ 8 files changed, 81 insertions(+) diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ExtendedFunctionButton.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ExtendedFunctionButton.qml index 492cf2f6250..c0177032b77 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ExtendedFunctionButton.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ExtendedFunctionButton.qml @@ -155,6 +155,12 @@ Item { } checkable: true } + + Controls.MenuItem { + text: qsTr("Insert keyframe") + visible: hasActiveTimeline + onTriggered: insertKeyframe(backendValue.name) + } } } } diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp index bda20ca52a5..1584d882559 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp @@ -208,6 +208,25 @@ void PropertyEditorContextObject::changeTypeName(const QString &typeName) } +void PropertyEditorContextObject::insertKeyframe(const QString &propertyName) +{ + if (!m_model || !m_model->rewriterView()) + return; + + /* Ideally we should not missuse the rewriterView + * If we add more code here we have to forward the property editor view */ + RewriterView *rewriterView = m_model->rewriterView(); + + if (rewriterView->selectedModelNodes().isEmpty()) + return; + + ModelNode selectedNode = rewriterView->selectedModelNodes().constFirst(); + + rewriterView->emitCustomNotification("INSERT_KEYFRAME", + { selectedNode }, + { propertyName }); +} + int PropertyEditorContextObject::majorVersion() const { return m_majorVersion; @@ -270,6 +289,20 @@ void PropertyEditorContextObject::setMinorVersion(int minorVersion) emit minorVersionChanged(); } +bool PropertyEditorContextObject::hasActiveTimeline() const +{ + return m_setHasActiveTimeline; +} + +void PropertyEditorContextObject::setHasActiveTimeline(bool b) +{ + if (b == m_setHasActiveTimeline) + return; + + m_setHasActiveTimeline = b; + emit hasActiveTimelineChanged(); +} + void PropertyEditorContextObject::insertInQmlContext(QQmlContext *context) { m_qmlContext = context; diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h index f087bdaea1e..212f5742cdd 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h @@ -55,6 +55,8 @@ class PropertyEditorContextObject : public QObject Q_PROPERTY(bool hasAliasExport READ hasAliasExport NOTIFY hasAliasExportChanged) + Q_PROPERTY(bool hasActiveTimeline READ hasActiveTimeline NOTIFY hasActiveTimelineChanged) + Q_PROPERTY(QQmlPropertyMap* backendValues READ backendValues WRITE setBackendValues NOTIFY backendValuesChanged) Q_PROPERTY(QQmlComponent* specificQmlComponent READ specificQmlComponent NOTIFY specificQmlComponentChanged) @@ -81,6 +83,7 @@ public: Q_INVOKABLE void toogleExportAlias(); Q_INVOKABLE void changeTypeName(const QString &typeName); + Q_INVOKABLE void insertKeyframe(const QString &propertyName); int majorVersion() const; int majorQtQuickVersion() const; @@ -91,6 +94,9 @@ public: int minorVersion() const; void setMinorVersion(int minorVersion); + bool hasActiveTimeline() const; + void setHasActiveTimeline(bool b); + void insertInQmlContext(QQmlContext *context); QQmlComponent *specificQmlComponent(); @@ -110,6 +116,7 @@ signals: void minorQtQuickVersionChanged(); void specificQmlComponentChanged(); void hasAliasExportChanged(); + void hasActiveTimelineChanged(); public slots: void setGlobalBaseUrl(const QUrl &newBaseUrl); @@ -153,6 +160,8 @@ private: Model *m_model = nullptr; bool m_aliasExport = false; + + bool m_setHasActiveTimeline = false; }; } //QmlDesigner { diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp index 7c6435a1b89..9a0cba3ca08 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp @@ -29,6 +29,7 @@ #include "propertyeditortransaction.h" #include #include +#include #include #include @@ -328,6 +329,9 @@ void PropertyEditorQmlBackend::setup(const QmlObjectNode &qmlObjectNode, const Q contextObject()->setIsBaseState(qmlObjectNode.isInBaseState()); contextObject()->setHasAliasExport(qmlObjectNode.isAliasExported()); + + contextObject()->setHasActiveTimeline(QmlTimelineMutator::hasActiveTimeline(qmlObjectNode.view())); + contextObject()->setSelectionChanged(false); contextObject()->setSelectionChanged(false); diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp index 63e415f1b96..7ac69fb2ae4 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp @@ -30,6 +30,7 @@ #include "propertyeditortransaction.h" #include +#include #include #include @@ -368,6 +369,14 @@ bool PropertyEditorView::locked() const return m_locked; } +void PropertyEditorView::nodeCreated(const ModelNode &modelNode) +{ + if (!m_qmlBackEndForCurrentType->contextObject()->hasActiveTimeline() + && QmlTimelineMutator::isValidQmlTimelineMutator(modelNode)) { + m_qmlBackEndForCurrentType->contextObject()->setHasActiveTimeline(QmlTimelineMutator::hasActiveTimeline(this)); + } +} + void PropertyEditorView::updateSize() { if (!m_qmlBackEndForCurrentType) diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h index 316164f4c29..0455a0d7f7f 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h @@ -93,6 +93,8 @@ public: bool locked() const; + void nodeCreated(const ModelNode &createdNode); + protected: void timerEvent(QTimerEvent *event) override; void setupPane(const TypeName &typeName); diff --git a/src/plugins/qmldesigner/designercore/include/qmltimelinemutator.h b/src/plugins/qmldesigner/designercore/include/qmltimelinemutator.h index 8cddecba803..0be3cc1d385 100644 --- a/src/plugins/qmldesigner/designercore/include/qmltimelinemutator.h +++ b/src/plugins/qmldesigner/designercore/include/qmltimelinemutator.h @@ -65,6 +65,7 @@ public: QList allTargets() const; QList framesForTarget(const ModelNode &target) const; void destroyFramesForTarget(const ModelNode &target); + static bool hasActiveTimeline(AbstractView *view); private: void addFramesIfNotExists(const ModelNode &node, const PropertyName &propertyName); diff --git a/src/plugins/qmldesigner/designercore/model/qmltimelinemutator.cpp b/src/plugins/qmldesigner/designercore/model/qmltimelinemutator.cpp index 82660513699..319a9a64215 100644 --- a/src/plugins/qmldesigner/designercore/model/qmltimelinemutator.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmltimelinemutator.cpp @@ -210,6 +210,23 @@ void QmlTimelineMutator::destroyFramesForTarget(const ModelNode &target) frames.destroy(); } +bool QmlTimelineMutator::hasActiveTimeline(AbstractView *view) +{ + if (view && view->isAttached()) { + if (!view->model()->hasImport(Import::createLibraryImport("QtQuick.Timeline", "1.0"), true, true)) + return false; + + const ModelNode root = view->rootModelNode(); + if (root.isValid()) + for (const ModelNode &child : root.directSubModelNodes()) { + if (QmlTimelineMutator::isValidQmlTimelineMutator(child)) + return QmlTimelineMutator(child).isEnabled(); + } + } + + return false; +} + void QmlTimelineMutator::addFramesIfNotExists(const ModelNode &node, const PropertyName &propertyName) { if (!isValid()) From 88d65af7d3cf03f589f8b0f72acb1f05f8223ea8 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 31 Jan 2018 11:20:18 +0100 Subject: [PATCH 55/59] ModelEditor: Do not needlessly add objects to the global pool Change-Id: I27e0d0fbab934ba8effe78c8617c6f2305b4047f Reviewed-by: hjk --- src/plugins/modeleditor/modeleditor_plugin.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/plugins/modeleditor/modeleditor_plugin.cpp b/src/plugins/modeleditor/modeleditor_plugin.cpp index acaa8f24dce..7571703cbbd 100644 --- a/src/plugins/modeleditor/modeleditor_plugin.cpp +++ b/src/plugins/modeleditor/modeleditor_plugin.cpp @@ -88,16 +88,9 @@ bool ModelEditorPlugin::initialize(const QStringList &arguments, QString *errorS Q_UNUSED(errorString); d->modelsManager = new ModelsManager(this); - addAutoReleasedObject(d->modelsManager); - d->uiController = new UiController(this); - addAutoReleasedObject(d->uiController); - d->modelFactory = new ModelEditorFactory(d->uiController, this); - addAutoReleasedObject(d->modelFactory); - d->settingsController = new SettingsController(this); - addAutoReleasedObject(d->settingsController); Core::JsExpander::registerQObjectForJs(QLatin1String("Modeling"), new JsExtension(this)); From ab9cce7fe7adba200744c5930600d3d1c43a9073 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 29 Jan 2018 13:05:13 +0100 Subject: [PATCH 56/59] Utils: use system case for environment variables on windows Match case of user changed environment variables to the already defined variables. Change-Id: Ic012d35faa0822df3523ab642491c9f19051853c Reviewed-by: Oswald Buddenhagen Reviewed-by: hjk --- src/libs/utils/environment.cpp | 7 ++++++- src/libs/utils/environment.h | 1 + src/libs/utils/environmentmodel.cpp | 7 +++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/environment.cpp b/src/libs/utils/environment.cpp index 0705c300818..74534eeaf4b 100644 --- a/src/libs/utils/environment.cpp +++ b/src/libs/utils/environment.cpp @@ -500,7 +500,7 @@ Environment::const_iterator Environment::constEnd() const Environment::const_iterator Environment::constFind(const QString &name) const { - return m_values.constFind(name); + return findKey(m_values, m_osType, name); } int Environment::size() const @@ -567,6 +567,11 @@ bool Environment::hasKey(const QString &key) const return m_values.contains(key); } +OsType Environment::osType() const +{ + return m_osType; +} + QString Environment::userName() const { return value(QString::fromLatin1(m_osType == OsTypeWindows ? "USERNAME" : "USER")); diff --git a/src/libs/utils/environment.h b/src/libs/utils/environment.h index e3a382daf04..4fed80a8bb3 100644 --- a/src/libs/utils/environment.h +++ b/src/libs/utils/environment.h @@ -91,6 +91,7 @@ public: /// Return the Environment changes necessary to modify this into the other environment. QList diff(const Environment &other, bool checkAppendPrepend = false) const; bool hasKey(const QString &key) const; + OsType osType() const; QString userName() const; diff --git a/src/libs/utils/environmentmodel.cpp b/src/libs/utils/environmentmodel.cpp index 4191d3abeee..fde8e7ad550 100644 --- a/src/libs/utils/environmentmodel.cpp +++ b/src/libs/utils/environmentmodel.cpp @@ -364,6 +364,13 @@ void EnvironmentModel::setUserChanges(QList list) name = name.trimmed(); if (name.startsWith(QLatin1String("export "))) name = name.mid(7).trimmed(); + if (d->m_baseEnvironment.osType() == OsTypeWindows) { + // Environment variable names are case-insensitive under windows, but we still + // want to preserve the case of pre-existing variables. + auto it = d->m_baseEnvironment.constFind(name); + if (it != d->m_baseEnvironment.constEnd()) + name = d->m_baseEnvironment.key(it); + } } d->updateResultEnvironment(); From 66d02773e7abe16803ab106f20936a8a24d52730 Mon Sep 17 00:00:00 2001 From: Nikita Baryshnikov Date: Wed, 31 Jan 2018 18:52:24 +0300 Subject: [PATCH 57/59] Environment.constFind added test Change-Id: I6213650b811960fa67545df4b6531aafcca05c81 Reviewed-by: hjk Reviewed-by: David Schulz --- tests/auto/environment/tst_environment.cpp | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tests/auto/environment/tst_environment.cpp b/tests/auto/environment/tst_environment.cpp index 1fc8ae07301..3a835df46d3 100644 --- a/tests/auto/environment/tst_environment.cpp +++ b/tests/auto/environment/tst_environment.cpp @@ -29,6 +29,8 @@ using namespace Utils; +Q_DECLARE_METATYPE(Utils::OsType) + class tst_Environment : public QObject { Q_OBJECT @@ -55,6 +57,9 @@ private slots: void environmentUnsetUnknownWindows(); void environmentUnsetUnknownUnix(); + void find_data(); + void find(); + private: Environment env; }; @@ -247,6 +252,38 @@ void tst_Environment::environmentUnsetUnknownUnix() QCOMPARE(env.toStringList(), QStringList({"Foo=bar", "Hi=HO"})); } +void tst_Environment::find_data() +{ + QTest::addColumn("osType"); + QTest::addColumn("contains"); + QTest::addColumn("variable"); + + + QTest::newRow("win") << Utils::OsTypeWindows << true << "foo"; + QTest::newRow("win") << Utils::OsTypeWindows << true << "Foo"; + QTest::newRow("lin") << Utils::OsTypeLinux << true << "Foo"; + QTest::newRow("lin") << Utils::OsTypeLinux << false << "foo"; +} + +void tst_Environment::find() +{ + QFETCH(Utils::OsType, osType); + QFETCH(bool, contains); + QFETCH(QString, variable); + + + Environment env(QStringList({"Foo=bar", "Hi=HO"}), osType); + + auto end = env.constEnd(); + auto it = env.constFind(variable); + + QCOMPARE((end != it), contains); + + if (contains) + QCOMPARE(it.value(), "bar"); + +} + QTEST_MAIN(tst_Environment) #include "tst_environment.moc" From b30643c4fa14013aecb71c9968c8c33fb67558d8 Mon Sep 17 00:00:00 2001 From: Ivan Donchevskii Date: Wed, 31 Jan 2018 14:44:10 +0100 Subject: [PATCH 58/59] Clang: fix CINDEX_VERSION_MINOR for clang_getFileContents Change-Id: Id546906fb119be2415500ae13f64c2c0e1e6a81b Reviewed-by: Nikolai Kosjar --- src/tools/clangbackend/source/sourcelocation.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tools/clangbackend/source/sourcelocation.cpp b/src/tools/clangbackend/source/sourcelocation.cpp index d015cad4eef..41f68a9ae6f 100644 --- a/src/tools/clangbackend/source/sourcelocation.cpp +++ b/src/tools/clangbackend/source/sourcelocation.cpp @@ -93,8 +93,8 @@ SourceLocation::SourceLocation(CXTranslationUnit cxTranslationUnit, return; filePath_ = ClangString(clang_getFileName(cxFile)); -// CLANG-UPGRADE-CHECK: Remove HAS_GETFILECONTENTS_BACKPORTED check once we require clang >= 6.0 -#if defined(CINDEX_VERSION_HAS_GETFILECONTENTS_BACKPORTED) || CINDEX_VERSION_MINOR >= 44 +// CLANG-UPGRADE-CHECK: Remove HAS_GETFILECONTENTS_BACKPORTED check once we require clang >= 7.0 +#if defined(CINDEX_VERSION_HAS_GETFILECONTENTS_BACKPORTED) || CINDEX_VERSION_MINOR >= 47 if (column_ > 1) { const uint lineStart = offset_ + 1 - column_; const char *contents = clang_getFileContents(cxTranslationUnit, cxFile, nullptr); From 97631cfdb83654d0aced65d84583303dc4bc245b Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 31 Jan 2018 11:32:03 +0100 Subject: [PATCH 59/59] ModelEditor: Add text to scratch model wizard icon Like for the non-scratch wizard, separating it from SCXML. Change-Id: Ia0ce6bad14dae8c3d7522c1d1dcdc4d87f77b77e Reviewed-by: Alessandro Portale --- .../templates/wizards/files/modeling/scratch/wizard.json | 1 + 1 file changed, 1 insertion(+) diff --git a/share/qtcreator/templates/wizards/files/modeling/scratch/wizard.json b/share/qtcreator/templates/wizards/files/modeling/scratch/wizard.json index 7f3f4219561..71bad75ddff 100644 --- a/share/qtcreator/templates/wizards/files/modeling/scratch/wizard.json +++ b/share/qtcreator/templates/wizards/files/modeling/scratch/wizard.json @@ -6,6 +6,7 @@ "trDescription": "Creates a scratch model using a temporary file.", "trDisplayName": "Scratch Model", "trDisplayCategory": "Modeling", + "iconText": "qmodel", "platformIndependent": true, "enabled": "%{JS: [ %{Plugins} ].indexOf('ModelEditor') >= 0}",

rjg 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 t;rPEdTaVv4P}$tk!C*LTdRqLhK-ooW58qZ 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 N5l>e?mvv4FO#sh|m`4Br literal 45597 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 diff --git a/doc/images/qtcreator-new-project-summary-qt-gui.png b/doc/images/qtcreator-new-project-summary-qt-gui.png index e484cad0d51513f9782b198aa00f084ca2306149..70daffe6afae1851003cf2f71829a70f17b055d7 100644 GIT binary patch literal 22433 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 ~TwB4M%cS4EH^|#;UYoE@I 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%0Dc*lQ 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 From b351e49cbff193c1ead9afd664e43d5c1ec1c0c0 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 25 Jan 2018 14:00:49 +0100 Subject: [PATCH 09/59] Doc: Describe the bread crumbs in the Projects sidebar view Update the screenshot. Change-Id: Ife0e20ed2e8624e5ce2f4466427a0e1950f7e390 Reviewed-by: Tobias Hunger --- doc/images/qtcreator-filesystem-view.png | Bin 14499 -> 18128 bytes doc/src/howto/creator-ui.qdoc | 6 +++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/images/qtcreator-filesystem-view.png b/doc/images/qtcreator-filesystem-view.png index cf8f6bb666f560310dbc5f59ea993e14424f5385..cd730fc925b3292a951cb43e72e718567b1229e9 100644 GIT binary patch literal 18128 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 U*@fyE7#J8lUHx3vIVCg!0D0o`&Hw-a literal 14499 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 Date: Thu, 25 Jan 2018 14:43:18 +0100 Subject: [PATCH 10/59] Doc: Describe new file management actions in Projects sidebar view Change-Id: I4af328d19260234d134ed07cef0b98fba155aeda Reviewed-by: Tobias Hunger --- doc/src/howto/creator-ui.qdoc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/src/howto/creator-ui.qdoc b/doc/src/howto/creator-ui.qdoc index c447d69a338..b6ccd840f54 100644 --- a/doc/src/howto/creator-ui.qdoc +++ b/doc/src/howto/creator-ui.qdoc @@ -292,6 +292,14 @@ \li Search from the selected directory. + \li Create new files. For more information, see + \l{Adding Files to Projects}. + + \li Rename or remove existing files. + + \li Compare the selected file with the currently open file in the diff + editor. For more information, see \l{Comparing Files}. + \li Display the contents of a particular directory in the view. \endlist From 2e2b4f09980517f5a41484c4b41a0059ee42416b Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 16 Jan 2018 17:27:25 +0100 Subject: [PATCH 11/59] Add changes file for 4.6 Change-Id: I5e36e735f6f721fba02d3e1fd86a98a43cfae5f5 Reviewed-by: Leena Miettinen --- dist/changes-4.6.0.md | 164 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 dist/changes-4.6.0.md diff --git a/dist/changes-4.6.0.md b/dist/changes-4.6.0.md new file mode 100644 index 00000000000..5aea16ad0b5 --- /dev/null +++ b/dist/changes-4.6.0.md @@ -0,0 +1,164 @@ +Qt Creator version 4.6 contains bug fixes and new features. + +The most important changes are listed in this document. For a complete +list of changes, see the Git log for the Qt Creator sources that +you can check out from the public Git repository. For example: + + git clone git://code.qt.io/qt-creator/qt-creator.git + git log --cherry-pick --pretty=oneline origin/4.5..v4.6.0 + +General + +* Locator + * Added filter `b` for bookmarks + * Added filter `t` for triggering items from main menu + * Added filter `=` for evaluating JavaScript expressions + (QTCREATORBUG-14380) +* File System View + * Added bread crumbs for file path (QTCREATORBUG-19203) + * Added `Add New`, `Rename`, `Remove File`, `Diff Against Current File` + (QTCREATORBUG-19213, QTCREATORBUG-19209, QTCREATORBUG-19208, + QTCREATORBUG-19211) +* Added restoration of search flags when choosing search term from history + +Editing + +* Added option to display annotations between lines (QTCREATORBUG-19181) +* Fixed that editor could jump to end of file when editing in a different split + (QTCREATORBUG-19550) + +All Projects + +* Added filtering to project kit setup page + +QMake Projects + +CMake Projects + +Qbs Projects + +* Added option to add library paths to dependencies (QTCREATORBUG-19274) + +C++ Support + +* Clang Code Model + * Switched to Clang 5.0, adding support for C++17 + * Implemented information tool tips, which improves type information + including resolution of `auto` types (QTCREATORBUG-11259) + * Integrated Clang-Tidy and Clazy. + Enable checks in Options > C++ > Code Model > Clang Plugins + * Added renaming of local symbols + * Added separate highlighting for function definitions (QTCREATORBUG-16625) + +QML Support + +* Added inline annotations for issues from code model + +Python Support + +Debugging + +* Split `Expressions` view from `Locals` view (QTCREATORBUG-19167) + +QML Profiler + +Qt Quick Designer + +* Added font and text properties from Qt 5.10 +* Fixed that items blurred when zooming in +* Fixed crash when changing control focus policy (QTCREATORBUG-19563) + +Version Control Systems + +* Git + * Added `Recover Deleted Files` + * Added `Reload` button to `git log` and `git blame` +* Gerrit + * Added support for private and work-in-progress changes for + Gerrit 2.15 and later + +Diff Viewer + +* Added folding for files and chunks + +Test Integration + +* Added grouping of test cases (QTCREATORBUG-17979) +* Google Test + * Fixed detection of crashed tests (QTCREATORBUG-19565) + +Beautifier + +Model Editor + +* Added support for text alignment +* Added support for multi-line object names +* Added support for dragging items onto model editor from more panes +* Added `Export Selected Elements` +* Added `Flat` visual role +* Added `Add Related Elements` to diagram context menu +* Added wizard for scratch models +* Fixed issue with selecting items (QTCREATORBUG-18368) + +SCXML Editor + +Platform Specific + +Windows + +* Added support for the [heob](https://github.com/ssbssa/heob/releases) + memory analyzer +* Fixed detection of CDB in non-default installation roots + +macOS + +Android + +* Fixed issues with GCC include directories in Clang code model + +iOS + +Universal Windows Platform + +Remote Linux + +* Fixed that remote application was not killed before deployment + (QTCREATORBUG-19326) + +Credits for these changes go to: +Adam Treat +Alessandro Portale +Alexandru Croitor +Andre Hartmann +André Pönitz +Christian Gagneraud +Christian Kandeler +Christian Stenger +Daniel Engelke +David Schulz +Eike Ziller +Friedemann Kleint +Hannes Domani +Hugo Holgersson +Ivan Donchevskii +Jake Petroules +Jaroslaw Kobus +Jochen Becher +Jörg Bornemann +Marco Benelli +Marco Bubke +Mitch Curtis +Nikita Baryshnikov +Nikolai Kosjar +Oliver Wolff +Orgad Shaneh +Oswald Buddenhagen +Przemyslaw Gorszkowski +Robert Löhning +Thomas Hartmann +Tim Jenssen +Tobias Hunger +Tomasz Olszak +Tor Arne Vestbø +Ulf Hermann +Vikas Pachdha From fa501caa76ef459dcc5c13e908f0c898bf898bd4 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 24 Jan 2018 14:47:47 +0100 Subject: [PATCH 12/59] Clang: Handle cancelled future in ClangHoverHandler This completes Clang: Cancel tooltip future on backend restart commit 56157f739d8547c0abf1500ef3a696531f3e9338 Task-number: QTCREATORBUG-19644 Change-Id: I4a27681368df912003a415cec809c578f7c409cd Reviewed-by: Eike Ziller Reviewed-by: Ivan Donchevskii --- src/plugins/clangcodemodel/clanghoverhandler.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/clangcodemodel/clanghoverhandler.cpp b/src/plugins/clangcodemodel/clanghoverhandler.cpp index 5903b182467..1c387562612 100644 --- a/src/plugins/clangcodemodel/clanghoverhandler.cpp +++ b/src/plugins/clangcodemodel/clanghoverhandler.cpp @@ -133,7 +133,10 @@ void ClangHoverHandler::identifyMatch(TextEditorWidget *editorWidget, m_reportPriority = report; m_futureWatcher.reset(new QFutureWatcher()); QObject::connect(m_futureWatcher.data(), &QFutureWatcherBase::finished, [this]() { - processToolTipInfo(m_futureWatcher->result()); + if (m_futureWatcher->isCanceled()) + m_reportPriority(Priority_None); + else + processToolTipInfo(m_futureWatcher->result()); }); m_futureWatcher->setFuture(future); return; From 13ba063696381be0a223b2b20cf5d4e9a0937f77 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Thu, 25 Jan 2018 17:49:15 +0100 Subject: [PATCH 13/59] QmlProfiler: Fix translations and tests for statistics view The statistics view is not called "events" anymore. Task-number: QTCREATORBUG-19658 Change-Id: Iff4375d3dc0cf5d82d118244698887818f924c07 Reviewed-by: Robert Loehning --- share/qtcreator/translations/qtcreator_cs.ts | 2 +- share/qtcreator/translations/qtcreator_fr.ts | 2 +- share/qtcreator/translations/qtcreator_uk.ts | 2 +- .../qtcreator/translations/qtcreator_zh_CN.ts | 2 +- .../qtcreator/translations/qtcreator_zh_TW.ts | 2 +- .../qmlprofiler/qmlprofilerstatisticsview.cpp | 34 +++++++++---------- tests/system/objects.map | 2 +- .../suite_debugger/tst_simple_analyze/test.py | 2 +- 8 files changed, 23 insertions(+), 25 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_cs.ts b/share/qtcreator/translations/qtcreator_cs.ts index 0ef506e5575..0b0ad9d1447 100644 --- a/share/qtcreator/translations/qtcreator_cs.ts +++ b/share/qtcreator/translations/qtcreator_cs.ts @@ -57589,7 +57589,7 @@ Má se to zkusit ještě jednou? - QmlProfiler::Internal::QmlProfilerEventsMainView + QmlProfiler::Internal::QmlProfilerStatisticsMainView Location Umístění diff --git a/share/qtcreator/translations/qtcreator_fr.ts b/share/qtcreator/translations/qtcreator_fr.ts index 3469e6780ed..16d3b304730 100644 --- a/share/qtcreator/translations/qtcreator_fr.ts +++ b/share/qtcreator/translations/qtcreator_fr.ts @@ -58942,7 +58942,7 @@ Voulez-vous la tuer ? - QmlProfiler::Internal::QmlProfilerEventsMainView + QmlProfiler::Internal::QmlProfilerStatisticsMainView Location Emplacement diff --git a/share/qtcreator/translations/qtcreator_uk.ts b/share/qtcreator/translations/qtcreator_uk.ts index 33c48c0773e..8a20f959d43 100644 --- a/share/qtcreator/translations/qtcreator_uk.ts +++ b/share/qtcreator/translations/qtcreator_uk.ts @@ -30492,7 +30492,7 @@ Do you want to kill it? - QmlProfiler::Internal::QmlProfilerEventsMainView + QmlProfiler::Internal::QmlProfilerStatisticsMainView Location Розташування diff --git a/share/qtcreator/translations/qtcreator_zh_CN.ts b/share/qtcreator/translations/qtcreator_zh_CN.ts index 1cc26a1ef98..74d7dac92c2 100644 --- a/share/qtcreator/translations/qtcreator_zh_CN.ts +++ b/share/qtcreator/translations/qtcreator_zh_CN.ts @@ -55655,7 +55655,7 @@ Do you want to retry? - QmlProfiler::Internal::QmlProfilerEventsMainView + QmlProfiler::Internal::QmlProfilerStatisticsMainView Location 路径 diff --git a/share/qtcreator/translations/qtcreator_zh_TW.ts b/share/qtcreator/translations/qtcreator_zh_TW.ts index bc117ee0ce2..4e1339a0cde 100644 --- a/share/qtcreator/translations/qtcreator_zh_TW.ts +++ b/share/qtcreator/translations/qtcreator_zh_TW.ts @@ -32076,7 +32076,7 @@ Do you want to kill it? - QmlProfiler::Internal::QmlProfilerEventsMainView + QmlProfiler::Internal::QmlProfilerStatisticsMainView Location 位置 diff --git a/src/plugins/qmlprofiler/qmlprofilerstatisticsview.cpp b/src/plugins/qmlprofiler/qmlprofilerstatisticsview.cpp index b603def7ba7..e415ec2f19e 100644 --- a/src/plugins/qmlprofiler/qmlprofilerstatisticsview.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerstatisticsview.cpp @@ -107,41 +107,39 @@ static void setViewDefaults(Utils::TreeView *view) static QString displayHeader(Fields header) { - static const char ctxt[] = "QmlProfiler::Internal::QmlProfilerEventsMainView"; - switch (header) { case Callee: - return QCoreApplication::translate(ctxt, "Callee"); + return QmlProfilerStatisticsMainView::tr("Callee"); case CalleeDescription: - return QCoreApplication::translate(ctxt, "Callee Description"); + return QmlProfilerStatisticsMainView::tr("Callee Description"); case Caller: - return QCoreApplication::translate(ctxt, "Caller"); + return QmlProfilerStatisticsMainView::tr("Caller"); case CallerDescription: - return QCoreApplication::translate(ctxt, "Caller Description"); + return QmlProfilerStatisticsMainView::tr("Caller Description"); case CallCount: - return QCoreApplication::translate(ctxt, "Calls"); + return QmlProfilerStatisticsMainView::tr("Calls"); case Details: - return QCoreApplication::translate(ctxt, "Details"); + return QmlProfilerStatisticsMainView::tr("Details"); case Location: - return QCoreApplication::translate(ctxt, "Location"); + return QmlProfilerStatisticsMainView::tr("Location"); case MaxTime: - return QCoreApplication::translate(ctxt, "Longest Time"); + return QmlProfilerStatisticsMainView::tr("Longest Time"); case TimePerCall: - return QCoreApplication::translate(ctxt, "Mean Time"); + return QmlProfilerStatisticsMainView::tr("Mean Time"); case SelfTime: - return QCoreApplication::translate(ctxt, "Self Time"); + return QmlProfilerStatisticsMainView::tr("Self Time"); case SelfTimeInPercent: - return QCoreApplication::translate(ctxt, "Self Time in Percent"); + return QmlProfilerStatisticsMainView::tr("Self Time in Percent"); case MinTime: - return QCoreApplication::translate(ctxt, "Shortest Time"); + return QmlProfilerStatisticsMainView::tr("Shortest Time"); case TimeInPercent: - return QCoreApplication::translate(ctxt, "Time in Percent"); + return QmlProfilerStatisticsMainView::tr("Time in Percent"); case TotalTime: - return QCoreApplication::translate(ctxt, "Total Time"); + return QmlProfilerStatisticsMainView::tr("Total Time"); case Type: - return QCoreApplication::translate(ctxt, "Type"); + return QmlProfilerStatisticsMainView::tr("Type"); case MedianTime: - return QCoreApplication::translate(ctxt, "Median Time"); + return QmlProfilerStatisticsMainView::tr("Median Time"); default: return QString(); } diff --git a/tests/system/objects.map b/tests/system/objects.map index 56d1a346b9a..388424259bd 100644 --- a/tests/system/objects.map +++ b/tests/system/objects.map @@ -62,7 +62,7 @@ :Dialog_Debugger::Internal::SymbolPathsDialog {name='Debugger__Internal__SymbolPathsDialog' type='Debugger::Internal::SymbolPathsDialog' visible='1' windowTitle='Dialog'} :Dialog_QmlJSEditor::Internal::ComponentNameDialog {name='QmlJSEditor__Internal__ComponentNameDialog' type='QmlJSEditor::Internal::ComponentNameDialog' visible='1' windowTitle='Move Component into Separate File'} :Edit Environment_ProjectExplorer::EnvironmentItemsDialog {type='ProjectExplorer::EnvironmentItemsDialog' unnamed='1' visible='1' windowTitle='Edit Environment'} -:Events.QmlProfilerEventsTable_QmlProfiler::Internal::QmlProfilerEventsMainView {container=':Qt Creator.Events_QDockWidget' name='QmlProfilerEventsTable' type='QmlProfiler::Internal::QmlProfilerStatisticsMainView' visible='1'} +:Events.QmlProfilerEventsTable_QmlProfiler::Internal::QmlProfilerStatisticsMainView {container=':Qt Creator.Events_QDockWidget' name='QmlProfilerEventsTable' type='QmlProfiler::Internal::QmlProfilerStatisticsMainView' visible='1'} :Executable:_Utils::PathChooser {buddy=':scrollArea.Executable:_QLabel' type='Utils::PathChooser' unnamed='1' visible='1'} :Failed to start application_QMessageBox {type='QMessageBox' unnamed='1' visible='1' windowTitle='Failed to start application'} :File has been removed.Close_QPushButton {text='Close' type='QPushButton' unnamed='1' visible='1' window=':File has been removed_QMessageBox'} diff --git a/tests/system/suite_debugger/tst_simple_analyze/test.py b/tests/system/suite_debugger/tst_simple_analyze/test.py index 5de123db4d5..07166a8bf4d 100644 --- a/tests/system/suite_debugger/tst_simple_analyze/test.py +++ b/tests/system/suite_debugger/tst_simple_analyze/test.py @@ -107,7 +107,7 @@ def performTest(workingDir, projectName, targetCount, availableConfigs): (colPercent, colTotal, colSelfPercent, colSelf, colCalls, colMean, colMedian, colLongest, colShortest) = range(2, 11) model = waitForObject(":Events.QmlProfilerEventsTable_QmlProfiler::" - "Internal::QmlProfilerEventsMainView").model() + "Internal::QmlProfilerStatisticsMainView").model() compareEventsTab(model, "events_qt5.tsv") test.compare(dumpItems(model, column=colPercent)[0], '100.00 %') # cannot run following test on colShortest (unstable) From 30000c80af8dd1ccd6d58763fd64f8697672788e Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 18 Jan 2018 09:19:56 +0100 Subject: [PATCH 14/59] AutoTest: Ensure removal of empty items if possible Change-Id: I2cac91e56e8f22f89f88bbc82cc5f7b526500529 Reviewed-by: David Schulz --- src/plugins/autotest/quick/quicktesttreeitem.cpp | 6 ++++++ src/plugins/autotest/quick/quicktesttreeitem.h | 1 + src/plugins/autotest/testtreeitem.h | 1 + src/plugins/autotest/testtreemodel.cpp | 6 +++++- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/plugins/autotest/quick/quicktesttreeitem.cpp b/src/plugins/autotest/quick/quicktesttreeitem.cpp index a1b04f33fe2..6d3a2b99f48 100644 --- a/src/plugins/autotest/quick/quicktesttreeitem.cpp +++ b/src/plugins/autotest/quick/quicktesttreeitem.cpp @@ -348,6 +348,12 @@ bool QuickTestTreeItem::isGroupNodeFor(const TestTreeItem *other) const return TestTreeItem::isGroupNodeFor(other); } +bool QuickTestTreeItem::removeOnSweepIfEmpty() const +{ + return TestTreeItem::removeOnSweepIfEmpty() + || (type() == TestCase && name().isEmpty()); // remove pseudo item '' +} + TestTreeItem *QuickTestTreeItem::createParentGroupNode() const { if (filePath().isEmpty() || name().isEmpty()) diff --git a/src/plugins/autotest/quick/quicktesttreeitem.h b/src/plugins/autotest/quick/quicktesttreeitem.h index b7116125e30..30b5efd317b 100644 --- a/src/plugins/autotest/quick/quicktesttreeitem.h +++ b/src/plugins/autotest/quick/quicktesttreeitem.h @@ -48,6 +48,7 @@ public: bool modify(const TestParseResult *result) override; bool lessThan(const TestTreeItem *other, SortMode mode) const override; bool isGroupNodeFor(const TestTreeItem *other) const override; + bool removeOnSweepIfEmpty() const override; TestTreeItem *createParentGroupNode() const override; QSet internalTargets() const override; private: diff --git a/src/plugins/autotest/testtreeitem.h b/src/plugins/autotest/testtreeitem.h index 8234321bc03..012104f91f9 100644 --- a/src/plugins/autotest/testtreeitem.h +++ b/src/plugins/autotest/testtreeitem.h @@ -94,6 +94,7 @@ public: void markForRemoval(bool mark); void markForRemovalRecursively(bool mark); virtual void markForRemovalRecursively(const QString &filePath); + virtual bool removeOnSweepIfEmpty() const { return m_type == GroupNode; } bool markedForRemoval() const { return m_status == MarkedForRemoval; } bool newlyAdded() const { return m_status == NewlyAdded; } TestTreeItem *parentItem() const; diff --git a/src/plugins/autotest/testtreemodel.cpp b/src/plugins/autotest/testtreemodel.cpp index a4dea3c8e00..f189c6472d6 100644 --- a/src/plugins/autotest/testtreemodel.cpp +++ b/src/plugins/autotest/testtreemodel.cpp @@ -255,6 +255,10 @@ bool TestTreeModel::sweepChildren(TestTreeItem *item) hasChanged = true; } else if (child->hasChildren()) { hasChanged |= sweepChildren(child); + if (!child->hasChildren() && child->removeOnSweepIfEmpty()) { + destroyItem(child); + revalidateCheckState(item); + } } else { hasChanged |= child->newlyAdded(); } @@ -285,7 +289,7 @@ void TestTreeModel::insertItemInParent(TestTreeItem *item, TestTreeItem *root, b void TestTreeModel::revalidateCheckState(TestTreeItem *item) { QTC_ASSERT(item, return); - QTC_ASSERT(item->hasChildren(), return); + const TestTreeItem::Type type = item->type(); if (type == TestTreeItem::TestSpecialFunction || type == TestTreeItem::TestDataFunction || type == TestTreeItem::TestDataTag) { From f3c8ab52faf03329fd6e88f37e83bbb8279e7628 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 26 Jan 2018 07:29:20 +0100 Subject: [PATCH 15/59] AutoTest: Avoid unnecessary local object Change-Id: I9794a35ce5f983114769f3a14ab970f4e822471f Reviewed-by: David Schulz --- src/plugins/autotest/testresultdelegate.cpp | 8 +++++--- src/plugins/autotest/testresultdelegate.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/plugins/autotest/testresultdelegate.cpp b/src/plugins/autotest/testresultdelegate.cpp index 68403948318..d59d0441614 100644 --- a/src/plugins/autotest/testresultdelegate.cpp +++ b/src/plugins/autotest/testresultdelegate.cpp @@ -55,13 +55,11 @@ void TestResultDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op { QStyleOptionViewItem opt = option; initStyleOption(&opt, index); - painter->save(); QFontMetrics fm(opt.font); QBrush background; QColor foreground; - const QAbstractItemView *view = qobject_cast(opt.widget); const bool selected = opt.state & QStyle::State_Selected; if (selected) { @@ -71,10 +69,14 @@ void TestResultDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op background = opt.palette.window().color(); foreground = opt.palette.text().color(); } + + auto resultFilterModel = qobject_cast(index.model()); + if (!resultFilterModel) + return; + painter->save(); painter->fillRect(opt.rect, background); painter->setPen(foreground); - TestResultFilterModel *resultFilterModel = static_cast(view->model()); LayoutPositions positions(opt, resultFilterModel); const TestResult *testResult = resultFilterModel->testResult(index); QTC_ASSERT(testResult, painter->restore();return); diff --git a/src/plugins/autotest/testresultdelegate.h b/src/plugins/autotest/testresultdelegate.h index 2161906a606..bc61f2a0675 100644 --- a/src/plugins/autotest/testresultdelegate.h +++ b/src/plugins/autotest/testresultdelegate.h @@ -56,7 +56,7 @@ private: class LayoutPositions { public: - LayoutPositions(QStyleOptionViewItem &options, TestResultFilterModel *filterModel) + LayoutPositions(QStyleOptionViewItem &options, const TestResultFilterModel *filterModel) : m_totalWidth(options.rect.width()), m_top(options.rect.top()), m_bottom(options.rect.bottom()) From 4e81360e4a5f5e1c389757642ae0498939cf7c87 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 26 Jan 2018 08:02:27 +0100 Subject: [PATCH 16/59] AutoTest: Simplify code for (de)selecting all items Checkstate handling has been redone, which allows to simplify these actions. Change-Id: Ice89d2e9a1d8c3e38520ff2519d06fc4e6d67df9 Reviewed-by: David Schulz --- src/plugins/autotest/testtreeview.cpp | 42 +++++---------------------- src/plugins/autotest/testtreeview.h | 1 - 2 files changed, 7 insertions(+), 36 deletions(-) diff --git a/src/plugins/autotest/testtreeview.cpp b/src/plugins/autotest/testtreeview.cpp index 5c285ee229a..c8ae2cee074 100644 --- a/src/plugins/autotest/testtreeview.cpp +++ b/src/plugins/autotest/testtreeview.cpp @@ -45,6 +45,13 @@ TestTreeView::TestTreeView(QWidget *parent) Core::ICore::addContextObject(m_context); } +static void changeCheckStateAll(const Qt::CheckState checkState) +{ + TestTreeModel *model = TestTreeModel::instance(); + for (int row = 0, count = model->rowCount(); row < count; ++row) + model->setData(model->index(row, 0), checkState, Qt::CheckStateRole); +} + void TestTreeView::selectAll() { changeCheckStateAll(Qt::Checked); @@ -55,40 +62,5 @@ void TestTreeView::deselectAll() changeCheckStateAll(Qt::Unchecked); } -// this avoids the re-evaluation of parent nodes when modifying the child nodes (setData()) -void TestTreeView::changeCheckStateAll(const Qt::CheckState checkState) -{ - const TestTreeModel *model = TestTreeModel::instance(); - - for (int rootRow = 0; rootRow < model->rowCount(rootIndex()); ++rootRow) { - QModelIndex currentRootIndex = model->index(rootRow, 0, rootIndex()); - if (!currentRootIndex.isValid()) - return; - int count = model->rowCount(currentRootIndex); - QModelIndex last; - for (int classesRow = 0; classesRow < count; ++classesRow) { - const QModelIndex classesIndex = model->index(classesRow, 0, currentRootIndex); - int funcCount = model->rowCount(classesIndex); - TestTreeItem *item = static_cast(classesIndex.internalPointer()); - if (item) { - item->setData(0, checkState, Qt::CheckStateRole); - if (!item->childCount()) - last = classesIndex; - } - for (int functionRow = 0; functionRow < funcCount; ++functionRow) { - last = model->index(functionRow, 0, classesIndex); - TestTreeItem *item = static_cast(last.internalPointer()); - if (item) - item->setData(0, checkState, Qt::CheckStateRole); - } - } - if (count == 0) { - if (auto item = static_cast(currentRootIndex.internalPointer())) - item->setData(0, checkState, Qt::CheckStateRole); - } - emit dataChanged(currentRootIndex, last); - } -} - } // namespace Internal } // namespace Autotest diff --git a/src/plugins/autotest/testtreeview.h b/src/plugins/autotest/testtreeview.h index 631a552912f..1641851cc7a 100644 --- a/src/plugins/autotest/testtreeview.h +++ b/src/plugins/autotest/testtreeview.h @@ -45,7 +45,6 @@ public: void deselectAll(); private: - void changeCheckStateAll(const Qt::CheckState checkState); Core::IContext *m_context; }; From 4ba4079db2c3ba9fc09e18120a5d7e11b0838a25 Mon Sep 17 00:00:00 2001 From: Ivan Donchevskii Date: Wed, 24 Jan 2018 11:19:58 +0100 Subject: [PATCH 17/59] CppTools: Use -isystem only for non-project includes ...and return -I for ones in project. In case -isystem is set for all includes we don't get proper reparse when the included file is in angle brackets and is changed. Change-Id: Iba912edfc488aed2a4484f6a742a7c36099e8a13 Reviewed-by: Nikolai Kosjar --- .../cpptools/compileroptionsbuilder.cpp | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index 26a133824ad..9c6c7d18419 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -27,8 +27,10 @@ #include +#include #include +#include #include #include @@ -37,6 +39,8 @@ namespace CppTools { +static constexpr char SYSTEM_INCLUDE_PREFIX[] = "-isystem"; + CompilerOptionsBuilder::CompilerOptionsBuilder(const ProjectPart &projectPart, const QString &clangVersion, const QString &clangResourceDirectory) @@ -119,10 +123,23 @@ void CompilerOptionsBuilder::enableExceptions() add(QLatin1String("-fexceptions")); } +static Utils::FileName absoluteDirectory(const QString &filePath) +{ + return Utils::FileName::fromString(QFileInfo(filePath + '/').absolutePath()); +} + +static Utils::FileName projectTopLevelDirectory(const ProjectPart &projectPart) +{ + if (!projectPart.project) + return Utils::FileName(); + return projectPart.project->projectDirectory(); +} + void CompilerOptionsBuilder::addHeaderPathOptions() { typedef ProjectPartHeaderPath HeaderPath; const QString defaultPrefix = includeDirOption(); + const Utils::FileName projectDirectory = projectTopLevelDirectory(m_projectPart); QStringList result; @@ -134,6 +151,7 @@ void CompilerOptionsBuilder::addHeaderPathOptions() continue; QString prefix; + Utils::FileName path; switch (headerPath.type) { case HeaderPath::FrameworkPath: prefix = QLatin1String("-F"); @@ -141,7 +159,11 @@ void CompilerOptionsBuilder::addHeaderPathOptions() default: // This shouldn't happen, but let's be nice..: // intentional fall-through: case HeaderPath::IncludePath: - prefix = defaultPrefix; + path = absoluteDirectory(headerPath.path); + if (path == projectDirectory || path.isChildOf(projectDirectory)) + prefix = defaultPrefix; + else + prefix = SYSTEM_INCLUDE_PREFIX; break; } @@ -409,7 +431,7 @@ void CompilerOptionsBuilder::addDefineFunctionMacrosMsvc() QString CompilerOptionsBuilder::includeDirOption() const { - return QLatin1String("-isystem"); + return QLatin1String("-I"); } QByteArray CompilerOptionsBuilder::macroOption(const ProjectExplorer::Macro ¯o) const @@ -506,7 +528,7 @@ void CompilerOptionsBuilder::addPredefinedHeaderPathsOptions() void CompilerOptionsBuilder::addClangIncludeFolder() { QTC_CHECK(!m_clangVersion.isEmpty()); - add(includeDirOption()); + add(SYSTEM_INCLUDE_PREFIX); add(clangIncludeDirectory()); } From 9b495853c663c3efac4b8c3c440b4a9ab70f6999 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 26 Jan 2018 11:24:56 +0100 Subject: [PATCH 18/59] CMake: Ignore duplicate files in server-mode Some cmake generators create a set of different configurations of the project at the same time (e.g. Visual Studio related ones). These typically contain the same set of files. Creator iterates over the configurations and adds files to the project tree. For multi-configuration generators this does lead to the same file being listed several times below a target (the targets themselves were already deduplicated!). This patch adds deduplication of file paths already listed in the target's subtree of the project, thus fixing the multiple files issue. New files (e.g. those that get only built in debug/release mode) will still get added as before. Task-number: QTCREATORBUG-19020 Change-Id: I5dd6012ea335d9946c78c25be258c8c4d60698f2 Reviewed-by: hjk --- src/plugins/cmakeprojectmanager/servermodereader.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugins/cmakeprojectmanager/servermodereader.cpp b/src/plugins/cmakeprojectmanager/servermodereader.cpp index f4a6235e767..20817562751 100644 --- a/src/plugins/cmakeprojectmanager/servermodereader.cpp +++ b/src/plugins/cmakeprojectmanager/servermodereader.cpp @@ -460,7 +460,6 @@ int ServerModeReader::calculateProgress(const int minRange, const int min, const void ServerModeReader::extractCodeModelData(const QVariantMap &data) { const QVariantList configs = data.value("configurations").toList(); - QTC_CHECK(configs.count() == 1); // FIXME: Support several configurations! for (const QVariant &c : configs) { const QVariantMap &cData = c.toMap(); extractConfigurationData(cData); @@ -842,6 +841,11 @@ void ServerModeReader::addFileGroups(ProjectNode *targetRoot, { QList toList; QSet alreadyListed; + // Files already added by other configurations: + targetRoot->forEachGenericNode([&alreadyListed](const Node *n) { + alreadyListed.insert(n->filePath()); + }); + for (const FileGroup *f : fileGroups) { const QList newSources = Utils::filtered(f->sources, [&alreadyListed](const Utils::FileName &fn) { const int count = alreadyListed.count(); From 6deec195f1b00ba941c12eee9ea1024d3ddabc54 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 26 Jan 2018 10:36:19 +0100 Subject: [PATCH 19/59] Doc: Describe selecting Clang-Tidy and Clazy checks Also mention support for C++17 and renaming of local symbols. Change-Id: I7bb72bd8741e7ddd3d45e23029696c09a654a3f6 Reviewed-by: Ivan Donchevskii Reviewed-by: Alessandro Portale --- .../qtcreator-clang-code-model-options.png | Bin 58844 -> 71706 bytes doc/src/editors/creator-clang-codemodel.qdoc | 23 ++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/doc/images/qtcreator-clang-code-model-options.png b/doc/images/qtcreator-clang-code-model-options.png index c48856a2018214ff16ccf76a7ba4a7fe3e7f7573..1c35af1fb02028949552b7e807e0e70ffd4daa48 100644 GIT binary patch literal 71706 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∓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 literal 58844 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 Date: Wed, 29 Nov 2017 16:08:06 +0100 Subject: [PATCH 20/59] Clang: fix utf8 related column numbers Use new clang_getFileContents to efficiently convert utf8 byte offsets from line start to column numbers. Also provide simplier backwards convertion to pass resulting utf8 offset to clang. Task-number: QTCREATORBUG-16941 Change-Id: If0e58fe01ad3e281b7e952e972b9e86f6e75aadb Reviewed-by: Nikolai Kosjar --- .../clangbackendcommunicator.cpp | 9 ++---- .../clangcodemodel/clangbackendcommunicator.h | 4 +-- .../clangcodemodel/clangbackendreceiver.cpp | 22 ++++----------- .../clangcodemodel/clangbackendreceiver.h | 4 --- .../clangcompletionassistprocessor.cpp | 3 +- .../clangcodemodel/clangdiagnosticmanager.cpp | 3 +- .../clangeditordocumentprocessor.cpp | 8 ++---- src/plugins/clangcodemodel/clangutils.cpp | 26 ----------------- src/plugins/clangcodemodel/clangutils.h | 2 -- .../clangbackend/source/clangfollowsymbol.cpp | 6 ++-- .../source/clangreferencescollector.cpp | 5 ++-- .../source/clangtranslationunit.cpp | 2 +- src/tools/clangbackend/source/cursor.cpp | 6 ++-- src/tools/clangbackend/source/diagnostic.cpp | 20 ++++++++----- src/tools/clangbackend/source/diagnostic.h | 3 +- .../clangbackend/source/diagnosticset.cpp | 20 +++++++------ src/tools/clangbackend/source/diagnosticset.h | 3 +- .../source/diagnosticsetiterator.h | 13 ++++++--- src/tools/clangbackend/source/fixit.cpp | 4 +-- src/tools/clangbackend/source/fixit.h | 2 +- .../source/skippedsourceranges.cpp | 2 +- .../clangbackend/source/sourcelocation.cpp | 28 ++++++++++++++++--- .../clangbackend/source/sourcelocation.h | 4 ++- src/tools/clangbackend/source/sourcerange.cpp | 12 ++++---- src/tools/clangbackend/source/sourcerange.h | 3 +- src/tools/clangbackend/source/tokeninfo.cpp | 3 +- 26 files changed, 106 insertions(+), 111 deletions(-) diff --git a/src/plugins/clangcodemodel/clangbackendcommunicator.cpp b/src/plugins/clangcodemodel/clangbackendcommunicator.cpp index 193e6dfbff3..9e59ab98a8b 100644 --- a/src/plugins/clangcodemodel/clangbackendcommunicator.cpp +++ b/src/plugins/clangcodemodel/clangbackendcommunicator.cpp @@ -368,26 +368,23 @@ QFuture BackendCommunicator::requestReferences( const FileContainer &fileContainer, quint32 line, quint32 column, - QTextDocument *textDocument, const CppTools::SemanticInfo::LocalUseMap &localUses) { const RequestReferencesMessage message(fileContainer, line, column); m_sender->requestReferences(message); - return m_receiver.addExpectedReferencesMessage(message.ticketNumber(), textDocument, - localUses); + return m_receiver.addExpectedReferencesMessage(message.ticketNumber(), localUses); } QFuture BackendCommunicator::requestLocalReferences( const FileContainer &fileContainer, quint32 line, - quint32 column, - QTextDocument *textDocument) + quint32 column) { const RequestReferencesMessage message(fileContainer, line, column, true); m_sender->requestReferences(message); - return m_receiver.addExpectedReferencesMessage(message.ticketNumber(), textDocument); + return m_receiver.addExpectedReferencesMessage(message.ticketNumber()); } QFuture BackendCommunicator::requestToolTip( diff --git a/src/plugins/clangcodemodel/clangbackendcommunicator.h b/src/plugins/clangcodemodel/clangbackendcommunicator.h index 748f2a00658..941126c7c71 100644 --- a/src/plugins/clangcodemodel/clangbackendcommunicator.h +++ b/src/plugins/clangcodemodel/clangbackendcommunicator.h @@ -75,13 +75,11 @@ public: const FileContainer &fileContainer, quint32 line, quint32 column, - QTextDocument *textDocument, const LocalUseMap &localUses); QFuture requestLocalReferences( const FileContainer &fileContainer, quint32 line, - quint32 column, - QTextDocument *textDocument); + quint32 column); QFuture requestToolTip(const FileContainer &fileContainer, quint32 line, quint32 column); diff --git a/src/plugins/clangcodemodel/clangbackendreceiver.cpp b/src/plugins/clangcodemodel/clangbackendreceiver.cpp index 3794eb0b6ba..306dfb05f1a 100644 --- a/src/plugins/clangcodemodel/clangbackendreceiver.cpp +++ b/src/plugins/clangcodemodel/clangbackendreceiver.cpp @@ -101,16 +101,14 @@ void BackendReceiver::deleteProcessorsOfEditorWidget(TextEditor::TextEditorWidge QFuture BackendReceiver::addExpectedReferencesMessage( quint64 ticket, - QTextDocument *textDocument, const CppTools::SemanticInfo::LocalUseMap &localUses) { - QTC_CHECK(textDocument); QTC_CHECK(!m_referencesTable.contains(ticket)); QFutureInterface futureInterface; futureInterface.reportStarted(); - const ReferencesEntry entry{futureInterface, textDocument, localUses}; + const ReferencesEntry entry{futureInterface, localUses}; m_referencesTable.insert(ticket, entry); return futureInterface.future(); @@ -221,24 +219,17 @@ void BackendReceiver::documentAnnotationsChanged(const DocumentAnnotationsChange } static -CppTools::CursorInfo::Range toCursorInfoRange(const QTextDocument &textDocument, - const SourceRangeContainer &sourceRange) +CppTools::CursorInfo::Range toCursorInfoRange(const SourceRangeContainer &sourceRange) { const SourceLocationContainer start = sourceRange.start(); const SourceLocationContainer end = sourceRange.end(); const unsigned length = end.column() - start.column(); - const QTextBlock block = textDocument.findBlockByNumber(static_cast(start.line()) - 1); - const int shift = ClangCodeModel::Utils::extraUtf8CharsShift(block.text(), - static_cast(start.column())); - const uint column = start.column() - static_cast(shift); - - return CppTools::CursorInfo::Range(start.line(), column, length); + return CppTools::CursorInfo::Range(start.line(), start.column(), length); } static -CppTools::CursorInfo toCursorInfo(const QTextDocument &textDocument, - const CppTools::SemanticInfo::LocalUseMap &localUses, +CppTools::CursorInfo toCursorInfo(const CppTools::SemanticInfo::LocalUseMap &localUses, const ReferencesMessage &message) { CppTools::CursorInfo result; @@ -246,7 +237,7 @@ CppTools::CursorInfo toCursorInfo(const QTextDocument &textDocument, result.areUseRangesForLocalVariable = message.isLocalVariable(); for (const SourceRangeContainer &reference : references) - result.useRanges.append(toCursorInfoRange(textDocument, reference)); + result.useRanges.append(toCursorInfoRange(reference)); result.useRanges.reserve(references.size()); result.localUses = localUses; @@ -284,8 +275,7 @@ void BackendReceiver::references(const ReferencesMessage &message) if (futureInterface.isCanceled()) return; // Editor document closed or a new request was issued making this result outdated. - QTC_ASSERT(entry.textDocument, return); - futureInterface.reportResult(toCursorInfo(*entry.textDocument, entry.localUses, message)); + futureInterface.reportResult(toCursorInfo(entry.localUses, message)); futureInterface.reportFinished(); } diff --git a/src/plugins/clangcodemodel/clangbackendreceiver.h b/src/plugins/clangcodemodel/clangbackendreceiver.h index 921150a52dc..19eeb3ce5bb 100644 --- a/src/plugins/clangcodemodel/clangbackendreceiver.h +++ b/src/plugins/clangcodemodel/clangbackendreceiver.h @@ -56,7 +56,6 @@ public: QFuture addExpectedReferencesMessage(quint64 ticket, - QTextDocument *textDocument, const CppTools::SemanticInfo::LocalUseMap &localUses = CppTools::SemanticInfo::LocalUseMap()); QFuture addExpectedRequestFollowSymbolMessage(quint64 ticket); @@ -82,13 +81,10 @@ private: struct ReferencesEntry { ReferencesEntry() = default; ReferencesEntry(QFutureInterface futureInterface, - QTextDocument *textDocument, const CppTools::SemanticInfo::LocalUseMap &localUses) : futureInterface(futureInterface) - , textDocument(textDocument) , localUses(localUses) {} QFutureInterface futureInterface; - QPointer textDocument; CppTools::SemanticInfo::LocalUseMap localUses; }; QHash m_referencesTable; diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp index 644c5d778c9..2a4673f2133 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp @@ -559,7 +559,8 @@ ClangCompletionAssistProcessor::extractLineColumn(int position) int line = -1, column = -1; ::Utils::Text::convertPosition(m_interface->textDocument(), position, &line, &column); const QTextBlock block = m_interface->textDocument()->findBlock(position); - column += ClangCodeModel::Utils::extraUtf8CharsShift(block.text(), column) + 1; + const QString stringOnTheLeft = block.text().left(column); + column = stringOnTheLeft.toUtf8().size() + 1; // '+ 1' is for 1-based columns return {line, column}; } diff --git a/src/plugins/clangcodemodel/clangdiagnosticmanager.cpp b/src/plugins/clangcodemodel/clangdiagnosticmanager.cpp index eb43f6556ee..261d196b0b4 100644 --- a/src/plugins/clangcodemodel/clangdiagnosticmanager.cpp +++ b/src/plugins/clangcodemodel/clangdiagnosticmanager.cpp @@ -64,8 +64,7 @@ int positionInText(QTextDocument *textDocument, { auto textBlock = textDocument->findBlockByNumber( static_cast(sourceLocationContainer.line()) - 1); - int column = static_cast(sourceLocationContainer.column()) - 1; - column -= ClangCodeModel::Utils::extraUtf8CharsShift(textBlock.text(), column); + const int column = static_cast(sourceLocationContainer.column()) - 1; return textBlock.position() + column; } diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index b0c1959dbb0..e1a02f453d9 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -331,20 +331,19 @@ ClangEditorDocumentProcessor::cursorInfo(const CppTools::CursorInfoParams ¶m { int line, column; convertPosition(params.textCursor, &line, &column); - ++column; // for 1-based columns if (!isCursorOnIdentifier(params.textCursor)) return defaultCursorInfoFuture(); const QTextBlock block = params.textCursor.document()->findBlockByNumber(line - 1); - column += ClangCodeModel::Utils::extraUtf8CharsShift(block.text(), column); + const QString stringOnTheLeft = block.text().left(column); + column = stringOnTheLeft.toUtf8().size() + 1; // '+ 1' is for 1-based columns const CppTools::SemanticInfo::LocalUseMap localUses = CppTools::BuiltinCursorInfo::findLocalUses(params.semanticInfo.doc, line, column); return m_communicator.requestReferences(simpleFileContainer(), static_cast(line), static_cast(column), - textDocument(), localUses); } @@ -361,8 +360,7 @@ QFuture ClangEditorDocumentProcessor::requestLocalReferenc return m_communicator.requestLocalReferences(simpleFileContainer(), static_cast(line), - static_cast(column), - textDocument()); + static_cast(column)); } QFuture diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp index dea79f66250..cf659ff4046 100644 --- a/src/plugins/clangcodemodel/clangutils.cpp +++ b/src/plugins/clangcodemodel/clangutils.cpp @@ -190,31 +190,5 @@ void setLastSentDocumentRevision(const QString &filePath, uint revision) document->sendTracker().setLastSentRevision(int(revision)); } -// CLANG-UPGRADE-CHECK: Workaround still needed? -// Remove once clang reports correct columns for lines with multi-byte utf8. -int extraUtf8CharsShift(const QString &str, int column) -{ - int shift = 0; - const QByteArray byteArray = str.toUtf8(); - for (int i = 0; i < qMin(str.length(), column); ++i) { - const uchar firstByte = static_cast(byteArray.at(i)); - // Skip different amount of bytes depending on value - if (firstByte < 0xC0) { - continue; - } else if (firstByte < 0xE0) { - ++shift; - ++i; - } else if (firstByte < 0xF0) { - shift += 2; - i += 2; - } else { - shift += 3; - i += 3; - } - } - return shift; -} - - } // namespace Utils } // namespace Clang diff --git a/src/plugins/clangcodemodel/clangutils.h b/src/plugins/clangcodemodel/clangutils.h index 6529af2b2c3..edd26ba7552 100644 --- a/src/plugins/clangcodemodel/clangutils.h +++ b/src/plugins/clangcodemodel/clangutils.h @@ -47,7 +47,5 @@ CppTools::ProjectPart::Ptr projectPartForFileBasedOnProcessor(const QString &fil bool isProjectPartLoaded(const CppTools::ProjectPart::Ptr projectPart); QString projectPartIdForFile(const QString &filePath); -int extraUtf8CharsShift(const QString &str, int column); - } // namespace Utils } // namespace Clang diff --git a/src/tools/clangbackend/source/clangfollowsymbol.cpp b/src/tools/clangbackend/source/clangfollowsymbol.cpp index 26de30ed347..2d8b7004ebe 100644 --- a/src/tools/clangbackend/source/clangfollowsymbol.cpp +++ b/src/tools/clangbackend/source/clangfollowsymbol.cpp @@ -107,7 +107,7 @@ static SourceRange getOperatorRange(const CXTranslationUnit tu, ++operatorIndex; } const CXSourceLocation end = clang_getTokenLocation(tu, tokens.data[operatorIndex]); - return SourceRange(clang_getRange(start, end)); + return SourceRange(tu, clang_getRange(start, end)); } static SourceRangeContainer extractMatchingTokenRange(const Cursor &cursor, @@ -128,7 +128,7 @@ static SourceRangeContainer extractMatchingTokenRange(const Cursor &cursor, continue; } } - return SourceRange(clang_getTokenExtent(tu, tokens.data[i])); + return SourceRange(tu, clang_getTokenExtent(tu, tokens.data[i])); } return SourceRangeContainer(); } @@ -137,7 +137,7 @@ static int getTokenIndex(CXTranslationUnit tu, const Tokens &tokens, uint line, { int tokenIndex = -1; for (int i = static_cast(tokens.tokenCount - 1); i >= 0; --i) { - const SourceRange range = clang_getTokenExtent(tu, tokens.data[i]); + const SourceRange range(tu, clang_getTokenExtent(tu, tokens.data[i])); if (range.contains(line, column)) { tokenIndex = i; break; diff --git a/src/tools/clangbackend/source/clangreferencescollector.cpp b/src/tools/clangbackend/source/clangreferencescollector.cpp index 64d9b61392b..ff8465c53f4 100644 --- a/src/tools/clangbackend/source/clangreferencescollector.cpp +++ b/src/tools/clangbackend/source/clangreferencescollector.cpp @@ -155,7 +155,7 @@ ReferencesCollector::~ReferencesCollector() bool ReferencesCollector::isWithinTokenRange(CXToken token, uint line, uint column) const { - const SourceRange range = clang_getTokenExtent(m_cxTranslationUnit, token); + const SourceRange range {m_cxTranslationUnit, clang_getTokenExtent(m_cxTranslationUnit, token)}; return range.contains(line, column); } @@ -229,7 +229,8 @@ ReferencesResult ReferencesCollector::collect(uint line, uint column, bool local const Utf8String identifier = ClangString(clang_getTokenSpelling(m_cxTranslationUnit, token)); for (uint i = 0; i < m_cxTokenCount; ++i) { if (checkToken(i, identifier, usr)) { - const SourceRange range = clang_getTokenExtent(m_cxTranslationUnit, m_cxTokens[i]); + const SourceRange range {m_cxTranslationUnit, + clang_getTokenExtent(m_cxTranslationUnit, m_cxTokens[i])}; result.references.append(range); } } diff --git a/src/tools/clangbackend/source/clangtranslationunit.cpp b/src/tools/clangbackend/source/clangtranslationunit.cpp index da06999b614..cce7548b3c2 100644 --- a/src/tools/clangbackend/source/clangtranslationunit.cpp +++ b/src/tools/clangbackend/source/clangtranslationunit.cpp @@ -161,7 +161,7 @@ ReferencesResult TranslationUnit::references(uint line, uint column, bool localR DiagnosticSet TranslationUnit::diagnostics() const { - return DiagnosticSet(clang_getDiagnosticSetFromTU(m_cxTranslationUnit)); + return DiagnosticSet(m_cxTranslationUnit, clang_getDiagnosticSetFromTU(m_cxTranslationUnit)); } SourceLocation TranslationUnit::sourceLocationAt(uint line,uint column) const diff --git a/src/tools/clangbackend/source/cursor.cpp b/src/tools/clangbackend/source/cursor.cpp index 41a0465e7a0..8b9b22f7cc5 100644 --- a/src/tools/clangbackend/source/cursor.cpp +++ b/src/tools/clangbackend/source/cursor.cpp @@ -283,7 +283,7 @@ CXFile Cursor::includedFile() const SourceLocation Cursor::sourceLocation() const { - return clang_getCursorLocation(cxCursor); + return {cxTranslationUnit(), clang_getCursorLocation(cxCursor)}; } CXSourceLocation Cursor::cxSourceLocation() const @@ -293,7 +293,7 @@ CXSourceLocation Cursor::cxSourceLocation() const SourceRange Cursor::sourceRange() const { - return clang_getCursorExtent(cxCursor); + return {cxTranslationUnit(), clang_getCursorExtent(cxCursor)}; } CXSourceRange Cursor::cxSourceRange() const @@ -308,7 +308,7 @@ CXTranslationUnit Cursor::cxTranslationUnit() const SourceRange Cursor::commentRange() const { - return clang_Cursor_getCommentRange(cxCursor); + return {cxTranslationUnit(), clang_Cursor_getCommentRange(cxCursor)}; } bool Cursor::hasSameSourceLocationAs(const Cursor &other) const diff --git a/src/tools/clangbackend/source/diagnostic.cpp b/src/tools/clangbackend/source/diagnostic.cpp index 5e74970ac24..b7bcf5b02f6 100644 --- a/src/tools/clangbackend/source/diagnostic.cpp +++ b/src/tools/clangbackend/source/diagnostic.cpp @@ -36,8 +36,9 @@ namespace ClangBackEnd { -Diagnostic::Diagnostic(CXDiagnostic cxDiagnostic) - : cxDiagnostic(cxDiagnostic) +Diagnostic::Diagnostic(CXTranslationUnit translationUnit, CXDiagnostic cxDiagnostic) + : cxDiagnostic(cxDiagnostic), + cxTranslationUnit(translationUnit) { } @@ -47,9 +48,11 @@ Diagnostic::~Diagnostic() } Diagnostic::Diagnostic(Diagnostic &&other) - : cxDiagnostic(std::move(other.cxDiagnostic)) + : cxDiagnostic(std::move(other.cxDiagnostic)), + cxTranslationUnit(std::move(other.cxTranslationUnit)) { other.cxDiagnostic = nullptr; + other.cxTranslationUnit = nullptr; } Diagnostic &Diagnostic::operator=(Diagnostic &&other) @@ -57,7 +60,9 @@ Diagnostic &Diagnostic::operator=(Diagnostic &&other) if (this != &other) { clang_disposeDiagnostic(cxDiagnostic); cxDiagnostic = std::move(other.cxDiagnostic); + cxTranslationUnit = std::move(other.cxTranslationUnit); other.cxDiagnostic = nullptr; + other.cxTranslationUnit = nullptr; } return *this; @@ -90,7 +95,7 @@ std::pair Diagnostic::options() const SourceLocation Diagnostic::location() const { - return SourceLocation(clang_getDiagnosticLocation(cxDiagnostic)); + return {cxTranslationUnit, clang_getDiagnosticLocation(cxDiagnostic)}; } DiagnosticSeverity Diagnostic::severity() const @@ -105,7 +110,8 @@ std::vector Diagnostic::ranges() const ranges.reserve(rangesCount); for (uint index = 0; index < rangesCount; ++index) { - const SourceRange sourceRange(clang_getDiagnosticRange(cxDiagnostic, index)); + const SourceRange sourceRange {cxTranslationUnit, + clang_getDiagnosticRange(cxDiagnostic, index)}; if (sourceRange.isValid()) ranges.push_back(std::move(sourceRange)); @@ -123,14 +129,14 @@ std::vector Diagnostic::fixIts() const fixIts.reserve(fixItsCount); for (uint index = 0; index < fixItsCount; ++index) - fixIts.push_back(FixIt(cxDiagnostic, index)); + fixIts.push_back(FixIt(cxTranslationUnit, cxDiagnostic, index)); return fixIts; } DiagnosticSet Diagnostic::childDiagnostics() const { - return DiagnosticSet(clang_getChildDiagnostics(cxDiagnostic)); + return DiagnosticSet(cxTranslationUnit, clang_getChildDiagnostics(cxDiagnostic)); } DiagnosticContainer Diagnostic::toDiagnosticContainer() const diff --git a/src/tools/clangbackend/source/diagnostic.h b/src/tools/clangbackend/source/diagnostic.h index 140322931fb..49161fe40e1 100644 --- a/src/tools/clangbackend/source/diagnostic.h +++ b/src/tools/clangbackend/source/diagnostic.h @@ -73,12 +73,13 @@ public: DiagnosticContainer toDiagnosticContainer() const; private: - Diagnostic(CXDiagnostic cxDiagnostic); + Diagnostic(CXTranslationUnit translationUnit, CXDiagnostic cxDiagnostic); QVector getSourceRangeContainers() const; QVector getFixItContainers() const; private: CXDiagnostic cxDiagnostic; + CXTranslationUnit cxTranslationUnit; }; inline bool operator==(Diagnostic first, Diagnostic second) diff --git a/src/tools/clangbackend/source/diagnosticset.cpp b/src/tools/clangbackend/source/diagnosticset.cpp index ce3504a114a..39c82551371 100644 --- a/src/tools/clangbackend/source/diagnosticset.cpp +++ b/src/tools/clangbackend/source/diagnosticset.cpp @@ -33,8 +33,9 @@ namespace ClangBackEnd { -DiagnosticSet::DiagnosticSet(CXDiagnosticSet cxDiagnosticSet) - : cxDiagnosticSet(cxDiagnosticSet) +DiagnosticSet::DiagnosticSet(CXTranslationUnit translationUnit, CXDiagnosticSet cxDiagnosticSet) + : cxDiagnosticSet(cxDiagnosticSet), + cxTranslationUnit(translationUnit) { } @@ -44,7 +45,8 @@ DiagnosticSet::~DiagnosticSet() } DiagnosticSet::DiagnosticSet(DiagnosticSet &&other) - : cxDiagnosticSet(std::move(other.cxDiagnosticSet)) + : cxDiagnosticSet(std::move(other.cxDiagnosticSet)), + cxTranslationUnit(std::move(other.cxTranslationUnit)) { other.cxDiagnosticSet = nullptr; } @@ -54,7 +56,9 @@ DiagnosticSet &DiagnosticSet::operator=(DiagnosticSet &&other) if (this != &other) { clang_disposeDiagnosticSet(cxDiagnosticSet); cxDiagnosticSet = std::move(other.cxDiagnosticSet); + cxTranslationUnit = std::move(other.cxTranslationUnit); other.cxDiagnosticSet = nullptr; + other.cxTranslationUnit = nullptr; } return *this; @@ -62,22 +66,22 @@ DiagnosticSet &DiagnosticSet::operator=(DiagnosticSet &&other) Diagnostic DiagnosticSet::front() const { - return Diagnostic(clang_getDiagnosticInSet(cxDiagnosticSet, 0)); + return Diagnostic(cxTranslationUnit, clang_getDiagnosticInSet(cxDiagnosticSet, 0)); } Diagnostic DiagnosticSet::back() const { - return Diagnostic(clang_getDiagnosticInSet(cxDiagnosticSet, size() - 1)); + return Diagnostic(cxTranslationUnit, clang_getDiagnosticInSet(cxDiagnosticSet, size() - 1)); } DiagnosticSet::ConstIterator DiagnosticSet::begin() const { - return DiagnosticSetIterator(cxDiagnosticSet, 0); + return DiagnosticSetIterator(cxTranslationUnit, cxDiagnosticSet, 0); } DiagnosticSet::ConstIterator DiagnosticSet::end() const { - return DiagnosticSetIterator(cxDiagnosticSet, size()); + return DiagnosticSetIterator(cxTranslationUnit, cxDiagnosticSet, size()); } QVector DiagnosticSet::toDiagnosticContainers() const @@ -113,7 +117,7 @@ bool DiagnosticSet::isNull() const Diagnostic DiagnosticSet::at(uint index) const { - return Diagnostic(clang_getDiagnosticInSet(cxDiagnosticSet, index)); + return Diagnostic(cxTranslationUnit, clang_getDiagnosticInSet(cxDiagnosticSet, index)); } } // namespace ClangBackEnd diff --git a/src/tools/clangbackend/source/diagnosticset.h b/src/tools/clangbackend/source/diagnosticset.h index e715ad2627b..63f672de419 100644 --- a/src/tools/clangbackend/source/diagnosticset.h +++ b/src/tools/clangbackend/source/diagnosticset.h @@ -72,10 +72,11 @@ public: const IsAcceptedDiagnostic &isAcceptedDiagnostic) const; private: - DiagnosticSet(CXDiagnosticSet cxDiagnosticSet); + DiagnosticSet(CXTranslationUnit translationUnit, CXDiagnosticSet cxDiagnosticSet); private: CXDiagnosticSet cxDiagnosticSet; + CXTranslationUnit cxTranslationUnit; }; } // namespace ClangBackEnd diff --git a/src/tools/clangbackend/source/diagnosticsetiterator.h b/src/tools/clangbackend/source/diagnosticsetiterator.h index 7739dfd3654..72a98319550 100644 --- a/src/tools/clangbackend/source/diagnosticsetiterator.h +++ b/src/tools/clangbackend/source/diagnosticsetiterator.h @@ -25,6 +25,8 @@ #pragma once +#include "diagnostic.h" + #include #include @@ -34,13 +36,15 @@ namespace ClangBackEnd { using uint = unsigned int; class DiagnosticSet; -class Diagnostic; class DiagnosticSetIterator : public std::iterator { public: - DiagnosticSetIterator(CXDiagnosticSet cxDiagnosticSet, uint index) + DiagnosticSetIterator(CXTranslationUnit translationUnit, + CXDiagnosticSet cxDiagnosticSet, + uint index) : cxDiagnosticSet(cxDiagnosticSet), + cxTranslationUnit(translationUnit), index(index) {} @@ -58,7 +62,7 @@ public: DiagnosticSetIterator operator++(int) { uint oldIndex = index++; - return DiagnosticSetIterator(cxDiagnosticSet, oldIndex); + return DiagnosticSetIterator(cxTranslationUnit, cxDiagnosticSet, oldIndex); } bool operator==(const DiagnosticSetIterator &other) @@ -73,11 +77,12 @@ public: Diagnostic operator*() { - return Diagnostic(clang_getDiagnosticInSet(cxDiagnosticSet, index)); + return Diagnostic(cxTranslationUnit, clang_getDiagnosticInSet(cxDiagnosticSet, index)); } private: CXDiagnosticSet cxDiagnosticSet; + CXTranslationUnit cxTranslationUnit; uint index; }; diff --git a/src/tools/clangbackend/source/fixit.cpp b/src/tools/clangbackend/source/fixit.cpp index c2de39c9224..8626602d456 100644 --- a/src/tools/clangbackend/source/fixit.cpp +++ b/src/tools/clangbackend/source/fixit.cpp @@ -46,12 +46,12 @@ FixItContainer FixIt::toFixItContainer() const return FixItContainer(text_, sourceRange.toSourceRangeContainer()); } -FixIt::FixIt(CXDiagnostic cxDiagnostic, uint index) +FixIt::FixIt(CXTranslationUnit translationUnit, CXDiagnostic cxDiagnostic, uint index) { CXSourceRange cxSourceRange; text_ = ClangString(clang_getDiagnosticFixIt(cxDiagnostic, index, &cxSourceRange)); - sourceRange = SourceRange(cxSourceRange); + sourceRange = SourceRange(translationUnit, cxSourceRange); } } // namespace ClangBackEnd diff --git a/src/tools/clangbackend/source/fixit.h b/src/tools/clangbackend/source/fixit.h index f866bc8c18c..b0c1f139aee 100644 --- a/src/tools/clangbackend/source/fixit.h +++ b/src/tools/clangbackend/source/fixit.h @@ -47,7 +47,7 @@ public: FixItContainer toFixItContainer() const; private: - FixIt(CXDiagnostic cxDiagnostic, uint index); + FixIt(CXTranslationUnit translationUnit, CXDiagnostic cxDiagnostic, uint index); private: SourceRange sourceRange; diff --git a/src/tools/clangbackend/source/skippedsourceranges.cpp b/src/tools/clangbackend/source/skippedsourceranges.cpp index ca38510cf2c..f15bd446682 100644 --- a/src/tools/clangbackend/source/skippedsourceranges.cpp +++ b/src/tools/clangbackend/source/skippedsourceranges.cpp @@ -79,7 +79,7 @@ std::vector SkippedSourceRanges::sourceRanges() const sourceRanges.reserve(sourceRangeCount); for (uint i = 0; i < cxSkippedSourceRanges->count; ++i) { - const SourceRange range = cxSkippedSourceRanges->ranges[i]; + const SourceRange range {cxTranslationUnit, cxSkippedSourceRanges->ranges[i]}; const SourceRange adaptedRange = adaptedSourceRange(cxTranslationUnit, range); sourceRanges.push_back(adaptedRange); diff --git a/src/tools/clangbackend/source/sourcelocation.cpp b/src/tools/clangbackend/source/sourcelocation.cpp index 161ed5b0a50..d015cad4eef 100644 --- a/src/tools/clangbackend/source/sourcelocation.cpp +++ b/src/tools/clangbackend/source/sourcelocation.cpp @@ -29,10 +29,13 @@ #include "clangfilepath.h" #include "clangstring.h" -#include +#include + +#include + +#include #include -#include namespace ClangBackEnd { @@ -72,8 +75,10 @@ SourceLocationContainer SourceLocation::toSourceLocationContainer() const return SourceLocationContainer(filePath(), line_, column_); } -SourceLocation::SourceLocation(CXSourceLocation cxSourceLocation) +SourceLocation::SourceLocation(CXTranslationUnit cxTranslationUnit, + CXSourceLocation cxSourceLocation) : cxSourceLocation(cxSourceLocation) + , cxTranslationUnit(cxTranslationUnit) { CXFile cxFile; @@ -83,8 +88,22 @@ SourceLocation::SourceLocation(CXSourceLocation cxSourceLocation) &column_, &offset_); - filePath_ = ClangString(clang_getFileName(cxFile)); isFilePathNormalized_ = false; + if (!cxFile) + return; + + filePath_ = ClangString(clang_getFileName(cxFile)); +// CLANG-UPGRADE-CHECK: Remove HAS_GETFILECONTENTS_BACKPORTED check once we require clang >= 6.0 +#if defined(CINDEX_VERSION_HAS_GETFILECONTENTS_BACKPORTED) || CINDEX_VERSION_MINOR >= 44 + if (column_ > 1) { + const uint lineStart = offset_ + 1 - column_; + const char *contents = clang_getFileContents(cxTranslationUnit, cxFile, nullptr); + if (!contents) + return; + column_ = static_cast(QString::fromUtf8(&contents[lineStart], + static_cast(column_)).size()); + } +#endif } SourceLocation::SourceLocation(CXTranslationUnit cxTranslationUnit, @@ -96,6 +115,7 @@ SourceLocation::SourceLocation(CXTranslationUnit cxTranslationUnit, filePath.constData()), line, column)), + cxTranslationUnit(cxTranslationUnit), filePath_(filePath), line_(line), column_(column), diff --git a/src/tools/clangbackend/source/sourcelocation.h b/src/tools/clangbackend/source/sourcelocation.h index 65c3ec69ad6..bf8962161f0 100644 --- a/src/tools/clangbackend/source/sourcelocation.h +++ b/src/tools/clangbackend/source/sourcelocation.h @@ -57,12 +57,14 @@ public: SourceLocationContainer toSourceLocationContainer() const; private: - SourceLocation(CXSourceLocation cxSourceLocation); + SourceLocation(CXTranslationUnit cxTranslationUnit, + CXSourceLocation cxSourceLocation); operator CXSourceLocation() const; private: CXSourceLocation cxSourceLocation; + CXTranslationUnit cxTranslationUnit; mutable Utf8String filePath_; uint line_ = 0; uint column_ = 0; diff --git a/src/tools/clangbackend/source/sourcerange.cpp b/src/tools/clangbackend/source/sourcerange.cpp index 20c6efb5e65..ff1a4753918 100644 --- a/src/tools/clangbackend/source/sourcerange.cpp +++ b/src/tools/clangbackend/source/sourcerange.cpp @@ -39,7 +39,8 @@ SourceRange::SourceRange() } SourceRange::SourceRange(const SourceLocation &start, const SourceLocation &end) - : cxSourceRange(clang_getRange(start, end)) + : cxSourceRange(clang_getRange(start, end)), + cxTranslationUnit(start.cxTranslationUnit) { } @@ -55,12 +56,12 @@ bool SourceRange::isValid() const SourceLocation SourceRange::start() const { - return SourceLocation(clang_getRangeStart(cxSourceRange)); + return {cxTranslationUnit, clang_getRangeStart(cxSourceRange)}; } SourceLocation SourceRange::end() const { - return SourceLocation(clang_getRangeEnd(cxSourceRange)); + return {cxTranslationUnit, clang_getRangeEnd(cxSourceRange)}; } bool SourceRange::contains(unsigned line, unsigned column) const @@ -90,8 +91,9 @@ ClangBackEnd::SourceRange::operator CXSourceRange() const return cxSourceRange; } -SourceRange::SourceRange(CXSourceRange cxSourceRange) - : cxSourceRange(cxSourceRange) +SourceRange::SourceRange(CXTranslationUnit translationUnit, CXSourceRange cxSourceRange) + : cxSourceRange(cxSourceRange), + cxTranslationUnit(translationUnit) { } diff --git a/src/tools/clangbackend/source/sourcerange.h b/src/tools/clangbackend/source/sourcerange.h index b8083e86955..4c30ad43f8e 100644 --- a/src/tools/clangbackend/source/sourcerange.h +++ b/src/tools/clangbackend/source/sourcerange.h @@ -40,7 +40,7 @@ class SourceRange public: SourceRange(); - SourceRange(CXSourceRange cxSourceRange); + SourceRange(CXTranslationUnit cxTranslationUnit, CXSourceRange cxSourceRange); SourceRange(const SourceLocation &start, const SourceLocation &end); bool isNull() const; @@ -58,6 +58,7 @@ public: private: CXSourceRange cxSourceRange; + CXTranslationUnit cxTranslationUnit = nullptr; }; bool operator==(const SourceRange &first, const SourceRange &second); diff --git a/src/tools/clangbackend/source/tokeninfo.cpp b/src/tools/clangbackend/source/tokeninfo.cpp index 703b0f78085..a9c84312861 100644 --- a/src/tools/clangbackend/source/tokeninfo.cpp +++ b/src/tools/clangbackend/source/tokeninfo.cpp @@ -43,7 +43,8 @@ TokenInfo::TokenInfo(const CXCursor &cxCursor, : m_currentOutputArgumentRanges(¤tOutputArgumentRanges), m_originalCursor(cxCursor) { - const SourceRange sourceRange = clang_getTokenExtent(cxTranslationUnit, *cxToken); + const SourceRange sourceRange {cxTranslationUnit, + clang_getTokenExtent(cxTranslationUnit, *cxToken)}; const auto start = sourceRange.start(); const auto end = sourceRange.end(); From d12c3e77b87f2c74d252b4b0991d8bc33711d413 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 26 Jan 2018 16:20:28 +0100 Subject: [PATCH 21/59] qdoc2tasks.pl: Adapt to changed message format in Qt 5.11 Account for the additional '(qdoc)'. Change-Id: Ibef4dfba66bcc2eb1d47535b9e6501ed3a47e968 Reviewed-by: Tobias Hunger --- scripts/qdoc2tasks.pl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/qdoc2tasks.pl b/scripts/qdoc2tasks.pl index 066a857c272..244a0a13a4d 100755 --- a/scripts/qdoc2tasks.pl +++ b/scripts/qdoc2tasks.pl @@ -41,8 +41,9 @@ use warnings; while (my $line = ) { chomp($line); # --- extract file name based matching: - # D:/.../qaxbase.cpp:3231: warning: Cannot tie this documentation to anything - if ($line =~ /^(..[^:]*):(\d+): warning: (.*)$/) { + # Qt 5.10: D:/.../qaxbase.cpp:3231: warning: Cannot tie this documentation to anything + # Qt 5.11: D:/.../qaxbase.cpp:3231: (qdoc) warning: Cannot tie this documentation to anything + if ($line =~ /^(..[^:]*):(\d+): (?:\(qdoc\) )?warning: (.*)$/) { my $fileName = $1; my $lineNumber = $2; my $text = $3; From 5b6b26893fe6bd244fa18a77852413523392c7b2 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 26 Jan 2018 16:25:19 +0100 Subject: [PATCH 22/59] QmlDesigner: Fix crash We cannot use references if the container is just temporary. Task-number: QTCREATORBUG-19661 Change-Id: Ie0c9af142d5155d3f61c14bad1fbecce7f2dfd0f Reviewed-by: Alessandro Portale --- .../components/componentcore/designeractionmanager.cpp | 2 +- .../qmldesigner/components/formeditor/formeditorview.cpp | 2 +- .../components/propertyeditor/propertyeditorcontextobject.cpp | 2 +- .../qmldesignerextension/connectioneditor/bindingmodel.cpp | 2 +- .../qmldesignerextension/connectioneditor/connectionmodel.cpp | 2 +- .../connectioneditor/dynamicpropertiesmodel.cpp | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index b658f9fe407..db4b726f384 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -369,7 +369,7 @@ bool selectionHasSameParentAndInBaseState(const SelectionContext &context) bool isNotInLayout(const SelectionContext &context) { if (selectionNotEmpty(context)) { - const ModelNode &selectedModelNode = context.selectedModelNodes().constFirst(); + const ModelNode selectedModelNode = context.selectedModelNodes().constFirst(); ModelNode parentModelNode; if (selectedModelNode.hasParentProperty()) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index fad8a6817be..cd192556835 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -397,7 +397,7 @@ void FormEditorView::changeToCustomTool() int handlingRank = 0; AbstractCustomTool *selectedCustomTool = 0; - const ModelNode &selectedModelNode = selectedModelNodes().constFirst(); + const ModelNode selectedModelNode = selectedModelNodes().constFirst(); foreach (AbstractCustomTool *customTool, m_customToolList) { if (customTool->wantHandleItem(selectedModelNode) > handlingRank) { diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp index 6966bfe187e..bda20ca52a5 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp @@ -145,7 +145,7 @@ void PropertyEditorContextObject::toogleExportAlias() if (rewriterView->selectedModelNodes().isEmpty()) return; - const ModelNode &selectedNode = rewriterView->selectedModelNodes().constFirst(); + const ModelNode selectedNode = rewriterView->selectedModelNodes().constFirst(); if (QmlObjectNode::isValidQmlObjectNode(selectedNode)) { QmlObjectNode objectNode(selectedNode); diff --git a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/bindingmodel.cpp b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/bindingmodel.cpp index 88bb7ffec26..9b08e5179c5 100644 --- a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/bindingmodel.cpp +++ b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/bindingmodel.cpp @@ -222,7 +222,7 @@ static PropertyName unusedProperty(const ModelNode &modelNode) void BindingModel::addBindingForCurrentNode() { if (connectionView()->selectedModelNodes().count() == 1) { - const ModelNode &modelNode = connectionView()->selectedModelNodes().constFirst(); + const ModelNode modelNode = connectionView()->selectedModelNodes().constFirst(); if (modelNode.isValid()) { try { modelNode.bindingProperty(unusedProperty(modelNode)).setExpression(QLatin1String("none.none")); diff --git a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionmodel.cpp b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionmodel.cpp index 2cde52ec617..7c79334ea2c 100644 --- a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionmodel.cpp +++ b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionmodel.cpp @@ -271,7 +271,7 @@ void ConnectionModel::addConnection() if (connectionView()->selectedModelNodes().count() == 1 && !connectionView()->selectedModelNodes().constFirst().id().isEmpty()) { - const ModelNode &selectedNode = connectionView()->selectedModelNodes().constFirst(); + const ModelNode selectedNode = connectionView()->selectedModelNodes().constFirst(); newNode.bindingProperty("target").setExpression(selectedNode.id()); } else { newNode.bindingProperty("target").setExpression(QLatin1String("parent")); diff --git a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/dynamicpropertiesmodel.cpp b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/dynamicpropertiesmodel.cpp index a6cb2d911bf..620cd9bf0f7 100644 --- a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/dynamicpropertiesmodel.cpp +++ b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/dynamicpropertiesmodel.cpp @@ -265,7 +265,7 @@ QStringList DynamicPropertiesModel::possibleTargetProperties(const BindingProper void DynamicPropertiesModel::addDynamicPropertyForCurrentNode() { if (connectionView()->selectedModelNodes().count() == 1) { - const ModelNode &modelNode = connectionView()->selectedModelNodes().constFirst(); + const ModelNode modelNode = connectionView()->selectedModelNodes().constFirst(); if (modelNode.isValid()) { try { modelNode.variantProperty(unusedProperty(modelNode)).setDynamicTypeNameAndValue("string", QLatin1String("none.none")); From 9b4688f1a4e88344b9a86abc58373b9e4c3ea9f8 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Fri, 19 Jan 2018 13:18:43 +0100 Subject: [PATCH 23/59] Clang: Let CppCodeModelSettings announce invalidated diagnostic configs Change-Id: I1fe62d4cd4bc91bfd73e57ace6dc9a87d13b3537 Reviewed-by: David Schulz --- .../cpptools/clangdiagnosticconfig.cpp | 5 +++ src/plugins/cpptools/clangdiagnosticconfig.h | 1 + .../cpptools/clangdiagnosticconfigsmodel.cpp | 17 ++++++++ .../cpptools/clangdiagnosticconfigsmodel.h | 8 ++-- src/plugins/cpptools/cppcodemodelsettings.cpp | 41 +++++++++++++++---- src/plugins/cpptools/cppcodemodelsettings.h | 1 + 6 files changed, 63 insertions(+), 10 deletions(-) diff --git a/src/plugins/cpptools/clangdiagnosticconfig.cpp b/src/plugins/cpptools/clangdiagnosticconfig.cpp index 89cc76442ad..55b85f59b84 100644 --- a/src/plugins/cpptools/clangdiagnosticconfig.cpp +++ b/src/plugins/cpptools/clangdiagnosticconfig.cpp @@ -75,4 +75,9 @@ bool ClangDiagnosticConfig::operator==(const ClangDiagnosticConfig &other) const && m_isReadOnly == other.m_isReadOnly; } +bool ClangDiagnosticConfig::operator!=(const ClangDiagnosticConfig &other) const +{ + return !(*this == other); +} + } // namespace CppTools diff --git a/src/plugins/cpptools/clangdiagnosticconfig.h b/src/plugins/cpptools/clangdiagnosticconfig.h index b9efb040b0e..e2329a2054d 100644 --- a/src/plugins/cpptools/clangdiagnosticconfig.h +++ b/src/plugins/cpptools/clangdiagnosticconfig.h @@ -50,6 +50,7 @@ public: void setIsReadOnly(bool isReadOnly); bool operator==(const ClangDiagnosticConfig &other) const; + bool operator!=(const ClangDiagnosticConfig &other) const; private: Core::Id m_id; diff --git a/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp b/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp index 206a0d8baab..0fff8ac7ac1 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp +++ b/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp @@ -158,6 +158,23 @@ ClangDiagnosticConfigsModel::displayNameWithBuiltinIndication(const ClangDiagnos : config.displayName(); } +QVector ClangDiagnosticConfigsModel::changedOrRemovedConfigs( + const ClangDiagnosticConfigs &oldConfigs, const ClangDiagnosticConfigs &newConfigs) +{ + ClangDiagnosticConfigsModel newConfigsModel(newConfigs); + QVector changedConfigs; + + for (const ClangDiagnosticConfig &old: oldConfigs) { + const int i = newConfigsModel.indexOfConfig(old.id()); + if (i == -1) + changedConfigs.append(old.id()); // Removed + else if (newConfigsModel.configs()[i] != old) + changedConfigs.append(old.id()); // Changed + } + + return changedConfigs; +} + int ClangDiagnosticConfigsModel::indexOfConfig(const Core::Id &id) const { return Utils::indexOf(m_diagnosticConfigs, [&](const ClangDiagnosticConfig &config) { diff --git a/src/plugins/cpptools/clangdiagnosticconfigsmodel.h b/src/plugins/cpptools/clangdiagnosticconfigsmodel.h index 14ef823f3d2..c6f4022526f 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigsmodel.h +++ b/src/plugins/cpptools/clangdiagnosticconfigsmodel.h @@ -29,6 +29,8 @@ #include "clangdiagnosticconfig.h" +#include + namespace CppTools { class CPPTOOLS_EXPORT ClangDiagnosticConfigsModel @@ -47,11 +49,11 @@ public: ClangDiagnosticConfigs configs() const; bool hasConfigWithId(const Core::Id &id) const; const ClangDiagnosticConfig &configWithId(const Core::Id &id) const; + int indexOfConfig(const Core::Id &id) const; static QString displayNameWithBuiltinIndication(const ClangDiagnosticConfig &config); - -private: - int indexOfConfig(const Core::Id &id) const; + static QVector changedOrRemovedConfigs(const ClangDiagnosticConfigs &oldConfigs, + const ClangDiagnosticConfigs &newConfigs); private: ClangDiagnosticConfigs m_diagnosticConfigs; diff --git a/src/plugins/cpptools/cppcodemodelsettings.cpp b/src/plugins/cpptools/cppcodemodelsettings.cpp index 15ec9c9bfee..71205cc4275 100644 --- a/src/plugins/cpptools/cppcodemodelsettings.cpp +++ b/src/plugins/cpptools/cppcodemodelsettings.cpp @@ -73,9 +73,12 @@ static QString tidyChecksKey() static QString clazyChecksKey() { return QLatin1String(Constants::CPPTOOLS_CLAZY_CHECKS); } -void CppCodeModelSettings::fromSettings(QSettings *s) +static ClangDiagnosticConfigs customDiagnosticConfigsFromSettings(QSettings *s) { - s->beginGroup(QLatin1String(Constants::CPPTOOLS_SETTINGSGROUP)); + QTC_ASSERT(s->group() == QLatin1String(Constants::CPPTOOLS_SETTINGSGROUP), + return ClangDiagnosticConfigs()); + + ClangDiagnosticConfigs configs; const int size = s->beginReadArray(clangDiagnosticConfigsArrayKey()); for (int i = 0; i < size; ++i) { @@ -85,14 +88,27 @@ void CppCodeModelSettings::fromSettings(QSettings *s) config.setId(Core::Id::fromSetting(s->value(clangDiagnosticConfigsArrayIdKey()))); config.setDisplayName(s->value(clangDiagnosticConfigsArrayDisplayNameKey()).toString()); config.setCommandLineWarnings(s->value(clangDiagnosticConfigsArrayWarningsKey()).toStringList()); - m_clangCustomDiagnosticConfigs.append(config); + configs.append(config); } s->endArray(); - const Core::Id diagnosticConfigId = Core::Id::fromSetting( - s->value(clangDiagnosticConfigKey(), - initialClangDiagnosticConfigId().toSetting())); - setClangDiagnosticConfigId(diagnosticConfigId); + return configs; +} + +static Core::Id clangDiagnosticConfigIdFromSettings(QSettings *s) +{ + QTC_ASSERT(s->group() == QLatin1String(Constants::CPPTOOLS_SETTINGSGROUP), return Core::Id()); + + return Core::Id::fromSetting( + s->value(clangDiagnosticConfigKey(), initialClangDiagnosticConfigId().toSetting())); +} + +void CppCodeModelSettings::fromSettings(QSettings *s) +{ + s->beginGroup(QLatin1String(Constants::CPPTOOLS_SETTINGSGROUP)); + + setClangCustomDiagnosticConfigs(customDiagnosticConfigsFromSettings(s)); + setClangDiagnosticConfigId(clangDiagnosticConfigIdFromSettings(s)); const QVariant pchUsageVariant = s->value(pchUsageKey(), initialPchUsage()); setPCHUsage(static_cast(pchUsageVariant.toInt())); @@ -120,6 +136,8 @@ void CppCodeModelSettings::fromSettings(QSettings *s) void CppCodeModelSettings::toSettings(QSettings *s) { s->beginGroup(QLatin1String(Constants::CPPTOOLS_SETTINGSGROUP)); + const ClangDiagnosticConfigs previousConfigs = customDiagnosticConfigsFromSettings(s); + const Core::Id previousConfigId = clangDiagnosticConfigIdFromSettings(s); s->beginWriteArray(clangDiagnosticConfigsArrayKey()); for (int i = 0, size = m_clangCustomDiagnosticConfigs.size(); i < size; ++i) { @@ -143,6 +161,15 @@ void CppCodeModelSettings::toSettings(QSettings *s) s->endGroup(); + QVector invalidated + = ClangDiagnosticConfigsModel::changedOrRemovedConfigs(previousConfigs, + m_clangCustomDiagnosticConfigs); + + if (previousConfigId != clangDiagnosticConfigId() && !invalidated.contains(previousConfigId)) + invalidated.append(previousConfigId); + + if (!invalidated.isEmpty()) + emit clangDiagnosticConfigsInvalidated(invalidated); emit changed(); } diff --git a/src/plugins/cpptools/cppcodemodelsettings.h b/src/plugins/cpptools/cppcodemodelsettings.h index 22f5b25c6b2..44661b2a4a6 100644 --- a/src/plugins/cpptools/cppcodemodelsettings.h +++ b/src/plugins/cpptools/cppcodemodelsettings.h @@ -79,6 +79,7 @@ public: void setClazyChecks(QString checks); signals: + void clangDiagnosticConfigsInvalidated(const QVector &configId); void changed(); private: From 49ba25e1838284038f5c37b5f9a1cb411cb4ab32 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 23 Jan 2018 11:13:14 +0100 Subject: [PATCH 24/59] Clang: Let ClangProjectSettings announce changes Change-Id: Idd6c91f5e8f0a73e4a15fe2f4b667302e6ee5e49 Reviewed-by: David Schulz --- .../clangcodemodel/clangprojectsettings.cpp | 43 ++++++++++++++----- .../clangcodemodel/clangprojectsettings.h | 3 ++ 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/plugins/clangcodemodel/clangprojectsettings.cpp b/src/plugins/clangcodemodel/clangprojectsettings.cpp index 2668ee39985..698447cc4b8 100644 --- a/src/plugins/clangcodemodel/clangprojectsettings.cpp +++ b/src/plugins/clangcodemodel/clangprojectsettings.cpp @@ -42,6 +42,25 @@ static QString warningConfigIdKey() static QString customCommandLineKey() { return QLatin1String("ClangCodeModel.CustomCommandLineKey"); } +static bool useGlobalConfigFromSettings(ProjectExplorer::Project *project) +{ + const QVariant useGlobalConfigVariant = project->namedSettings(useGlobalConfigKey()); + return useGlobalConfigVariant.isValid() ? useGlobalConfigVariant.toBool() : true; +} + +static Core::Id warningConfigIdFromSettings(ProjectExplorer::Project *project) +{ + return Core::Id::fromSetting(project->namedSettings(warningConfigIdKey())); +} + +static QStringList customCommandLineFromSettings(ProjectExplorer::Project *project) +{ + QStringList options = project->namedSettings(customCommandLineKey()).toStringList(); + if (options.empty()) + options = ClangProjectSettings::globalCommandLineOptions(); + return options; +} + ClangProjectSettings::ClangProjectSettings(ProjectExplorer::Project *project) : m_project(project) { @@ -88,23 +107,27 @@ void ClangProjectSettings::setCommandLineOptions(const QStringList &options) void ClangProjectSettings::load() { - const QVariant useGlobalConfigVariant = m_project->namedSettings(useGlobalConfigKey()); - const bool useGlobalConfig = useGlobalConfigVariant.isValid() - ? useGlobalConfigVariant.toBool() - : true; - - setUseGlobalConfig(useGlobalConfig); - setWarningConfigId(Core::Id::fromSetting(m_project->namedSettings(warningConfigIdKey()))); - m_customCommandLineOptions = m_project->namedSettings(customCommandLineKey()).toStringList(); - if (m_customCommandLineOptions.empty()) - m_customCommandLineOptions = globalCommandLineOptions(); + setUseGlobalConfig(useGlobalConfigFromSettings(m_project)); + setWarningConfigId(warningConfigIdFromSettings(m_project)); + m_customCommandLineOptions = customCommandLineFromSettings(m_project); } void ClangProjectSettings::store() { + bool settingsChanged = false; + if (useGlobalConfig() != useGlobalConfigFromSettings(m_project)) + settingsChanged = true; + if (warningConfigId() != warningConfigIdFromSettings(m_project)) + settingsChanged = true; + if (commandLineOptions() != customCommandLineFromSettings(m_project)) + settingsChanged = true; + m_project->setNamedSettings(useGlobalConfigKey(), useGlobalConfig()); m_project->setNamedSettings(warningConfigIdKey(), warningConfigId().toSetting()); m_project->setNamedSettings(customCommandLineKey(), m_customCommandLineOptions); + + if (settingsChanged) + emit changed(); } QStringList ClangProjectSettings::globalCommandLineOptions() diff --git a/src/plugins/clangcodemodel/clangprojectsettings.h b/src/plugins/clangcodemodel/clangprojectsettings.h index 01aabfb6e98..0b591b6ccb3 100644 --- a/src/plugins/clangcodemodel/clangprojectsettings.h +++ b/src/plugins/clangcodemodel/clangprojectsettings.h @@ -59,6 +59,9 @@ public: static QStringList globalCommandLineOptions(); +signals: + void changed(); + private: ProjectExplorer::Project *m_project; bool m_useGlobalConfig = true; From 384128662e21c398858fa38126d91599006d8424 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 22 Jan 2018 16:01:09 +0100 Subject: [PATCH 25/59] Clang: Avoid storing settings more than needed There is no need to store on every key stroken when changing the diagnostic config in the projects mode. Change-Id: I627c11621b999527c110862365ba5c2a0b1e878b Reviewed-by: David Schulz --- .../clangcodemodel/clangprojectsettingswidget.cpp | 11 +++++++---- .../clangcodemodel/clangprojectsettingswidget.h | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp b/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp index d8148a158da..57461779bcd 100644 --- a/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp +++ b/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp @@ -76,6 +76,8 @@ ClangProjectSettingsWidget::ClangProjectSettingsWidget(ProjectExplorer::Project connect(m_ui.clangSettings, static_cast(&QComboBox::currentIndexChanged), this, &ClangProjectSettingsWidget::onClangSettingsChanged); + connect(project, &ProjectExplorer::Project::aboutToSaveSettings, + this, &ClangProjectSettingsWidget::onAboutToSaveProjectSettings); m_ui.diagnosticConfigurationGroupBox->layout()->addWidget(m_diagnosticConfigWidget); } @@ -86,7 +88,6 @@ void ClangProjectSettingsWidget::onCurrentWarningConfigChanged(const Core::Id &c if (m_projectSettings.useGlobalConfig()) return; m_projectSettings.setWarningConfigId(currentConfigId); - m_projectSettings.store(); } void ClangProjectSettingsWidget::onCustomWarningConfigsChanged( @@ -97,7 +98,6 @@ void ClangProjectSettingsWidget::onCustomWarningConfigsChanged( const QSharedPointer codeModelSettings = CppTools::codeModelSettings(); codeModelSettings->setClangCustomDiagnosticConfigs(customConfigs); - codeModelSettings->toSettings(Core::ICore::settings()); connectToCppCodeModelSettingsChanged(); } @@ -115,16 +115,19 @@ void ClangProjectSettingsWidget::onDelayedTemplateParseClicked(bool checked) options.removeAll(QLatin1String{ClangProjectSettings::NoDelayedTemplateParsing}); options.append(extraFlag); m_projectSettings.setCommandLineOptions(options); - m_projectSettings.store(); } void ClangProjectSettingsWidget::onClangSettingsChanged(int index) { m_projectSettings.setUseGlobalConfig(index == 0 ? true : false); - m_projectSettings.store(); syncOtherWidgetsToComboBox(); } +void ClangProjectSettingsWidget::onAboutToSaveProjectSettings() +{ + CppTools::codeModelSettings()->toSettings(Core::ICore::settings()); +} + void ClangProjectSettingsWidget::syncOtherWidgetsToComboBox() { const QStringList options = m_projectSettings.commandLineOptions(); diff --git a/src/plugins/clangcodemodel/clangprojectsettingswidget.h b/src/plugins/clangcodemodel/clangprojectsettingswidget.h index d27be6341e8..6c2f529f436 100644 --- a/src/plugins/clangcodemodel/clangprojectsettingswidget.h +++ b/src/plugins/clangcodemodel/clangprojectsettingswidget.h @@ -51,6 +51,7 @@ private: void onCustomWarningConfigsChanged(const CppTools::ClangDiagnosticConfigs &customConfigs); void onDelayedTemplateParseClicked(bool); void onClangSettingsChanged(int index); + void onAboutToSaveProjectSettings(); void refreshDiagnosticConfigsWidgetFromSettings(); void connectToCppCodeModelSettingsChanged(); void disconnectFromCppCodeModelSettingsChanged(); From 2c744412606ab3c0733948c3c2fec8e2da5f98b4 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 22 Jan 2018 16:31:05 +0100 Subject: [PATCH 26/59] Clang: Use only one ClangProjectSettings instance per project So far we've created ClangProjectSettings objects on demand. To get change notifications there should be only one per project alive (and accessible). Change-Id: I757186ceaa642c6864d02946258cc6eb18064a52 Reviewed-by: David Schulz --- .../clangeditordocumentprocessor.cpp | 11 +++++-- .../clangmodelmanagersupport.cpp | 31 +++++++++++++++++++ .../clangcodemodel/clangmodelmanagersupport.h | 9 ++++++ .../clangprojectsettingswidget.cpp | 3 +- .../clangprojectsettingswidget.h | 2 +- 5 files changed, 52 insertions(+), 4 deletions(-) diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index e1a02f453d9..3097d9da883 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -29,6 +29,7 @@ #include "clangdiagnostictooltipwidget.h" #include "clangfixitoperation.h" #include "clangfixitoperationsextractor.h" +#include "clangmodelmanagersupport.h" #include "clangtokeninfosreporter.h" #include "clangprojectsettings.h" #include "clangutils.h" @@ -66,6 +67,12 @@ namespace ClangCodeModel { namespace Internal { +static ClangProjectSettings &getProjectSettings(ProjectExplorer::Project *project) +{ + QTC_CHECK(project); + return ModelManagerSupportClang::instance()->projectSettings(project); +} + ClangEditorDocumentProcessor::ClangEditorDocumentProcessor( BackendCommunicator &communicator, TextEditor::TextDocument *document) @@ -456,7 +463,7 @@ private: void addDiagnosticOptions() { if (m_projectPart.project) { - ClangProjectSettings projectSettings(m_projectPart.project); + ClangProjectSettings &projectSettings = getProjectSettings(m_projectPart.project); if (!projectSettings.useGlobalConfig()) { const Core::Id warningConfigId = projectSettings.warningConfigId(); const CppTools::ClangDiagnosticConfigsModel configsModel( @@ -508,7 +515,7 @@ private: if (!m_projectPart.project) m_options.append(ClangProjectSettings::globalCommandLineOptions()); else - m_options.append(ClangProjectSettings{m_projectPart.project}.commandLineOptions()); + m_options.append(getProjectSettings(m_projectPart.project).commandLineOptions()); addTidyOptions(); addClazyOptions(); diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index 4de96c5a0ea..26b01872bf5 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -30,6 +30,7 @@ #include "clangutils.h" #include "clangfollowsymbol.h" #include "clanghoverhandler.h" +#include "clangprojectsettings.h" #include "clangrefactoringengine.h" #include @@ -41,6 +42,7 @@ #include #include +#include #include #include @@ -99,11 +101,18 @@ ModelManagerSupportClang::ModelManagerSupportClang() connect(modelManager, &CppTools::CppModelManager::projectPartsRemoved, this, &ModelManagerSupportClang::onProjectPartsRemoved); + auto *sessionManager = ProjectExplorer::SessionManager::instance(); + connect(sessionManager, &ProjectExplorer::SessionManager::projectAdded, + this, &ModelManagerSupportClang::onProjectAdded); + connect(sessionManager, &ProjectExplorer::SessionManager::aboutToRemoveProject, + this, &ModelManagerSupportClang::onAboutToRemoveProject); + m_communicator.registerFallbackProjectPart(); } ModelManagerSupportClang::~ModelManagerSupportClang() { + QTC_CHECK(m_projectSettings.isEmpty()); m_instance = 0; } @@ -335,6 +344,22 @@ void ModelManagerSupportClang::onTextMarkContextMenuRequested(TextEditor::TextEd } } +void ModelManagerSupportClang::onProjectAdded(ProjectExplorer::Project *project) +{ + QTC_ASSERT(!m_projectSettings.value(project), return); + + auto *settings = new Internal::ClangProjectSettings(project); + m_projectSettings.insert(project, settings); +} + +void ModelManagerSupportClang::onAboutToRemoveProject(ProjectExplorer::Project *project) +{ + ClangProjectSettings * const settings = m_projectSettings.value(project); + QTC_ASSERT(settings, return); + m_projectSettings.remove(project); + delete settings; +} + void ModelManagerSupportClang::onProjectPartsUpdated(ProjectExplorer::Project *project) { QTC_ASSERT(project, return); @@ -397,6 +422,12 @@ QString ModelManagerSupportClang::dummyUiHeaderOnDiskPath(const QString &filePat return m_uiHeaderOnDiskManager.mapPath(filePath); } +ClangProjectSettings &ModelManagerSupportClang::projectSettings( + ProjectExplorer::Project *project) const +{ + return *m_projectSettings.value(project); +} + QString ModelManagerSupportClang::dummyUiHeaderOnDiskDirPath() const { return m_uiHeaderOnDiskManager.directoryPath(); diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.h b/src/plugins/clangcodemodel/clangmodelmanagersupport.h index 3744905b420..d534ffbed89 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.h +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.h @@ -50,6 +50,8 @@ class RefactoringEngineInterface; namespace ClangCodeModel { namespace Internal { +class ClangProjectSettings; + class ModelManagerSupportClang: public QObject, public CppTools::ModelManagerSupport @@ -71,6 +73,8 @@ public: QString dummyUiHeaderOnDiskDirPath() const; QString dummyUiHeaderOnDiskPath(const QString &filePath) const; + ClangProjectSettings &projectSettings(ProjectExplorer::Project *project) const; + static ModelManagerSupportClang *instance(); private: @@ -93,6 +97,9 @@ private: int lineNumber, QMenu *menu); + void onProjectAdded(ProjectExplorer::Project *project); + void onAboutToRemoveProject(ProjectExplorer::Project *project); + void onProjectPartsUpdated(ProjectExplorer::Project *project); void onProjectPartsRemoved(const QStringList &projectPartIds); @@ -111,6 +118,8 @@ private: ClangCompletionAssistProvider m_completionAssistProvider; std::unique_ptr m_followSymbol; std::unique_ptr m_refactoringEngine; + + QHash m_projectSettings; }; class ModelManagerSupportProviderClang : public CppTools::ModelManagerSupportProvider diff --git a/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp b/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp index 57461779bcd..fcee2b1dd85 100644 --- a/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp +++ b/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp @@ -25,6 +25,7 @@ #include "clangprojectsettingswidget.h" +#include "clangmodelmanagersupport.h" #include "clangprojectsettings.h" #include @@ -52,7 +53,7 @@ static Core::Id configIdForProject(ClangProjectSettings &projectSettings) } ClangProjectSettingsWidget::ClangProjectSettingsWidget(ProjectExplorer::Project *project) - : m_projectSettings(project) + : m_projectSettings(ModelManagerSupportClang::instance()->projectSettings(project)) { m_ui.setupUi(this); diff --git a/src/plugins/clangcodemodel/clangprojectsettingswidget.h b/src/plugins/clangcodemodel/clangprojectsettingswidget.h index 6c2f529f436..57d5d1210bb 100644 --- a/src/plugins/clangcodemodel/clangprojectsettingswidget.h +++ b/src/plugins/clangcodemodel/clangprojectsettingswidget.h @@ -59,7 +59,7 @@ private: private: Ui::ClangProjectSettingsWidget m_ui; - ClangProjectSettings m_projectSettings; + ClangProjectSettings &m_projectSettings; QPointer m_diagnosticConfigWidget; }; From 5b1ae09fbf66ef318e3759b3862c749356ec7a4a Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Fri, 19 Jan 2018 16:57:18 +0100 Subject: [PATCH 27/59] Clang: Auto reparse if diagnostic config changes On diagnostic config change, affected documents are closed behind the scenes. Visible ones are parsed immediately, invisible ones are tagged for parse once they become visible. Task-number: QTCREATORBUG-16263 Change-Id: Id4dcc69f1a4bfccc597e798d6821f8718f86e352 Reviewed-by: Orgad Shaneh Reviewed-by: David Schulz --- .../clangeditordocumentprocessor.cpp | 20 ++++-- .../clangeditordocumentprocessor.h | 4 ++ .../clangmodelmanagersupport.cpp | 67 +++++++++++++++---- .../clangcodemodel/clangmodelmanagersupport.h | 7 +- .../cpptools/baseeditordocumentprocessor.h | 3 +- 5 files changed, 82 insertions(+), 19 deletions(-) diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index 3097d9da883..10dc2548fae 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -181,6 +181,11 @@ void ClangEditorDocumentProcessor::clearProjectPart() m_projectPart.clear(); } +Core::Id ClangEditorDocumentProcessor::diagnosticConfigId() const +{ + return m_diagnosticConfigId; +} + void ClangEditorDocumentProcessor::updateCodeWarnings( const QVector &diagnostics, const ClangBackEnd::DiagnosticContainer &firstHeaderErrorDiagnostic, @@ -442,6 +447,7 @@ public: } const QStringList &options() const { return m_options; } + const Core::Id &diagnosticConfigId() const { return m_diagnosticConfigId; } private: void addLanguageOptions() @@ -469,15 +475,19 @@ private: const CppTools::ClangDiagnosticConfigsModel configsModel( CppTools::codeModelSettings()->clangCustomDiagnosticConfigs()); if (configsModel.hasConfigWithId(warningConfigId)) { - m_options.append( - configsModel.configWithId(warningConfigId).commandLineWarnings()); + addDiagnosticOptionsForConfig(configsModel.configWithId(warningConfigId)); return; } } } - m_options.append( - CppTools::codeModelSettings()->clangDiagnosticConfig().commandLineWarnings()); + addDiagnosticOptionsForConfig(CppTools::codeModelSettings()->clangDiagnosticConfig()); + } + + void addDiagnosticOptionsForConfig(const CppTools::ClangDiagnosticConfig &diagnosticConfig) + { + m_diagnosticConfigId = diagnosticConfig.id(); + m_options.append(diagnosticConfig.commandLineWarnings()); } void addXclangArg(const QString &argName, const QString &argValue = QString()) @@ -541,6 +551,7 @@ private: const QString &m_filePath; const CppTools::ProjectPart &m_projectPart; + Core::Id m_diagnosticConfigId; QStringList m_options; }; } // namespace @@ -563,6 +574,7 @@ void ClangEditorDocumentProcessor::registerTranslationUnitForEditor( } const FileOptionsBuilder fileOptions(filePath(), projectPart); + m_diagnosticConfigId = fileOptions.diagnosticConfigId(); m_communicator.registerTranslationUnitsForEditor( {fileContainerWithOptionsAndDocumentContent(projectPart, fileOptions.options())}); ClangCodeModel::Utils::setLastSentDocumentRevision(filePath(), revision()); diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h index 67ef0bc8a5d..8715bbad082 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h @@ -28,6 +28,7 @@ #include "clangdiagnosticmanager.h" #include "clangeditordocumentparser.h" +#include #include #include @@ -67,6 +68,8 @@ public: CppTools::ProjectPart::Ptr projectPart() const; void clearProjectPart(); + Core::Id diagnosticConfigId() const; + void updateCodeWarnings(const QVector &diagnostics, const ClangBackEnd::DiagnosticContainer &firstHeaderErrorDiagnostic, uint documentRevision); @@ -120,6 +123,7 @@ private: BackendCommunicator &m_communicator; QSharedPointer m_parser; CppTools::ProjectPart::Ptr m_projectPart; + Core::Id m_diagnosticConfigId; bool m_isProjectFile = false; QFutureWatcher m_parserWatcher; QTimer m_updateTranslationUnitTimer; diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index 26b01872bf5..6225894869e 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -34,8 +34,10 @@ #include "clangrefactoringengine.h" #include +#include #include #include +#include #include #include @@ -47,6 +49,7 @@ #include #include #include +#include #include #include @@ -107,6 +110,10 @@ ModelManagerSupportClang::ModelManagerSupportClang() connect(sessionManager, &ProjectExplorer::SessionManager::aboutToRemoveProject, this, &ModelManagerSupportClang::onAboutToRemoveProject); + CppTools::CppCodeModelSettings *settings = CppTools::codeModelSettings().data(); + connect(settings, &CppTools::CppCodeModelSettings::clangDiagnosticConfigsInvalidated, + this, &ModelManagerSupportClang::onDiagnosticConfigsInvalidated); + m_communicator.registerFallbackProjectPart(); } @@ -344,11 +351,41 @@ void ModelManagerSupportClang::onTextMarkContextMenuRequested(TextEditor::TextEd } } +using ClangEditorDocumentProcessors = QVector; +static ClangEditorDocumentProcessors clangProcessors() +{ + ClangEditorDocumentProcessors result; + foreach (auto *editorDocument, cppModelManager()->cppEditorDocuments()) + result.append(qobject_cast(editorDocument->processor())); + + return result; +} + +static ClangEditorDocumentProcessors +clangProcessorsWithProject(const ProjectExplorer::Project *project) +{ + return ::Utils::filtered(clangProcessors(), [project](ClangEditorDocumentProcessor *p) { + return p->hasProjectPart() && p->projectPart()->project == project; + }); +} + +static void updateProcessors(const ClangEditorDocumentProcessors &processors) +{ + CppTools::CppModelManager *modelManager = cppModelManager(); + for (ClangEditorDocumentProcessor *processor : processors) + modelManager->cppEditorDocument(processor->filePath())->resetProcessor(); + modelManager->updateCppEditorDocuments(/*projectsUpdated=*/ false); +} + void ModelManagerSupportClang::onProjectAdded(ProjectExplorer::Project *project) { QTC_ASSERT(!m_projectSettings.value(project), return); auto *settings = new Internal::ClangProjectSettings(project); + connect(settings, &Internal::ClangProjectSettings::changed, [project]() { + updateProcessors(clangProcessorsWithProject(project)); + }); + m_projectSettings.insert(project, settings); } @@ -379,21 +416,25 @@ void ModelManagerSupportClang::onProjectPartsRemoved(const QStringList &projectP } } -static QVector +static ClangEditorDocumentProcessors clangProcessorsWithDiagnosticConfig( + const QVector &configIds) +{ + return ::Utils::filtered(clangProcessors(), [configIds](ClangEditorDocumentProcessor *p) { + return configIds.contains(p->diagnosticConfigId()); + }); +} + +void ModelManagerSupportClang::onDiagnosticConfigsInvalidated(const QVector &configIds) +{ + updateProcessors(clangProcessorsWithDiagnosticConfig(configIds)); +} + +static ClangEditorDocumentProcessors clangProcessorsWithProjectParts(const QStringList &projectPartIds) { - QVector result; - - foreach (auto *editorDocument, cppModelManager()->cppEditorDocuments()) { - auto *processor = editorDocument->processor(); - auto *clangProcessor = qobject_cast(processor); - if (clangProcessor && clangProcessor->hasProjectPart()) { - if (projectPartIds.contains(clangProcessor->projectPart()->id())) - result.append(clangProcessor); - } - } - - return result; + return ::Utils::filtered(clangProcessors(), [projectPartIds](ClangEditorDocumentProcessor *p) { + return p->hasProjectPart() && projectPartIds.contains(p->projectPart()->id()); + }); } void ModelManagerSupportClang::unregisterTranslationUnitsWithProjectParts( diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.h b/src/plugins/clangcodemodel/clangmodelmanagersupport.h index d534ffbed89..d8c3e1c9176 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.h +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.h @@ -40,7 +40,10 @@ class QMenu; class QWidget; QT_END_NAMESPACE -namespace Core { class IDocument; } +namespace Core { +class IDocument; +class Id; +} // namespace Core namespace TextEditor { class TextEditorWidget; } namespace CppTools { class FollowSymbolInterface; @@ -103,6 +106,8 @@ private: void onProjectPartsUpdated(ProjectExplorer::Project *project); void onProjectPartsRemoved(const QStringList &projectPartIds); + void onDiagnosticConfigsInvalidated(const QVector &configIds); + void unregisterTranslationUnitsWithProjectParts(const QStringList &projectPartIds); void connectTextDocumentToTranslationUnit(TextEditor::TextDocument *textDocument); diff --git a/src/plugins/cpptools/baseeditordocumentprocessor.h b/src/plugins/cpptools/baseeditordocumentprocessor.h index d799c636b25..1b63cbd64dd 100644 --- a/src/plugins/cpptools/baseeditordocumentprocessor.h +++ b/src/plugins/cpptools/baseeditordocumentprocessor.h @@ -93,6 +93,8 @@ public: virtual QFuture requestFollowSymbol(int line, int column) = 0; virtual QFuture toolTipInfo(const QByteArray &codecName, int line, int column); + QString filePath() const { return m_filePath; } + public: using HeaderErrorDiagnosticWidgetCreator = std::function; @@ -117,7 +119,6 @@ protected: BaseEditorDocumentParser::UpdateParams updateParams); // Convenience - QString filePath() const { return m_filePath; } unsigned revision() const { return static_cast(m_textDocument->revision()); } QTextDocument *textDocument() const { return m_textDocument; } From 33b6fe812afb326e5cd54cf10c076144bff8e7db Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Fri, 26 Jan 2018 10:27:58 +0100 Subject: [PATCH 28/59] Clang: Make clazy/tidy options part of the diagnostic config As a side effect, clazy/tidy options become available for project specific customization in the projects mode. Change-Id: Id72762dedd857915139c15f532d2f1c6d1f43edb Reviewed-by: Ivan Donchevskii --- .../clangeditordocumentprocessor.cpp | 22 ++- .../cpptools/clangdiagnosticconfig.cpp | 32 ++++- src/plugins/cpptools/clangdiagnosticconfig.h | 14 +- .../cpptools/clangdiagnosticconfigsmodel.cpp | 6 +- .../cpptools/clangdiagnosticconfigswidget.cpp | 126 +++++++++++++++++- .../cpptools/clangdiagnosticconfigswidget.h | 27 +++- .../cpptools/clangdiagnosticconfigswidget.ui | 3 + src/plugins/cpptools/cppcodemodelsettings.cpp | 47 ++----- src/plugins/cpptools/cppcodemodelsettings.h | 9 -- .../cpptools/cppcodemodelsettingspage.cpp | 85 ------------ .../cpptools/cppcodemodelsettingspage.h | 18 --- .../cpptools/cppcodemodelsettingspage.ui | 12 -- src/plugins/cpptools/cpptoolsconstants.h | 2 - 13 files changed, 212 insertions(+), 191 deletions(-) diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index 10dc2548fae..afee72f3e82 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -487,7 +487,10 @@ private: void addDiagnosticOptionsForConfig(const CppTools::ClangDiagnosticConfig &diagnosticConfig) { m_diagnosticConfigId = diagnosticConfig.id(); - m_options.append(diagnosticConfig.commandLineWarnings()); + + m_options.append(diagnosticConfig.clangOptions()); + addClangTidyOptions(diagnosticConfig.clangTidyChecks()); + addClazyOptions(diagnosticConfig.clazyChecks()); } void addXclangArg(const QString &argName, const QString &argValue = QString()) @@ -500,24 +503,22 @@ private: } } - void addTidyOptions() + void addClangTidyOptions(const QString &checks) { - const QString tidyChecks = CppTools::codeModelSettings()->tidyChecks(); - if (tidyChecks.isEmpty()) + if (checks.isEmpty()) return; addXclangArg("-add-plugin", "clang-tidy"); - addXclangArg("-plugin-arg-clang-tidy", "-checks='-*" + tidyChecks + "'"); + addXclangArg("-plugin-arg-clang-tidy", "-checks='-*" + checks + "'"); } - void addClazyOptions() + void addClazyOptions(const QString &checks) { - const QString clazyChecks = CppTools::codeModelSettings()->clazyChecks(); - if (clazyChecks.isEmpty()) + if (checks.isEmpty()) return; addXclangArg("-add-plugin", "clang-lazy"); - addXclangArg("-plugin-arg-clang-lazy", clazyChecks); + addXclangArg("-plugin-arg-clang-lazy", checks); } void addGlobalOptions() @@ -526,9 +527,6 @@ private: m_options.append(ClangProjectSettings::globalCommandLineOptions()); else m_options.append(getProjectSettings(m_projectPart.project).commandLineOptions()); - - addTidyOptions(); - addClazyOptions(); } void addPrecompiledHeaderOptions() diff --git a/src/plugins/cpptools/clangdiagnosticconfig.cpp b/src/plugins/cpptools/clangdiagnosticconfig.cpp index 55b85f59b84..c605d128008 100644 --- a/src/plugins/cpptools/clangdiagnosticconfig.cpp +++ b/src/plugins/cpptools/clangdiagnosticconfig.cpp @@ -47,14 +47,14 @@ void ClangDiagnosticConfig::setDisplayName(const QString &displayName) m_displayName = displayName; } -QStringList ClangDiagnosticConfig::commandLineWarnings() const +QStringList ClangDiagnosticConfig::clangOptions() const { - return m_commandLineWarnings; + return m_clangOptions; } -void ClangDiagnosticConfig::setCommandLineWarnings(const QStringList &warnings) +void ClangDiagnosticConfig::setClangOptions(const QStringList &options) { - m_commandLineWarnings = warnings; + m_clangOptions = options; } bool ClangDiagnosticConfig::isReadOnly() const @@ -71,7 +71,9 @@ bool ClangDiagnosticConfig::operator==(const ClangDiagnosticConfig &other) const { return m_id == other.m_id && m_displayName == other.m_displayName - && m_commandLineWarnings == other.m_commandLineWarnings + && m_clangOptions == other.m_clangOptions + && m_clangTidyChecks == other.m_clangTidyChecks + && m_clazyChecks == other.m_clazyChecks && m_isReadOnly == other.m_isReadOnly; } @@ -80,4 +82,24 @@ bool ClangDiagnosticConfig::operator!=(const ClangDiagnosticConfig &other) const return !(*this == other); } +QString ClangDiagnosticConfig::clangTidyChecks() const +{ + return m_clangTidyChecks; +} + +void ClangDiagnosticConfig::setClangTidyChecks(const QString &checks) +{ + m_clangTidyChecks = checks; +} + +QString ClangDiagnosticConfig::clazyChecks() const +{ + return m_clazyChecks; +} + +void ClangDiagnosticConfig::setClazyChecks(const QString &checks) +{ + m_clazyChecks = checks; +} + } // namespace CppTools diff --git a/src/plugins/cpptools/clangdiagnosticconfig.h b/src/plugins/cpptools/clangdiagnosticconfig.h index e2329a2054d..327d2f504ea 100644 --- a/src/plugins/cpptools/clangdiagnosticconfig.h +++ b/src/plugins/cpptools/clangdiagnosticconfig.h @@ -43,8 +43,14 @@ public: QString displayName() const; void setDisplayName(const QString &displayName); - QStringList commandLineWarnings() const; - void setCommandLineWarnings(const QStringList &commandLineWarnings); + QStringList clangOptions() const; + void setClangOptions(const QStringList &options); + + QString clangTidyChecks() const; + void setClangTidyChecks(const QString &checks); + + QString clazyChecks() const; + void setClazyChecks(const QString &checks); bool isReadOnly() const; void setIsReadOnly(bool isReadOnly); @@ -55,7 +61,9 @@ public: private: Core::Id m_id; QString m_displayName; - QStringList m_commandLineWarnings; + QStringList m_clangOptions; + QString m_clangTidyChecks; + QString m_clazyChecks; bool m_isReadOnly = false; }; diff --git a/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp b/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp index 0fff8ac7ac1..4580e82801d 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp +++ b/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp @@ -45,7 +45,7 @@ static void addConfigForQuestionableConstructs(ClangDiagnosticConfigsModel &mode config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel", "Warnings for questionable constructs")); config.setIsReadOnly(true); - config.setCommandLineWarnings(QStringList{ + config.setClangOptions(QStringList{ QStringLiteral("-Wall"), QStringLiteral("-Wextra"), } + commonWarnings()); @@ -60,7 +60,7 @@ static void addConfigForPedanticWarnings(ClangDiagnosticConfigsModel &model) config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel", "Pedantic Warnings")); config.setIsReadOnly(true); - config.setCommandLineWarnings(QStringList{QStringLiteral("-Wpedantic")} + commonWarnings()); + config.setClangOptions(QStringList{QStringLiteral("-Wpedantic")} + commonWarnings()); model.appendOrUpdate(config); } @@ -72,7 +72,7 @@ static void addConfigForAlmostEveryWarning(ClangDiagnosticConfigsModel &model) config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel", "Warnings for almost everything")); config.setIsReadOnly(true); - config.setCommandLineWarnings(QStringList{ + config.setClangOptions(QStringList{ QStringLiteral("-Weverything"), QStringLiteral("-Wno-c++98-compat"), QStringLiteral("-Wno-c++98-compat-pedantic"), diff --git a/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp b/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp index 288b5e3a8d7..1cc623e3536 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp +++ b/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp @@ -25,6 +25,8 @@ #include "clangdiagnosticconfigswidget.h" #include "ui_clangdiagnosticconfigswidget.h" +#include "ui_clazychecks.h" +#include "ui_tidychecks.h" #include #include @@ -45,6 +47,7 @@ ClangDiagnosticConfigsWidget::ClangDiagnosticConfigsWidget( , m_diagnosticConfigsModel(diagnosticConfigsModel) { m_ui->setupUi(this); + setupPluginsWidgets(); connectConfigChooserCurrentIndex(); connect(m_ui->copyButton, &QPushButton::clicked, @@ -108,6 +111,18 @@ void ClangDiagnosticConfigsWidget::onRemoveButtonClicked() syncConfigChooserToModel(); } +void ClangDiagnosticConfigsWidget::onClangTidyItemChanged(QListWidgetItem *item) +{ + const QString prefix = item->text(); + ClangDiagnosticConfig config = currentConfig(); + QString checks = config.clangTidyChecks(); + item->checkState() == Qt::Checked + ? checks.append(',' + prefix) + : checks.remove(',' + prefix); + config.setClangTidyChecks(checks); + updateConfig(config); +} + static bool isAcceptedWarningOption(const QString &option) { return option == "-w" @@ -162,10 +177,8 @@ void ClangDiagnosticConfigsWidget::onDiagnosticOptionsEdited() // Commit valid changes ClangDiagnosticConfig updatedConfig = currentConfig(); - updatedConfig.setCommandLineWarnings(normalizedOptions); - - m_diagnosticConfigsModel.appendOrUpdate(updatedConfig); - emit customConfigsChanged(customConfigs()); + updatedConfig.setClangOptions(normalizedOptions); + updateConfig(updatedConfig); } void ClangDiagnosticConfigsWidget::syncWidgetsToModel(const Core::Id &configToSelect) @@ -213,12 +226,74 @@ void ClangDiagnosticConfigsWidget::syncOtherWidgetsToComboBox() // Update main button row m_ui->removeButton->setEnabled(!config.isReadOnly()); - // Update child widgets + // Update Text Edit const QString options = m_notAcceptedOptions.contains(config.id()) ? m_notAcceptedOptions.value(config.id()) - : config.commandLineWarnings().join(QLatin1Char(' ')); + : config.clangOptions().join(QLatin1Char(' ')); setDiagnosticOptions(options); m_ui->diagnosticOptionsTextEdit->setReadOnly(config.isReadOnly()); + + syncClangTidyWidgets(config); + syncClazyWidgets(config); +} + +void ClangDiagnosticConfigsWidget::syncClangTidyWidgets(const ClangDiagnosticConfig &config) +{ + disconnectClangTidyItemChanged(); + + const QString tidyChecks = config.clangTidyChecks(); + for (int row = 0; row < m_tidyChecks->checksList->count(); ++row) { + QListWidgetItem *item = m_tidyChecks->checksList->item(row); + + Qt::ItemFlags flags = item->flags(); + flags |= Qt::ItemIsUserCheckable; + if (config.isReadOnly()) + flags &= ~Qt::ItemIsEnabled; + else + flags |= Qt::ItemIsEnabled; + item->setFlags(flags); + + if (tidyChecks.indexOf(item->text()) != -1) + item->setCheckState(Qt::Checked); + else + item->setCheckState(Qt::Unchecked); + } + + connectClangTidyItemChanged(); +} + +void ClangDiagnosticConfigsWidget::syncClazyWidgets(const ClangDiagnosticConfig &config) +{ + const QString clazyChecks = config.clazyChecks(); + if (clazyChecks.isEmpty()) + m_clazyChecks->clazyLevel->setCurrentIndex(0); + else + m_clazyChecks->clazyLevel->setCurrentText(clazyChecks); + m_clazyChecksWidget->setEnabled(!config.isReadOnly()); +} + +void ClangDiagnosticConfigsWidget::setClazyLevelDescription(int index) +{ + // Levels descriptions are taken from https://github.com/KDE/clazy + static const QString levelDescriptions[] { + QString(), + tr("Very stable checks, 99.99% safe, no false-positives."), + tr("Similar to level 0, but sometimes (rarely) there might be\n" + "some false-positives."), + tr("Sometimes has false-positives (20-30%)."), + tr("Not always correct, possibly very noisy, might require\n" + "a knowledgeable developer to review, might have a very big\n" + "rate of false-positives, might have bugs.") + }; + + QTC_ASSERT(m_clazyChecks, return); + m_clazyChecks->levelDescription->setText(levelDescriptions[static_cast(index)]); +} + +void ClangDiagnosticConfigsWidget::updateConfig(const ClangDiagnosticConfig &config) +{ + m_diagnosticConfigsModel.appendOrUpdate(config); + emit customConfigsChanged(customConfigs()); } bool ClangDiagnosticConfigsWidget::isConfigChooserEmpty() const @@ -264,6 +339,18 @@ void ClangDiagnosticConfigsWidget::updateValidityWidgets(const QString &errorMes m_ui->validationResultLabel->setStyleSheet(styleSheet); } +void ClangDiagnosticConfigsWidget::connectClangTidyItemChanged() +{ + connect(m_tidyChecks->checksList, &QListWidget::itemChanged, + this, &ClangDiagnosticConfigsWidget::onClangTidyItemChanged); +} + +void ClangDiagnosticConfigsWidget::disconnectClangTidyItemChanged() +{ + disconnect(m_tidyChecks->checksList, &QListWidget::itemChanged, + this, &ClangDiagnosticConfigsWidget::onClangTidyItemChanged); +} + void ClangDiagnosticConfigsWidget::connectConfigChooserCurrentIndex() { connect(m_ui->configChooserComboBox, @@ -314,4 +401,31 @@ void ClangDiagnosticConfigsWidget::refresh( syncWidgetsToModel(configToSelect); } +void ClangDiagnosticConfigsWidget::setupPluginsWidgets() +{ + m_clazyChecks.reset(new CppTools::Ui::ClazyChecks); + m_clazyChecksWidget = new QWidget(); + m_clazyChecks->setupUi(m_clazyChecksWidget); + connect(m_clazyChecks->clazyLevel, + static_cast(&QComboBox::currentIndexChanged), + [this](int index) { + setClazyLevelDescription(index); + ClangDiagnosticConfig config = currentConfig(); + if (index == 0) + config.setClazyChecks(QString()); + else + config.setClazyChecks(m_clazyChecks->clazyLevel->itemText(index)); + updateConfig(config); + }); + + m_tidyChecks.reset(new CppTools::Ui::TidyChecks); + m_tidyChecksWidget = new QWidget(); + m_tidyChecks->setupUi(m_tidyChecksWidget); + connectClangTidyItemChanged(); + + m_ui->pluginChecksTabs->addTab(m_tidyChecksWidget, tr("Clang-Tidy")); + m_ui->pluginChecksTabs->addTab(m_clazyChecksWidget, tr("Clazy")); + m_ui->pluginChecksTabs->setCurrentIndex(0); +} + } // CppTools namespace diff --git a/src/plugins/cpptools/clangdiagnosticconfigswidget.h b/src/plugins/cpptools/clangdiagnosticconfigswidget.h index ff11815a229..40d574b9442 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigswidget.h +++ b/src/plugins/cpptools/clangdiagnosticconfigswidget.h @@ -33,9 +33,17 @@ #include #include +#include + +QT_FORWARD_DECLARE_CLASS(QListWidgetItem) + namespace CppTools { -namespace Ui { class ClangDiagnosticConfigsWidget; } +namespace Ui { +class ClangDiagnosticConfigsWidget; +class ClazyChecks; +class TidyChecks; +} class CPPTOOLS_EXPORT ClangDiagnosticConfigsWidget : public QWidget { @@ -59,15 +67,23 @@ signals: void customConfigsChanged(const CppTools::ClangDiagnosticConfigs &customConfigs); private: + void setupPluginsWidgets(); + void onCurrentConfigChanged(int); void onCopyButtonClicked(); void onRemoveButtonClicked(); + void onClangTidyItemChanged(QListWidgetItem *item); void onDiagnosticOptionsEdited(); void syncWidgetsToModel(const Core::Id &configToSelect = Core::Id()); void syncConfigChooserToModel(const Core::Id &configToSelect = Core::Id()); void syncOtherWidgetsToComboBox(); + void syncClangTidyWidgets(const ClangDiagnosticConfig &config); + void syncClazyWidgets(const ClangDiagnosticConfig &config); + + void setClazyLevelDescription(int index); + void updateConfig(const CppTools::ClangDiagnosticConfig &config); bool isConfigChooserEmpty() const; const ClangDiagnosticConfig ¤tConfig() const; @@ -75,6 +91,9 @@ private: void setDiagnosticOptions(const QString &options); void updateValidityWidgets(const QString &errorMessage); + void connectClangTidyItemChanged(); + void disconnectClangTidyItemChanged(); + void connectConfigChooserCurrentIndex(); void disconnectConfigChooserCurrentIndex(); void connectDiagnosticOptionsChanged(); @@ -84,6 +103,12 @@ private: Ui::ClangDiagnosticConfigsWidget *m_ui; ClangDiagnosticConfigsModel m_diagnosticConfigsModel; QHash m_notAcceptedOptions; + + std::unique_ptr m_clazyChecks; + QWidget *m_clazyChecksWidget = nullptr; + + std::unique_ptr m_tidyChecks; + QWidget *m_tidyChecksWidget = nullptr; }; } // CppTools namespace diff --git a/src/plugins/cpptools/clangdiagnosticconfigswidget.ui b/src/plugins/cpptools/clangdiagnosticconfigswidget.ui index 251868faca1..201a6f67ccf 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigswidget.ui +++ b/src/plugins/cpptools/clangdiagnosticconfigswidget.ui @@ -93,6 +93,9 @@ + + + diff --git a/src/plugins/cpptools/cppcodemodelsettings.cpp b/src/plugins/cpptools/cppcodemodelsettings.cpp index 71205cc4275..cc39f001299 100644 --- a/src/plugins/cpptools/cppcodemodelsettings.cpp +++ b/src/plugins/cpptools/cppcodemodelsettings.cpp @@ -55,6 +55,12 @@ static QString clangDiagnosticConfigsArrayDisplayNameKey() static QString clangDiagnosticConfigsArrayWarningsKey() { return QLatin1String("diagnosticOptions"); } +static QString clangDiagnosticConfigsArrayClangTidyChecksKey() +{ return QLatin1String("clangTidyChecks"); } + +static QString clangDiagnosticConfigsArrayClazyChecksKey() +{ return QLatin1String("clazyChecks"); } + static QString pchUsageKey() { return QLatin1String(Constants::CPPTOOLS_MODEL_MANAGER_PCH_USAGE); } @@ -67,12 +73,6 @@ static QString skipIndexingBigFilesKey() static QString indexerFileSizeLimitKey() { return QLatin1String(Constants::CPPTOOLS_INDEXER_FILE_SIZE_LIMIT); } -static QString tidyChecksKey() -{ return QLatin1String(Constants::CPPTOOLS_TIDY_CHECKS); } - -static QString clazyChecksKey() -{ return QLatin1String(Constants::CPPTOOLS_CLAZY_CHECKS); } - static ClangDiagnosticConfigs customDiagnosticConfigsFromSettings(QSettings *s) { QTC_ASSERT(s->group() == QLatin1String(Constants::CPPTOOLS_SETTINGSGROUP), @@ -87,7 +87,9 @@ static ClangDiagnosticConfigs customDiagnosticConfigsFromSettings(QSettings *s) ClangDiagnosticConfig config; config.setId(Core::Id::fromSetting(s->value(clangDiagnosticConfigsArrayIdKey()))); config.setDisplayName(s->value(clangDiagnosticConfigsArrayDisplayNameKey()).toString()); - config.setCommandLineWarnings(s->value(clangDiagnosticConfigsArrayWarningsKey()).toStringList()); + config.setClangOptions(s->value(clangDiagnosticConfigsArrayWarningsKey()).toStringList()); + config.setClangTidyChecks(s->value(clangDiagnosticConfigsArrayClangTidyChecksKey()).toString()); + config.setClazyChecks(s->value(clangDiagnosticConfigsArrayClazyChecksKey()).toString()); configs.append(config); } s->endArray(); @@ -123,11 +125,6 @@ void CppCodeModelSettings::fromSettings(QSettings *s) const QVariant indexerFileSizeLimit = s->value(indexerFileSizeLimitKey(), 5); setIndexerFileSizeLimitInMb(indexerFileSizeLimit.toInt()); - const QVariant tidyChecks = s->value(tidyChecksKey(), QString()); - setTidyChecks(tidyChecks.toString()); - const QVariant clazyChecks = s->value(clazyChecksKey(), QString()); - setClazyChecks(clazyChecks.toString()); - s->endGroup(); emit changed(); @@ -146,7 +143,9 @@ void CppCodeModelSettings::toSettings(QSettings *s) s->setArrayIndex(i); s->setValue(clangDiagnosticConfigsArrayIdKey(), config.id().toSetting()); s->setValue(clangDiagnosticConfigsArrayDisplayNameKey(), config.displayName()); - s->setValue(clangDiagnosticConfigsArrayWarningsKey(), config.commandLineWarnings()); + s->setValue(clangDiagnosticConfigsArrayWarningsKey(), config.clangOptions()); + s->setValue(clangDiagnosticConfigsArrayClangTidyChecksKey(), config.clangTidyChecks()); + s->setValue(clangDiagnosticConfigsArrayClazyChecksKey(), config.clazyChecks()); } s->endArray(); @@ -156,8 +155,6 @@ void CppCodeModelSettings::toSettings(QSettings *s) s->setValue(interpretAmbiguousHeadersAsCHeadersKey(), interpretAmbigiousHeadersAsCHeaders()); s->setValue(skipIndexingBigFilesKey(), skipIndexingBigFiles()); s->setValue(indexerFileSizeLimitKey(), indexerFileSizeLimitInMb()); - s->setValue(tidyChecksKey(), tidyChecks()); - s->setValue(clazyChecksKey(), clazyChecks()); s->endGroup(); @@ -239,23 +236,3 @@ void CppCodeModelSettings::setIndexerFileSizeLimitInMb(int sizeInMB) { m_indexerFileSizeLimitInMB = sizeInMB; } - -QString CppCodeModelSettings::tidyChecks() const -{ - return m_tidyChecks; -} - -void CppCodeModelSettings::setTidyChecks(QString checks) -{ - m_tidyChecks = checks; -} - -QString CppCodeModelSettings::clazyChecks() const -{ - return m_clazyChecks; -} - -void CppCodeModelSettings::setClazyChecks(QString checks) -{ - m_clazyChecks = checks; -} diff --git a/src/plugins/cpptools/cppcodemodelsettings.h b/src/plugins/cpptools/cppcodemodelsettings.h index 44661b2a4a6..bc91fbd1b8e 100644 --- a/src/plugins/cpptools/cppcodemodelsettings.h +++ b/src/plugins/cpptools/cppcodemodelsettings.h @@ -72,12 +72,6 @@ public: int indexerFileSizeLimitInMb() const; void setIndexerFileSizeLimitInMb(int sizeInMB); - QString tidyChecks() const; - void setTidyChecks(QString checks); - - QString clazyChecks() const; - void setClazyChecks(QString checks); - signals: void clangDiagnosticConfigsInvalidated(const QVector &configId); void changed(); @@ -89,9 +83,6 @@ private: int m_indexerFileSizeLimitInMB = 5; ClangDiagnosticConfigs m_clangCustomDiagnosticConfigs; Core::Id m_clangDiagnosticConfigId; - - QString m_tidyChecks; - QString m_clazyChecks; }; } // namespace CppTools diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.cpp b/src/plugins/cpptools/cppcodemodelsettingspage.cpp index d7f404fb03b..e6af115aed4 100644 --- a/src/plugins/cpptools/cppcodemodelsettingspage.cpp +++ b/src/plugins/cpptools/cppcodemodelsettingspage.cpp @@ -29,8 +29,6 @@ #include "cppmodelmanager.h" #include "cpptoolsconstants.h" #include "ui_cppcodemodelsettingspage.h" -#include "ui_clazychecks.h" -#include "ui_tidychecks.h" #include #include @@ -86,79 +84,6 @@ void CppCodeModelSettingsWidget::setupClangCodeModelWidgets() diagnosticConfigsModel, m_settings->clangDiagnosticConfigId()); m_ui->clangSettingsGroupBox->layout()->addWidget(m_clangDiagnosticConfigsWidget); - - m_ui->clangPlugins->setEnabled(isClangActive); - setupPluginsWidgets(); -} - -void CppCodeModelSettingsWidget::setupPluginsWidgets() -{ - m_clazyChecks.reset(new CppTools::Ui::ClazyChecks); - m_clazyChecksWidget = new QWidget(); - m_clazyChecks->setupUi(m_clazyChecksWidget); - - m_tidyChecks.reset(new CppTools::Ui::TidyChecks); - m_tidyChecksWidget = new QWidget(); - m_tidyChecks->setupUi(m_tidyChecksWidget); - - m_ui->pluginChecks->addTab(m_tidyChecksWidget, tr("ClangTidy")); - m_ui->pluginChecks->addTab(m_clazyChecksWidget, tr("Clazy")); - m_ui->pluginChecks->setCurrentIndex(0); - - setupTidyChecks(); - setupClazyChecks(); -} - -void CppCodeModelSettingsWidget::setupTidyChecks() -{ - m_currentTidyChecks = m_settings->tidyChecks(); - for (int row = 0; row < m_tidyChecks->checksList->count(); ++row) { - QListWidgetItem *item = m_tidyChecks->checksList->item(row); - item->setFlags(item->flags() | Qt::ItemIsUserCheckable); - if (m_currentTidyChecks.indexOf(item->text()) != -1) - item->setCheckState(Qt::Checked); - else - item->setCheckState(Qt::Unchecked); - } - connect(m_tidyChecks->checksList, &QListWidget::itemChanged, [this](QListWidgetItem *item) { - const QString prefix = item->text(); - item->checkState() == Qt::Checked - ? m_currentTidyChecks.append(',' + prefix) - : m_currentTidyChecks.remove(',' + prefix); - }); -} - -void CppCodeModelSettingsWidget::setupClazyChecks() -{ - // Levels descriptions are taken from https://github.com/KDE/clazy - static const std::array levelDescriptions {{ - QString(), - tr("Very stable checks, 99.99% safe, no false-positives."), - tr("Similar to level0, but sometimes (rarely) there might be\n" - "some false-positives."), - tr("Sometimes has false-positives (20-30%)."), - tr("Not always correct, possibly very noisy, might require\n" - "a knowledgeable developer to review, might have a very big\n" - "rate of false-positives, might have bugs.") - }}; - - m_currentClazyChecks = m_settings->clazyChecks(); - if (!m_currentClazyChecks.isEmpty()) { - m_clazyChecks->clazyLevel->setCurrentText(m_currentClazyChecks); - const unsigned index = static_cast(m_clazyChecks->clazyLevel->currentIndex()); - m_clazyChecks->levelDescription->setText(levelDescriptions[index]); - } - - connect(m_clazyChecks->clazyLevel, - static_cast(&QComboBox::currentIndexChanged), - [this](int index) { - m_clazyChecks->levelDescription->setText(levelDescriptions[static_cast(index)]); - if (index == 0) { - m_currentClazyChecks.clear(); - return; - } - m_currentClazyChecks = m_clazyChecks->clazyLevel->itemText(index); - }); } void CppCodeModelSettingsWidget::setupGeneralWidgets() @@ -192,16 +117,6 @@ bool CppCodeModelSettingsWidget::applyClangCodeModelWidgetsToSettings() const settingsChanged = true; } - if (m_settings->tidyChecks() != m_currentTidyChecks) { - m_settings->setTidyChecks(m_currentTidyChecks); - settingsChanged = true; - } - - if (m_settings->clazyChecks() != m_currentClazyChecks) { - m_settings->setClazyChecks(m_currentClazyChecks); - settingsChanged = true; - } - return settingsChanged; } diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.h b/src/plugins/cpptools/cppcodemodelsettingspage.h index 45728d487a8..7a56ca174b6 100644 --- a/src/plugins/cpptools/cppcodemodelsettingspage.h +++ b/src/plugins/cpptools/cppcodemodelsettingspage.h @@ -32,8 +32,6 @@ #include #include -#include - QT_FORWARD_DECLARE_CLASS(QComboBox) QT_FORWARD_DECLARE_CLASS(QSettings) @@ -41,11 +39,6 @@ namespace CppTools { class ClangDiagnosticConfigsWidget; -namespace Ui { -class ClazyChecks; -class TidyChecks; -} // namespace Ui - namespace Internal { namespace Ui { class CppCodeModelSettingsPage; } @@ -64,9 +57,6 @@ public: private: void setupGeneralWidgets(); void setupClangCodeModelWidgets(); - void setupPluginsWidgets(); - void setupTidyChecks(); - void setupClazyChecks(); bool applyGeneralWidgetsToSettings() const; bool applyClangCodeModelWidgetsToSettings() const; @@ -75,14 +65,6 @@ private: Ui::CppCodeModelSettingsPage *m_ui = nullptr; QPointer m_clangDiagnosticConfigsWidget; QSharedPointer m_settings; - - std::unique_ptr m_clazyChecks; - QWidget *m_clazyChecksWidget = nullptr; - QString m_currentClazyChecks; - - std::unique_ptr m_tidyChecks; - QWidget *m_tidyChecksWidget = nullptr; - QString m_currentTidyChecks; }; class CppCodeModelSettingsPage: public Core::IOptionsPage diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.ui b/src/plugins/cpptools/cppcodemodelsettingspage.ui index 35d4c37a427..61351787f07 100644 --- a/src/plugins/cpptools/cppcodemodelsettingspage.ui +++ b/src/plugins/cpptools/cppcodemodelsettingspage.ui @@ -114,18 +114,6 @@ - - - - Clang Plugins - - - - - - - - diff --git a/src/plugins/cpptools/cpptoolsconstants.h b/src/plugins/cpptools/cpptoolsconstants.h index b5e9d86bdbf..dff6d2c6f04 100644 --- a/src/plugins/cpptools/cpptoolsconstants.h +++ b/src/plugins/cpptools/cpptoolsconstants.h @@ -56,8 +56,6 @@ const char CPPTOOLS_INTERPRET_AMBIGIUOUS_HEADERS_AS_C_HEADERS[] = "InterpretAmbiguousHeadersAsCHeaders"; const char CPPTOOLS_SKIP_INDEXING_BIG_FILES[] = "SkipIndexingBigFiles"; const char CPPTOOLS_INDEXER_FILE_SIZE_LIMIT[] = "IndexerFileSizeLimit"; -const char CPPTOOLS_TIDY_CHECKS[] = "TidyChecks"; -const char CPPTOOLS_CLAZY_CHECKS[] = "ClazyChecks"; const char CPP_CLANG_BUILTIN_CONFIG_ID_EVERYTHING_WITH_EXCEPTIONS[] = "Builtin.EverythingWithExceptions"; From c535cce8c670c17d018571e7f32a4f624b0c09a9 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 29 Jan 2018 09:46:11 +0100 Subject: [PATCH 29/59] Update qbs submodule To HEAD of 1.11 branch. Change-Id: I6bdc81ae2f5aaa2b4403266615200ab51dc75cca Reviewed-by: Eike Ziller --- src/shared/qbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/qbs b/src/shared/qbs index 6655d563c3c..8355ba92901 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit 6655d563c3cac6dbfd61bfb3dd15ae5b9467d5ae +Subproject commit 8355ba92901715bc9366c9a0218fa756ae457408 From e44504371c99960e05ca42bae4ce404bcc18998a Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Tue, 28 Nov 2017 15:57:15 +0100 Subject: [PATCH 30/59] QmlProjectManager: Prepare for running on remote devices We add a "targetDirectory" property to the file format and fill in the deployment data. (cherry picked from commit fba61c5b55052c382e030748fa6e2703abb5401d) Change-Id: If207cd5c77175c54cffdb5df92ea85c425cd3191 Reviewed-by: hjk Reviewed-by: Eike Ziller --- .../qml-type-descriptions/qmlproject.qmltypes | 1 + .../fileformat/qmlprojectfileformat.cpp | 4 + .../fileformat/qmlprojectitem.cpp | 5 + .../fileformat/qmlprojectitem.h | 3 + src/plugins/qmlprojectmanager/qmlproject.cpp | 100 ++++++++++++++---- src/plugins/qmlprojectmanager/qmlproject.h | 8 +- .../qmlprojectrunconfiguration.cpp | 72 +++++++------ .../qmlprojectrunconfiguration.h | 4 - .../qmlprojectrunconfigurationfactory.cpp | 1 - 9 files changed, 143 insertions(+), 55 deletions(-) diff --git a/share/qtcreator/qml-type-descriptions/qmlproject.qmltypes b/share/qtcreator/qml-type-descriptions/qmlproject.qmltypes index a0dbed2b56f..c7e7cdf937a 100644 --- a/share/qtcreator/qml-type-descriptions/qmlproject.qmltypes +++ b/share/qtcreator/qml-type-descriptions/qmlproject.qmltypes @@ -11,6 +11,7 @@ Module { "QmlProject/Project 1.1" ] Property { name: "sourceDirectory"; type: "string" } + Property { name: "targetDirectory": type: "string" } Property { name: "mainFile"; type: "string" } Property { name: "importPaths"; type: "string"; isList: true } Property { name: "content"; type: "QmlProjectItem"; isList: true } diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp b/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp index 7893abc2664..6154ecd3d72 100644 --- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp +++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp @@ -88,6 +88,10 @@ QmlProjectItem *QmlProjectFileFormat::parseProjectFile(const Utils::FileName &fi if (importPathsProperty.isValid()) projectItem->setImportPaths(importPathsProperty.toStringList()); + const QVariant targetDirectoryPropery = rootNode->property("targetDirectory"); + if (targetDirectoryPropery.isValid()) + projectItem->setTargetDirectory(targetDirectoryPropery.toString()); + if (debug) qDebug() << "importPath:" << importPathsProperty << "mainFile:" << mainFileProperty; diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp index 0d8d4e15506..8e9e99475fc 100644 --- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp +++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp @@ -51,6 +51,11 @@ void QmlProjectItem::setSourceDirectory(const QString &directoryPath) setImportPaths(m_importPaths); } +void QmlProjectItem::setTargetDirectory(const QString &directoryPath) +{ + m_targetDirectory = directoryPath; +} + void QmlProjectItem::setImportPaths(const QStringList &importPaths) { if (m_importPaths != importPaths) diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h index 09298174a7d..757e5714687 100644 --- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h +++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h @@ -46,6 +46,8 @@ class QmlProjectItem : public QObject public: QString sourceDirectory() const { return m_sourceDirectory; } void setSourceDirectory(const QString &directoryPath); + QString targetDirectory() const { return m_targetDirectory; } + void setTargetDirectory(const QString &directoryPath); QStringList importPaths() const { return m_absoluteImportPaths; } void setImportPaths(const QStringList &paths); @@ -63,6 +65,7 @@ signals: protected: QString m_sourceDirectory; + QString m_targetDirectory; QStringList m_importPaths; QStringList m_absoluteImportPaths; QString m_mainFile; diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp index d1b32f8c367..2f9ab498daa 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.cpp +++ b/src/plugins/qmlprojectmanager/qmlproject.cpp @@ -36,6 +36,7 @@ #include #include +#include #include #include #include @@ -59,6 +60,10 @@ QmlProject::QmlProject(const Utils::FileName &fileName) : Project(QString::fromLatin1(Constants::QMLPROJECT_MIMETYPE), fileName, [this]() { refreshProjectFile(); }) { + const QString normalized + = Utils::FileUtils::normalizePathName(fileName.toFileInfo().canonicalFilePath()); + m_canonicalProjectDir = Utils::FileName::fromString(normalized).parentDir(); + setId(QmlProjectManager::Constants::QML_PROJECT_ID); setProjectLanguages(Context(ProjectExplorer::Constants::QMLJS_LANGUAGE_ID)); setDisplayName(fileName.toFileInfo().completeBaseName()); @@ -75,6 +80,7 @@ void QmlProject::addedTarget(Target *target) this, &QmlProject::addedRunConfiguration); foreach (RunConfiguration *rc, target->runConfigurations()) addedRunConfiguration(rc); + updateDeploymentData(target); } void QmlProject::onActiveTargetChanged(Target *target) @@ -104,9 +110,9 @@ void QmlProject::addedRunConfiguration(RunConfiguration *rc) qmlrc->updateEnabledState(); } -QDir QmlProject::projectDir() const +Utils::FileName QmlProject::canonicalProjectDir() const { - return projectFilePath().toFileInfo().dir(); + return m_canonicalProjectDir; } void QmlProject::parseProject(RefreshOptions options) @@ -129,13 +135,17 @@ void QmlProject::parseProject(RefreshOptions options) } } if (m_projectItem) { - m_projectItem.data()->setSourceDirectory(projectDir().path()); + m_projectItem.data()->setSourceDirectory(canonicalProjectDir().toString()); + if (m_projectItem->targetDirectory().isEmpty()) + m_projectItem->setTargetDirectory(canonicalProjectDir().toString()); + if (auto modelManager = QmlJS::ModelManagerInterface::instance()) modelManager->updateSourceFiles(m_projectItem.data()->files(), true); QString mainFilePath = m_projectItem.data()->mainFile(); if (!mainFilePath.isEmpty()) { - mainFilePath = projectDir().absoluteFilePath(mainFilePath); + mainFilePath + = QDir(canonicalProjectDir().toString()).absoluteFilePath(mainFilePath); Utils::FileReader reader; QString errorMessage; if (!reader.fetch(mainFilePath, &errorMessage)) { @@ -183,6 +193,26 @@ QString QmlProject::mainFile() const return QString(); } +Utils::FileName QmlProject::targetDirectory(const Target *target) const +{ + if (DeviceTypeKitInformation::deviceTypeId(target->kit()) + == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) + return canonicalProjectDir(); + + return m_projectItem ? Utils::FileName::fromString(m_projectItem->targetDirectory()) + : Utils::FileName(); +} + +Utils::FileName QmlProject::targetFile(const Utils::FileName &sourceFile, + const Target *target) const +{ + const QDir sourceDir(m_projectItem ? m_projectItem->sourceDirectory() + : canonicalProjectDir().toString()); + const QDir targetDir(targetDirectory(target).toString()); + const QString relative = sourceDir.relativeFilePath(sourceFile.toString()); + return Utils::FileName::fromString(QDir::cleanPath(targetDir.absoluteFilePath(relative))); +} + bool QmlProject::validProjectFile() const { return !m_projectItem.isNull(); @@ -219,17 +249,18 @@ void QmlProject::refreshFiles(const QSet &/*added*/, const QSetremoveFiles(removed.toList()); } + refreshTargetDirectory(); +} + +void QmlProject::refreshTargetDirectory() +{ + const QList targetList = targets(); + for (Target *target : targetList) + updateDeploymentData(target); } bool QmlProject::supportsKit(Kit *k, QString *errorMessage) const { - Id deviceType = DeviceTypeKitInformation::deviceTypeId(k); - if (deviceType != ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) { - if (errorMessage) - *errorMessage = tr("Device type is not desktop."); - return false; - } - QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k); if (!version) { if (errorMessage) @@ -262,15 +293,28 @@ Project::RestoreResult QmlProject::fromMap(const QVariantMap &map, QString *erro return false; IDevice::ConstPtr dev = DeviceKitInformation::device(k); - if (dev.isNull() || dev->type() != ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) - return false; - QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k); - if (!version || version->type() != QLatin1String(QtSupport::Constants::DESKTOPQT)) + if (dev.isNull()) return false; - return version->qtVersion() >= QtSupport::QtVersionNumber(5, 0, 0) - && !static_cast(version) - ->qmlsceneCommand().isEmpty(); + QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k); + if (!version || version->qtVersion() < QtSupport::QtVersionNumber(5, 0, 0)) + return false; + + if (dev->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) { + if (version->type() != QLatin1String(QtSupport::Constants::DESKTOPQT)) { + return !static_cast(version) + ->qmlsceneCommand().isEmpty(); + } else { + // Non-desktop Qt on a desktop device? We don't support that. + return false; + } + } + + // If not a desktop device, don't check the Qt version for qmlscene. + // The device is responsible for providing it and we assume qmlscene can be found + // in $PATH if it's not explicitly given. + return true; + }) ); @@ -322,7 +366,27 @@ void QmlProject::generateProjectTree() newRoot->addNestedNode(new FileNode(projectFilePath(), FileType::Project, false)); setRootProjectNode(newRoot); + refreshTargetDirectory(); } +void QmlProject::updateDeploymentData(ProjectExplorer::Target *target) +{ + if (!m_projectItem) + return; + + if (DeviceTypeKitInformation::deviceTypeId(target->kit()) + == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) { + return; + } + + ProjectExplorer::DeploymentData deploymentData; + for (const QString &file : m_projectItem->files()) { + deploymentData.addFile( + file, + targetFile(Utils::FileName::fromString(file), target).parentDir().toString()); + } + + target->setDeploymentData(deploymentData); +} } // namespace QmlProjectManager diff --git a/src/plugins/qmlprojectmanager/qmlproject.h b/src/plugins/qmlprojectmanager/qmlproject.h index 62c7980a28a..c1b667d21a1 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.h +++ b/src/plugins/qmlprojectmanager/qmlproject.h @@ -60,8 +60,11 @@ public: void refresh(RefreshOptions options); - QDir projectDir() const; + Utils::FileName canonicalProjectDir() const; QString mainFile() const; + Utils::FileName targetDirectory(const ProjectExplorer::Target *target) const; + Utils::FileName targetFile(const Utils::FileName &sourceFile, + const ProjectExplorer::Target *target) const; QStringList customImportPaths() const; bool addFiles(const QStringList &filePaths); @@ -74,7 +77,9 @@ protected: private: void generateProjectTree(); + void updateDeploymentData(ProjectExplorer::Target *target); void refreshFiles(const QSet &added, const QSet &removed); + void refreshTargetDirectory(); void addedTarget(ProjectExplorer::Target *target); void onActiveTargetChanged(ProjectExplorer::Target *target); void onKitChanged(); @@ -86,6 +91,7 @@ private: ProjectExplorer::Target *m_activeTarget = nullptr; QPointer m_projectItem; + Utils::FileName m_canonicalProjectDir; }; } // namespace QmlProjectManager diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp index 3cf0aaec9d4..11afeee224d 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp @@ -80,8 +80,7 @@ Runnable QmlProjectRunConfiguration::runnable() const r.commandLineArguments = commandLineArguments(); r.runMode = ApplicationLauncher::Gui; r.environment = extraAspect()->environment(); - r.workingDirectory = canonicalCapsPath(target()->project()->projectFilePath() - .toFileInfo().absolutePath()); + r.workingDirectory = static_cast(project())->targetDirectory(target()).toString(); return r; } @@ -89,48 +88,60 @@ QString QmlProjectRunConfiguration::disabledReason() const { if (mainScript().isEmpty()) return tr("No script file to execute."); - if (!QFileInfo::exists(executable())) + if (DeviceTypeKitInformation::deviceTypeId(target()->kit()) + == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE + && !QFileInfo::exists(executable())) { return tr("No qmlscene found."); + } + if (executable().isEmpty()) + return tr("No qmlscene binary specified for target device."); return RunConfiguration::disabledReason(); } QString QmlProjectRunConfiguration::executable() const { BaseQtVersion *version = QtKitInformation::qtVersion(target()->kit()); - if (!version) + if (!version) // No Qt version in Kit. Don't try to run qmlscene. return QString(); - QTC_ASSERT(version->type() == QLatin1String(QtSupport::Constants::DESKTOPQT), return QString()); - return static_cast(version)->qmlsceneCommand(); + const Id deviceType = DeviceTypeKitInformation::deviceTypeId(target()->kit()); + if (deviceType == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) { + // If not given explicitly by Qt Version, try to pick it from $PATH. + return version->type() == QtSupport::Constants::DESKTOPQT + ? static_cast(version)->qmlsceneCommand() + : QString("qmlscene"); + } + + IDevice::ConstPtr dev = DeviceKitInformation::device(target()->kit()); + if (dev.isNull()) // No device set. We don't know where to run qmlscene. + return QString(); + + const QString qmlscene = dev->qmlsceneCommand(); + // If not given explicitly by device, try to pick it from $PATH. + return qmlscene.isEmpty() ? QString("qmlscene") : qmlscene; } QString QmlProjectRunConfiguration::commandLineArguments() const { // arguments in .user file QString args = m_qmlViewerArgs; + const IDevice::ConstPtr device = DeviceKitInformation::device(target()->kit()); + const Utils::OsType osType = device ? device->osType() : Utils::HostOsInfo::hostOs(); // arguments from .qmlproject file QmlProject *project = static_cast(target()->project()); foreach (const QString &importPath, project->customImportPaths()) { - Utils::QtcProcess::addArg(&args, QLatin1String("-I")); - Utils::QtcProcess::addArg(&args, importPath); + Utils::QtcProcess::addArg(&args, QLatin1String("-I"), osType); + Utils::QtcProcess::addArg(&args, importPath, osType); } - QString s = mainScript(); - if (!s.isEmpty()) { - s = canonicalCapsPath(s); - Utils::QtcProcess::addArg(&args, s); - } + const QString main + = project->targetFile(Utils::FileName::fromString(mainScript()), target()).toString(); ; + if (!main.isEmpty()) + Utils::QtcProcess::addArg(&args, main, osType); return args; } -/* QtDeclarative checks explicitly that the capitalization for any URL / path - is exactly like the capitalization on disk.*/ -QString QmlProjectRunConfiguration::canonicalCapsPath(const QString &fileName) -{ - return Utils::FileUtils::normalizePathName(QFileInfo(fileName).canonicalFilePath()); -} - QWidget *QmlProjectRunConfiguration::createConfigurationWidget() { return new QmlProjectRunConfigurationWidget(this); @@ -164,7 +175,7 @@ QString QmlProjectRunConfiguration::mainScript() const if (QFileInfo(pathInProject).isAbsolute()) return pathInProject; else - return project->projectDir().absoluteFilePath(pathInProject); + return QDir(project->canonicalProjectDir().toString()).absoluteFilePath(pathInProject); } if (!m_mainScriptFilename.isEmpty()) @@ -272,17 +283,16 @@ void QmlProjectRunConfiguration::updateEnabledState() qmlFileFound = !mainScript().isEmpty(); } - if (QFileInfo::exists(executable()) && qmlFileFound) - RunConfiguration::updateEnabledState(); - else + if (!qmlFileFound) { setEnabled(false); -} - -bool QmlProjectRunConfiguration::isValidVersion(QtSupport::BaseQtVersion *version) -{ - return version - && version->type() == QLatin1String(QtSupport::Constants::DESKTOPQT) - && !static_cast(version)->qmlsceneCommand().isEmpty(); + } else { + const QString exe = executable(); + if (exe.isEmpty()) { + setEnabled(false); + } else { + RunConfiguration::updateEnabledState(); + } + } } } // namespace QmlProjectManager diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h index 17a6dfcb52f..7e8181c0ab4 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h @@ -80,10 +80,6 @@ private: QString executable() const; QString commandLineArguments() const; - static bool isValidVersion(QtSupport::BaseQtVersion *version); - - static QString canonicalCapsPath(const QString &filePath); - // absolute path to current file (if being used) QString m_currentFileFilename; // absolute path to selected main script (if being used) diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp index dcfd2c51633..436ec3dc2dd 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfigurationfactory.cpp @@ -37,7 +37,6 @@ QmlProjectRunConfigurationFactory::QmlProjectRunConfigurationFactory(QObject *pa setObjectName("QmlProjectRunConfigurationFactory"); registerRunConfiguration(Constants::QML_SCENE_RC_ID); addSupportedProjectType(QmlProjectManager::Constants::QML_PROJECT_ID); - setSupportedTargetDeviceTypes({ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE}); addFixedBuildTarget(tr("QML Scene")); } From 049b76124258f7579cb735b49df900fa39d17a0a Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 26 Jan 2018 12:06:21 +0100 Subject: [PATCH 31/59] Fix inconsistency between tool tip and context help MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For the tool tip it moves the position to the start of the word before passing it to the hoverhandler. That wasn't the case if the user requests context help, which lead to the strange situation that the tool tip showed help, but context help at the same position did not (e.g. on QApplication::topLevelWidgets() with the cursor between the parentheses). Related to QTCREATORBUG-15959 Change-Id: I2b9918ea235869c2ddeeba6e749958c10a47d259 Reviewed-by: André Hartmann Reviewed-by: Nikolai Kosjar --- src/plugins/texteditor/texteditor.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index a0cbd176999..32183afc2f7 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -7934,10 +7934,13 @@ void BaseTextEditor::setContextHelpId(const QString &id) void TextEditorWidget::contextHelpId(const IContext::HelpIdCallback &callback) { - if (d->m_contextHelpId.isEmpty() && !d->m_hoverHandlers.isEmpty()) - d->m_hoverHandlers.first()->contextHelpId(this, textCursor().position(), callback); - else + if (d->m_contextHelpId.isEmpty() && !d->m_hoverHandlers.isEmpty()) { + d->m_hoverHandlers.first()->contextHelpId(this, + Text::wordStartCursor(textCursor()).position(), + callback); + } else { callback(d->m_contextHelpId); + } } void TextEditorWidget::setContextHelpId(const QString &id) From aade6ef3713815ddf1017ca146f37f31a07bbf9b Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Fri, 26 Jan 2018 13:36:29 +0100 Subject: [PATCH 32/59] Fix binding loops in Timeline and FlameGraph This also gives us a nicer minimum width for the details windows. Change-Id: Ibf57899b24caa22f303a83cafd20f2b07b5efbb4 Task-number: QTCREATORBUG-19653 Reviewed-by: Robert Loehning Reviewed-by: Christian Kandeler --- src/libs/flamegraph/qml/FlameGraphDetails.qml | 9 +++++---- src/libs/timeline/qml/RangeDetails.qml | 7 ++++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/libs/flamegraph/qml/FlameGraphDetails.qml b/src/libs/flamegraph/qml/FlameGraphDetails.qml index e3f2fde97f4..2f1110090ab 100644 --- a/src/libs/flamegraph/qml/FlameGraphDetails.qml +++ b/src/libs/flamegraph/qml/FlameGraphDetails.qml @@ -153,9 +153,10 @@ Item { spacing: innerMargin columns: 2 property int minimumWidth: { + // max(width of longest label * 2, minimumInnerWidth) var result = minimumInnerWidth; - for (var i = 0; i < children.length; ++i) - result = Math.max(children[i].x, result); + for (var i = 0; i < children.length; i += 2) + result = Math.max(children[i].implicitWidth * 2 + innerMargin, result); return result + 2 * outerMargin; } @@ -170,8 +171,8 @@ Item { property bool isLabel: index % 2 === 0 font.bold: isLabel elide: Text.ElideRight - width: text === "" ? 0 : (isLabel ? implicitWidth : - (dragHandle.x - x - innerMargin)) + width: (text === "" || isLabel) + ? implicitWidth : (dragHandle.x - col.minimumWidth / 2 - innerMargin) text: isLabel ? (modelData + ":") : modelData color: contentTextColor } diff --git a/src/libs/timeline/qml/RangeDetails.qml b/src/libs/timeline/qml/RangeDetails.qml index 6b42bbc934f..9b9ff77d7fe 100644 --- a/src/libs/timeline/qml/RangeDetails.qml +++ b/src/libs/timeline/qml/RangeDetails.qml @@ -176,9 +176,10 @@ Item { spacing: 5 columns: 2 property int minimumWidth: { + // max(width of longest label * 2, 150) var result = 150; - for (var i = 0; i < children.length; ++i) - result = Math.max(children[i].x, result); + for (var i = 0; i < children.length; i += 2) + result = Math.max(children[i].implicitWidth * 2 + spacing, result); return result + 20; } @@ -190,7 +191,7 @@ Item { Repeater { model: eventInfo Detail { - valueWidth: dragHandle.x - x - 15 + valueWidth: (dragHandle.x - col.minimumWidth / 2 - col.spacing) isLabel: index % 2 === 0 text: (content === undefined) ? "" : (isLabel ? (content + ":") : content) } From d3b11926d3d3d0c7062b59de22dcd842c3f539bf Mon Sep 17 00:00:00 2001 From: Ivan Donchevskii Date: Mon, 29 Jan 2018 08:43:44 +0100 Subject: [PATCH 33/59] Clang: fix unit-test build Remove unit-test dependency from project. Change-Id: I1abdbea08648c292d5c98a0c88a211c8c897cc71 Reviewed-by: Nikolai Kosjar --- tests/unit/mockup/projectexplorer/project.h | 41 +++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 tests/unit/mockup/projectexplorer/project.h diff --git a/tests/unit/mockup/projectexplorer/project.h b/tests/unit/mockup/projectexplorer/project.h new file mode 100644 index 00000000000..ea040fbc490 --- /dev/null +++ b/tests/unit/mockup/projectexplorer/project.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** 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 The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#pragma once + +#include + +#include + +namespace ProjectExplorer { + +class Project : public QObject { +public: + Utils::FileName projectDirectory() const { + return Utils::FileName(); + } +}; + +} From 2e8527c7e578f75ad8b9967f47cee771e3609d10 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 26 Jan 2018 13:46:16 +0100 Subject: [PATCH 34/59] Wizards: Fix QtQuick - Empty wizard for cmake cmake does not automatically set the C++ standard to C++-11 when using Qt5.6. Explicitly set it to have a compiling template. Task-number: QTCREATORBUG-19670 Change-Id: Ibba1f58951f96c4834985bff2298d606e9aa56bc Reviewed-by: Tobias Hunger --- .../wizards/projects/qtquickapplication/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication/CMakeLists.txt b/share/qtcreator/templates/wizards/projects/qtquickapplication/CMakeLists.txt index 1e36df0c284..07c1f586086 100644 --- a/share/qtcreator/templates/wizards/projects/qtquickapplication/CMakeLists.txt +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication/CMakeLists.txt @@ -1,10 +1,12 @@ -cmake_minimum_required(VERSION 2.8.12) +cmake_minimum_required(VERSION 3.1) project(%{ProjectName} LANGUAGES CXX) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt5 COMPONENTS Core Quick REQUIRED) From e6f43be202f690fdfe30927add3ff772ec965b5b Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 25 Jan 2018 18:15:50 +0100 Subject: [PATCH 35/59] QmlDesigner: Add setting that hints for a stand alone mode Change-Id: Ib0287b74b5ddb2eb9fdeccb1d50cffec9ae0467a Reviewed-by: Alessandro Portale --- src/plugins/qmldesigner/designersettings.cpp | 1 + src/plugins/qmldesigner/designersettings.h | 1 + 2 files changed, 2 insertions(+) diff --git a/src/plugins/qmldesigner/designersettings.cpp b/src/plugins/qmldesigner/designersettings.cpp index ec7d1397283..af653636d67 100644 --- a/src/plugins/qmldesigner/designersettings.cpp +++ b/src/plugins/qmldesigner/designersettings.cpp @@ -76,6 +76,7 @@ void DesignerSettings::fromSettings(QSettings *settings) restoreValue(settings, DesignerSettingsKey::IGNORE_DEVICE_PIXEL_RATIO, false); restoreValue(settings, DesignerSettingsKey::STATESEDITOR_EXPANDED, false); restoreValue(settings, DesignerSettingsKey::NAVIGATOR_SHOW_ONLY_VISIBLE_ITEMS, true); + restoreValue(settings, DesignerSettingsKey::STANDALONE_MODE, false); settings->endGroup(); settings->endGroup(); diff --git a/src/plugins/qmldesigner/designersettings.h b/src/plugins/qmldesigner/designersettings.h index 7172c10491e..8a29de676d5 100644 --- a/src/plugins/qmldesigner/designersettings.h +++ b/src/plugins/qmldesigner/designersettings.h @@ -63,6 +63,7 @@ const char STATESEDITOR_EXPANDED[] = "StatesEditorExpanded"; const char NAVIGATOR_SHOW_ONLY_VISIBLE_ITEMS[] = "NavigatorShowOnlyVisibleItems"; const char REFORMAT_UI_QML_FILES[] = "ReformatUiQmlFiles"; /* These settings are not exposed in ui. */ const char IGNORE_DEVICE_PIXEL_RATIO[] = "IgnoreDevicePixelRaio"; /* The settings can be used to turn off the feature, if there are serious issues */ +const char STANDALONE_MODE[] = "StandAloneMode"; } class DesignerSettings : public QHash From 700447d9a0c87d156e15f21d31c57b55532af22d Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Wed, 24 Jan 2018 14:21:38 +0100 Subject: [PATCH 36/59] fix deploy Qt for renamed QtCreator Change-Id: I7abd20ae8ad91ac5a7bf0d5daa856c0615ae3b10 Reviewed-by: Eike Ziller --- qtcreator.pro | 2 +- scripts/deployqt.py | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/qtcreator.pro b/qtcreator.pro index c8ea8ddd37d..f52b6c242c8 100644 --- a/qtcreator.pro +++ b/qtcreator.pro @@ -118,7 +118,7 @@ macx { } else { BINDIST_SOURCE = "$(INSTALL_ROOT)$$QTC_PREFIX" BINDIST_EXCLUDE_ARG = "--exclude-toplevel" - deployqt.commands = python -u $$PWD/scripts/deployqt.py -i \"$(INSTALL_ROOT)$$QTC_PREFIX\" \"$(QMAKE)\" + deployqt.commands = python -u $$PWD/scripts/deployqt.py -i \"$(INSTALL_ROOT)$$QTC_PREFIX/bin/$${IDE_APP_TARGET}\" \"$(QMAKE)\" deployqt.depends = install win32 { deployartifacts.depends = install diff --git a/scripts/deployqt.py b/scripts/deployqt.py index 75e29007552..4ea1fb770df 100755 --- a/scripts/deployqt.py +++ b/scripts/deployqt.py @@ -43,7 +43,7 @@ debug_build = False encoding = locale.getdefaultlocale()[1] def usage(): - print("Usage: %s [qmake_path]" % os.path.basename(sys.argv[0])) + print("Usage: %s [qmake_path]" % os.path.basename(sys.argv[0])) def which(program): def is_exe(fpath): @@ -77,9 +77,6 @@ def is_debug(fpath): output = subprocess.check_output(['dumpbin', '/imports', fpath]) return coredebug.search(output.decode(encoding)) != None -def is_debug_build(install_dir): - return is_debug(os.path.join(install_dir, 'bin', 'qtcreator.exe')) - def op_failed(details = None): if details != None: print(details) @@ -274,11 +271,16 @@ def main(): ignoreErrors = True print("Note: Ignoring all errors") - if len(args) < 1: + qtcreator_binary = os.path.abspath(args[0]) + if common.is_windows_platform() and not qtcreator_binary.lower().endswith(".exe"): + qtcreator_binary = qtcreator_binary + ".exe" + + if len(args) < 1 or not os.path.isfile(qtcreator_binary): usage() sys.exit(2) - install_dir = args[0] + qtcreator_binary_path = os.path.dirname(qtcreator_binary) + install_dir = os.path.abspath(os.path.join(qtcreator_binary_path, '..')) if common.is_linux_platform(): qt_deploy_prefix = os.path.join(install_dir, 'lib', 'Qt') else: @@ -312,7 +314,7 @@ def main(): if common.is_windows_platform(): global debug_build - debug_build = is_debug_build(install_dir) + debug_build = is_debug(qtcreator_binary) if common.is_windows_platform(): copy_qt_libs(qt_deploy_prefix, QT_INSTALL_BINS, QT_INSTALL_BINS, QT_INSTALL_PLUGINS, QT_INSTALL_IMPORTS, QT_INSTALL_QML, plugins, imports) From 84d81f27b255191f250f47d952711b32443e6b60 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Mon, 29 Jan 2018 14:29:18 +0100 Subject: [PATCH 37/59] QmlDesigner: Simplify settings in stand alone mode We also hide the related error message pointing to the QML emulation layer. Change-Id: I8e2f08bcbc4bdbf36a49e8fba1d1d92adab36e11 Reviewed-by: Leena Miettinen Reviewed-by: Tim Jenssen --- .../qmldesigner/components/navigator/navigatortreemodel.cpp | 4 +++- src/plugins/qmldesigner/settingspage.cpp | 5 +++++ src/plugins/qmldesigner/settingspage.ui | 4 ++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp index d9f3fa17365..14776d40d60 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp @@ -27,6 +27,7 @@ #include "navigatorview.h" #include +#include #include #include #include @@ -207,7 +208,8 @@ QVariant NavigatorTreeModel::data(const QModelIndex &index, int role) const } else if (role == Qt::ToolTipRole) { if (currentQmlObjectNode.hasError()) { QString errorString = currentQmlObjectNode.error(); - if (currentQmlObjectNode.isRootNode()) + if (DesignerSettings::getValue(DesignerSettingsKey::STANDALONE_MODE).toBool() && + currentQmlObjectNode.isRootNode()) errorString.append(QString("\n%1").arg(tr("Changing the setting \"%1\" might solve the issue.").arg( tr("Use QML emulation layer that is built with the selected Qt")))); diff --git a/src/plugins/qmldesigner/settingspage.cpp b/src/plugins/qmldesigner/settingspage.cpp index 0a32af56eac..6d904a49c22 100644 --- a/src/plugins/qmldesigner/settingspage.cpp +++ b/src/plugins/qmldesigner/settingspage.cpp @@ -210,6 +210,11 @@ void SettingsPageWidget::setSettings(const DesignerSettings &settings) DesignerSettingsKey::ENABLE_MODEL_EXCEPTION_OUTPUT).toBool()); m_ui.controls2StyleComboBox->setCurrentText(m_ui.styleLineEdit->text()); + + if (settings.value(DesignerSettingsKey::STANDALONE_MODE).toBool()) { + m_ui.emulationGroupBox->hide(); + m_ui.debugGroupBox->hide(); + } } SettingsPage::SettingsPage() : diff --git a/src/plugins/qmldesigner/settingspage.ui b/src/plugins/qmldesigner/settingspage.ui index ca00b6fc411..afa70d87787 100644 --- a/src/plugins/qmldesigner/settingspage.ui +++ b/src/plugins/qmldesigner/settingspage.ui @@ -216,7 +216,7 @@ - + QML Emulation Layer @@ -411,7 +411,7 @@ - + Debugging From f55ce0a1e09ba21c8c33a32c7336024169feb367 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Mon, 29 Jan 2018 11:08:34 +0100 Subject: [PATCH 38/59] Debugger: Do not immediately assume engine setup done Instead of assuming engine setup done wait for the respective signal coming from the debugger bridge. Task-number: QTCREATORBUG-19666 Change-Id: I3b9daffc7f22ce2a0fde5c993760a2a5bda31310 Reviewed-by: hjk --- src/plugins/debugger/lldb/lldbengine.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index 3f945afc159..6e26ff3e6e8 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -292,7 +292,6 @@ void LldbEngine::setupEngine() .arg(bp.id().toString()).arg(bp.state())); } } - notifyEngineSetupOk(); } else { notifyEngineSetupFailed(); } From f211802d4cbedd3af88cb62e8c2342388cac6057 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 29 Jan 2018 15:28:39 +0100 Subject: [PATCH 39/59] Remove wrong change log entry Change-Id: I76afba05334a69f5ca6c03350d8aeafcd1c6f319 Reviewed-by: Ivan Donchevskii Reviewed-by: Nikolai Kosjar --- dist/changes-4.6.0.md | 1 - 1 file changed, 1 deletion(-) diff --git a/dist/changes-4.6.0.md b/dist/changes-4.6.0.md index 5aea16ad0b5..f0e994b2085 100644 --- a/dist/changes-4.6.0.md +++ b/dist/changes-4.6.0.md @@ -47,7 +47,6 @@ C++ Support including resolution of `auto` types (QTCREATORBUG-11259) * Integrated Clang-Tidy and Clazy. Enable checks in Options > C++ > Code Model > Clang Plugins - * Added renaming of local symbols * Added separate highlighting for function definitions (QTCREATORBUG-16625) QML Support From 860b89b49c822edf2b25cb787162b598da13e208 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 30 Jan 2018 10:02:44 +0100 Subject: [PATCH 40/59] qbs build: Disable Qt bundling functionality This would otherwise come in from the qbs submodule. Change-Id: I44cc3ae5115146d3e051fcc0f78b1369205d3488 Reviewed-by: Alexandru Croitor --- qbs/modules/qbsbuildconfig/qbsbuildconfig.qbs | 1 + 1 file changed, 1 insertion(+) diff --git a/qbs/modules/qbsbuildconfig/qbsbuildconfig.qbs b/qbs/modules/qbsbuildconfig/qbsbuildconfig.qbs index 6c770999069..ed754e43da9 100644 --- a/qbs/modules/qbsbuildconfig/qbsbuildconfig.qbs +++ b/qbs/modules/qbsbuildconfig/qbsbuildconfig.qbs @@ -9,6 +9,7 @@ Module { property bool enableUnitTests: false property bool enableProjectFileUpdates: true property bool installApiHeaders: false + property bool enableBundledQt: false property string libInstallDir: qtc.ide_library_path property stringList libRPaths: qbs.targetOS.contains("macos") ? ["@loader_path/" + FileInfo.relativePath('/' + appInstallDir, '/' + libInstallDir)] From 43f02573dfd4d5e61f12d7e78986399d2eee7399 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 29 Jan 2018 08:14:40 +0100 Subject: [PATCH 41/59] Debugger: Use shared TerminalRunner also for CDB Task-number: QTCREATORBUG-19633 Change-Id: Ic16335de1c5e57da7d9253772bad9e4ade1db926 Reviewed-by: David Schulz --- src/plugins/debugger/debuggerruncontrol.cpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index a576377a2cd..741a295af2d 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -365,7 +365,13 @@ void DebuggerRunTool::setBreakOnMain(bool on) void DebuggerRunTool::setUseTerminal(bool on) { - if (on && !d->terminalRunner && m_runParameters.cppEngineType == GdbEngineType) { + // CDB has a built-in console that might be preferred by some. + bool useCdbConsole = m_runParameters.cppEngineType == CdbEngineType + && (m_runParameters.startMode == StartInternal + || m_runParameters.startMode == StartExternal) + && boolSetting(UseCdbConsole); + + if (on && !d->terminalRunner && !useCdbConsole) { d->terminalRunner = new TerminalRunner(this); addStartDependency(d->terminalRunner); } @@ -891,15 +897,6 @@ DebuggerRunTool::DebuggerRunTool(RunControl *runControl, Kit *kit, bool allowTer m_engine = createPdbEngine(); } } - - if (m_runParameters.cppEngineType == CdbEngineType - && !boolSetting(UseCdbConsole) - && m_runParameters.inferior.runMode == ApplicationLauncher::Console - && (m_runParameters.startMode == StartInternal - || m_runParameters.startMode == StartExternal)) { - d->terminalRunner = new TerminalRunner(this); - addStartDependency(d->terminalRunner); - } } DebuggerEngine *DebuggerRunTool::activeEngine() const From 4a58581eed17d3a751d09324e23d784c4428a80c Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 30 Jan 2018 11:21:48 +0100 Subject: [PATCH 42/59] changelog: Correct instructions to enable clazy/tidy The clang/tidy settings are part of the diagnostic configuration and not anymore in its own group box "Clang Plugins". Change-Id: Ibba95cff351521a8e0fda60f1b7f4e9a3e99c127 Reviewed-by: Eike Ziller --- dist/changes-4.6.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/changes-4.6.0.md b/dist/changes-4.6.0.md index f0e994b2085..009f8a12e03 100644 --- a/dist/changes-4.6.0.md +++ b/dist/changes-4.6.0.md @@ -46,7 +46,7 @@ C++ Support * Implemented information tool tips, which improves type information including resolution of `auto` types (QTCREATORBUG-11259) * Integrated Clang-Tidy and Clazy. - Enable checks in Options > C++ > Code Model > Clang Plugins + Enable checks in Options > C++ > Code Model > Clang Code Model Warnings * Added separate highlighting for function definitions (QTCREATORBUG-16625) QML Support From a8d8365c84a7d9b6ca0b71ffbfc8842caf2eb887 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 30 Jan 2018 12:36:55 +0100 Subject: [PATCH 43/59] Add missing features to changes file Change-Id: Ib7ddb8cc98a11ab4703a2d12e60891afcbba6d1c Reviewed-by: Leena Miettinen Reviewed-by: Nikolai Kosjar --- dist/changes-4.6.0.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dist/changes-4.6.0.md b/dist/changes-4.6.0.md index 009f8a12e03..805cec41338 100644 --- a/dist/changes-4.6.0.md +++ b/dist/changes-4.6.0.md @@ -44,7 +44,9 @@ C++ Support * Clang Code Model * Switched to Clang 5.0, adding support for C++17 * Implemented information tool tips, which improves type information - including resolution of `auto` types (QTCREATORBUG-11259) + including resolution of `auto` types (QTCREATORBUG-11259), template arguments + for template types, and the first or `\brief` paragraph of documentation + comments (QTCREATORBUG-4557) * Integrated Clang-Tidy and Clazy. Enable checks in Options > C++ > Code Model > Clang Code Model Warnings * Added separate highlighting for function definitions (QTCREATORBUG-16625) From 9f4c248fa908e40961cdc3229f7be27fa336260a Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 30 Jan 2018 14:44:15 +0100 Subject: [PATCH 44/59] Remove empty categories from change log Change-Id: I7593c0ad1469e85ebe0973843087438f85422a71 Reviewed-by: Leena Miettinen --- dist/changes-4.6.0.md | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/dist/changes-4.6.0.md b/dist/changes-4.6.0.md index 805cec41338..9f1db648bd9 100644 --- a/dist/changes-4.6.0.md +++ b/dist/changes-4.6.0.md @@ -31,10 +31,6 @@ All Projects * Added filtering to project kit setup page -QMake Projects - -CMake Projects - Qbs Projects * Added option to add library paths to dependencies (QTCREATORBUG-19274) @@ -55,14 +51,10 @@ QML Support * Added inline annotations for issues from code model -Python Support - Debugging * Split `Expressions` view from `Locals` view (QTCREATORBUG-19167) -QML Profiler - Qt Quick Designer * Added font and text properties from Qt 5.10 @@ -88,8 +80,6 @@ Test Integration * Google Test * Fixed detection of crashed tests (QTCREATORBUG-19565) -Beautifier - Model Editor * Added support for text alignment @@ -101,8 +91,6 @@ Model Editor * Added wizard for scratch models * Fixed issue with selecting items (QTCREATORBUG-18368) -SCXML Editor - Platform Specific Windows @@ -111,16 +99,10 @@ Windows memory analyzer * Fixed detection of CDB in non-default installation roots -macOS - Android * Fixed issues with GCC include directories in Clang code model -iOS - -Universal Windows Platform - Remote Linux * Fixed that remote application was not killed before deployment From 406f964993aae88d24a023d6d1b05dcfe70a38f5 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 30 Jan 2018 16:14:24 +0100 Subject: [PATCH 45/59] Debugger: Fix typo leading to wrong settings behavior Change-Id: I352346c5b1c644ccba46fd573e31f3f03877de26 Reviewed-by: Christian Stenger --- src/plugins/debugger/debuggeractions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp index e8653737999..ebdc77c9d02 100644 --- a/src/plugins/debugger/debuggeractions.cpp +++ b/src/plugins/debugger/debuggeractions.cpp @@ -530,7 +530,7 @@ DebuggerSettings::DebuggerSettings() insertItem(UseToolTipsInBreakpointsView, item); item = new SavedAction(this); - item->setSettingsKey(debugModeGroup, QLatin1String("UseToolTipsInBreakpointsView")); + item->setSettingsKey(debugModeGroup, QLatin1String("UseToolTipsInStackView")); item->setText(tr("Use Tooltips in Stack View when Debugging")); item->setToolTip(tr("