diff options
author | Eike Ziller <eike.ziller@qt.io> | 2017-08-17 17:29:25 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2017-08-17 17:29:25 +0200 |
commit | a0a42ff7bd862887bce281814f65179d88eb1de5 (patch) | |
tree | b2182dcbbb1bef16fec1c600b8cae67e327e6ca8 /src | |
parent | cf1edc1fb536287c1cb9760014c5dab9690bbf6a (diff) | |
parent | a951448c4dceca637992ea29df832de190f22130 (diff) | |
download | qt-creator-a0a42ff7bd862887bce281814f65179d88eb1de5.tar.gz |
Merge remote-tracking branch 'origin/4.4'
Conflicts:
src/plugins/debugger/gdb/gdbengine.cpp
Change-Id: I8a7c8ca07d6d6005f5d39b8f1477ebbc7a299fbf
Diffstat (limited to 'src')
-rw-r--r-- | src/app/app_version_header.qbs | 4 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsmodelmanagerinterface.cpp | 10 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsmodelmanagerinterface.h | 2 | ||||
-rw-r--r-- | src/libs/utils/treemodel.cpp | 7 | ||||
-rw-r--r-- | src/libs/utils/treemodel.h | 11 | ||||
-rw-r--r-- | src/plugins/android/androiddebugsupport.cpp | 1 | ||||
-rw-r--r-- | src/plugins/android/androidmanager.cpp | 4 | ||||
-rw-r--r-- | src/plugins/android/androidrunner.cpp | 11 | ||||
-rw-r--r-- | src/plugins/android/androidrunner.h | 5 | ||||
-rw-r--r-- | src/plugins/android/androidtoolchain.cpp | 3 | ||||
-rw-r--r-- | src/plugins/clangcodemodel/clangdiagnosticfilter.cpp | 22 | ||||
-rw-r--r-- | src/plugins/debugger/lldb/lldbengine.cpp | 1 | ||||
-rw-r--r-- | src/plugins/debugger/qml/qmlengine.cpp | 2 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectmodels.cpp | 23 | ||||
-rw-r--r-- | src/plugins/qmlprofiler/qmlprofilerplugin.cpp | 5 | ||||
-rw-r--r-- | src/plugins/qmlprofiler/qmlprofilerplugin.h | 5 | ||||
-rw-r--r-- | src/plugins/qmlprofiler/qmlprofilerruncontrol.cpp | 2 | ||||
-rw-r--r-- | src/plugins/qtsupport/exampleslistmodel.cpp | 1 |
18 files changed, 88 insertions, 31 deletions
diff --git a/src/app/app_version_header.qbs b/src/app/app_version_header.qbs index e6903d6cc5..fd55ba00c5 100644 --- a/src/app/app_version_header.qbs +++ b/src/app/app_version_header.qbs @@ -42,8 +42,8 @@ Product { + product.moduleProperty("qtc", "ide_version_minor") + "\n"); content = content.replace(/(\n#define IDE_VERSION_RELEASE) .+\n/, "$1 " + product.moduleProperty("qtc", "ide_version_release") + "\n"); - content = content.replace(/(\n#define IDE_COPYRIGHT_YEAR) .+\n/, "$1 " - + product.moduleProperty("qtc", "qtcreator_copyright_year") + "\n"); + content = content.replace("$${QTCREATOR_COPYRIGHT_YEAR}", + product.moduleProperty("qtc", "qtcreator_copyright_year")); file = new TextFile(output.filePath, TextFile.WriteOnly); file.truncate(); file.write(content); diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp index e5506224bf..fbd2339105 100644 --- a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp +++ b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp @@ -1295,13 +1295,13 @@ bool rescanExports(const QString &fileName, FindExportedCppTypes &finder, return hasNewInfo; } -void ModelManagerInterface::updateCppQmlTypes(QFutureInterface<void> &interface, +void ModelManagerInterface::updateCppQmlTypes(QFutureInterface<void> &futureInterface, ModelManagerInterface *qmlModelManager, CPlusPlus::Snapshot snapshot, QHash<QString, QPair<CPlusPlus::Document::Ptr, bool> > documents) { - interface.setProgressRange(0, documents.size()); - interface.setProgressValue(0); + futureInterface.setProgressRange(0, documents.size()); + futureInterface.setProgressValue(0); CppDataHash newData; QHash<QString, QList<CPlusPlus::Document::Ptr> > newDeclarations; @@ -1316,9 +1316,9 @@ void ModelManagerInterface::updateCppQmlTypes(QFutureInterface<void> &interface, bool hasNewInfo = false; typedef QPair<CPlusPlus::Document::Ptr, bool> DocScanPair; foreach (const DocScanPair &pair, documents) { - if (interface.isCanceled()) + if (futureInterface.isCanceled()) return; - interface.setProgressValue(interface.progressValue() + 1); + futureInterface.setProgressValue(futureInterface.progressValue() + 1); CPlusPlus::Document::Ptr doc = pair.first; const bool scan = pair.second; diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.h b/src/libs/qmljs/qmljsmodelmanagerinterface.h index 98174de4f9..c86177d487 100644 --- a/src/libs/qmljs/qmljsmodelmanagerinterface.h +++ b/src/libs/qmljs/qmljsmodelmanagerinterface.h @@ -242,7 +242,7 @@ protected: ModelManagerInterface *modelManager, QmlJS::Dialect mainLanguage, bool emitDocChangedOnDisk); - static void updateCppQmlTypes(QFutureInterface<void> &interface, + static void updateCppQmlTypes(QFutureInterface<void> &futureInterface, ModelManagerInterface *qmlModelManager, CPlusPlus::Snapshot snapshot, QHash<QString, QPair<CPlusPlus::Document::Ptr, bool> > documents); diff --git a/src/libs/utils/treemodel.cpp b/src/libs/utils/treemodel.cpp index b4684eedfe..2b94d56311 100644 --- a/src/libs/utils/treemodel.cpp +++ b/src/libs/utils/treemodel.cpp @@ -689,6 +689,13 @@ void TreeItem::insertChild(int pos, TreeItem *item) } } +void TreeItem::insertOrderedChild(TreeItem *item, + const std::function<bool (const TreeItem *, const TreeItem *)> &cmp) +{ + auto where = std::lower_bound(begin(), end(), item, cmp); + insertChild(int(where - begin()), item); +} + void TreeItem::removeChildAt(int pos) { QTC_ASSERT(0 <= pos && pos < m_children.count(), return); diff --git a/src/libs/utils/treemodel.h b/src/libs/utils/treemodel.h index 8e0c4407d2..63818b27c2 100644 --- a/src/libs/utils/treemodel.h +++ b/src/libs/utils/treemodel.h @@ -54,6 +54,9 @@ public: void prependChild(TreeItem *item); void appendChild(TreeItem *item); void insertChild(int pos, TreeItem *item); + void insertOrderedChild(TreeItem *item, + const std::function<bool(const TreeItem *, const TreeItem *)> &cmp); + void removeChildAt(int pos); void removeChildren(); void sortChildren(const std::function<bool(const TreeItem *, const TreeItem *)> &cmp); @@ -135,6 +138,14 @@ public: ParentType *parent() const { return static_cast<ParentType *>(TreeItem::parent()); } + + void insertOrderedChild(ChildType *item, const std::function<bool(const ChildType *, const ChildType *)> &cmp) + { + const auto cmp0 = [cmp](const TreeItem *lhs, const TreeItem *rhs) { + return cmp(static_cast<const ChildType *>(lhs), static_cast<const ChildType *>(rhs)); + }; + TreeItem::insertOrderedChild(item, cmp0); + } }; class QTCREATOR_UTILS_EXPORT StaticTreeItem : public TreeItem diff --git a/src/plugins/android/androiddebugsupport.cpp b/src/plugins/android/androiddebugsupport.cpp index 92b80cf2cf..5bc850fe64 100644 --- a/src/plugins/android/androiddebugsupport.cpp +++ b/src/plugins/android/androiddebugsupport.cpp @@ -133,6 +133,7 @@ void AndroidDebugSupport::start() .appendPath(toNdkArch(AndroidManager::targetArch(target))).toString(); } if (isQmlDebugging()) { + params.qmlServer.host = m_runner->qmlServerHost(); params.qmlServer.port = m_runner->qmlServerPort(); //TODO: Not sure if these are the right paths. QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(kit); diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index ee57399060..54f2bdd482 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -241,7 +241,7 @@ void AndroidManager::setDeviceSerialNumber(ProjectExplorer::Target *target, cons QPair<int, int> AndroidManager::apiLevelRange() { - return qMakePair(9, 23); + return qMakePair(9, 26); } QString AndroidManager::androidNameForApiLevel(int x) @@ -291,6 +291,8 @@ QString AndroidManager::androidNameForApiLevel(int x) return QLatin1String("Android 7.0"); case 25: return QLatin1String("Android 7.1"); + case 26: + return QLatin1String("Android 8.0"); default: return tr("Unknown Android version. API Level: %1").arg(QString::number(x)); } diff --git a/src/plugins/android/androidrunner.cpp b/src/plugins/android/androidrunner.cpp index 8dcd133369..04d87284af 100644 --- a/src/plugins/android/androidrunner.cpp +++ b/src/plugins/android/androidrunner.cpp @@ -226,7 +226,8 @@ public: Utils::Port localGdbServerPort() const { return m_localGdbServerPort; } signals: - void remoteProcessStarted(Utils::Port gdbServerPort, Utils::Port qmlServerPort, int pid); + void remoteProcessStarted(Utils::Port gdbServerPort, Utils::Port qmlServerPort, + QString qmlServerHost, int pid); void remoteProcessFinished(const QString &errString = QString()); void remoteOutput(const QString &output); @@ -257,6 +258,7 @@ private: bool m_useCppDebugger = false; QmlDebug::QmlDebugServicesPreset m_qmlDebugServices; Utils::Port m_localGdbServerPort; // Local end of forwarded debug socket. + QString m_qmlServerHost; Utils::Port m_qmlPort; QString m_pingFile; QString m_pongFile; @@ -295,6 +297,7 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunControl *runControl, const AndroidRu QTC_ASSERT(server.listen(QHostAddress::LocalHost) || server.listen(QHostAddress::LocalHostIPv6), qDebug() << tr("No free ports available on host for QML debugging.")); + m_qmlServerHost = server.serverAddress().toString(); m_qmlPort = Utils::Port(server.serverPort()); } else { m_qmlPort = Utils::Port(); @@ -638,7 +641,7 @@ void AndroidRunnerWorker::onProcessIdChanged(qint64 pid) } else { // In debugging cases this will be funneled to the engine to actually start // and attach gdb. Afterwards this ends up in handleRemoteDebuggerRunning() below. - emit remoteProcessStarted(m_localGdbServerPort, m_qmlPort, m_processPID); + emit remoteProcessStarted(m_localGdbServerPort, m_qmlPort, m_qmlServerHost, m_processPID); logcatReadStandardOutput(); QTC_ASSERT(!m_psIsAlive, /**/); m_psIsAlive.reset(new QProcess); @@ -782,10 +785,12 @@ void AndroidRunner::remoteErrorOutput(const QString &output) m_outputParser.processOutput(output); } -void AndroidRunner::handleRemoteProcessStarted(Utils::Port gdbServerPort, Utils::Port qmlServerPort, int pid) +void AndroidRunner::handleRemoteProcessStarted(Utils::Port gdbServerPort, Utils::Port qmlServerPort, + QString qmlServerHost, int pid) { m_pid = ProcessHandle(pid); m_gdbServerPort = gdbServerPort; + m_qmlServerHost = qmlServerHost; m_qmlServerPort = qmlServerPort; reportStarted(); } diff --git a/src/plugins/android/androidrunner.h b/src/plugins/android/androidrunner.h index 2efd52299c..6215cc49a5 100644 --- a/src/plugins/android/androidrunner.h +++ b/src/plugins/android/androidrunner.h @@ -57,6 +57,7 @@ public: const AndroidRunnable &runnable() const { return m_androidRunnable; } Utils::Port gdbServerPort() const { return m_gdbServerPort; } + QString qmlServerHost() const { return m_qmlServerHost; } Utils::Port qmlServerPort() const { return m_qmlServerPort; } Utils::ProcessHandle pid() const { return m_pid; } @@ -76,7 +77,8 @@ private: void remoteOutput(const QString &output); void remoteErrorOutput(const QString &output); void gotRemoteOutput(const QString &output); - void handleRemoteProcessStarted(Utils::Port gdbServerPort, Utils::Port qmlServerPort, int pid); + void handleRemoteProcessStarted(Utils::Port gdbServerPort, Utils::Port qmlServerPort, + QString qmlServerHost, int pid); void handleRemoteProcessFinished(const QString &errString = QString()); void checkAVD(); void launchAVD(); @@ -88,6 +90,7 @@ private: QScopedPointer<AndroidRunnerWorker> m_worker; QPointer<ProjectExplorer::Target> m_target; Utils::Port m_gdbServerPort; + QString m_qmlServerHost; Utils::Port m_qmlServerPort; Utils::ProcessHandle m_pid; QmlDebug::QmlOutputParser m_outputParser; diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp index c8223dd81a..bb3b10ee92 100644 --- a/src/plugins/android/androidtoolchain.cpp +++ b/src/plugins/android/androidtoolchain.cpp @@ -203,7 +203,8 @@ bool AndroidToolChain::fromMap(const QVariantMap &data) FileNameList AndroidToolChain::suggestedMkspecList() const { - return FileNameList()<< FileName::fromLatin1("android-g++"); + return FileNameList() << FileName::fromLatin1("android-g++") + << FileName::fromLatin1("android-clang"); } QString AndroidToolChain::makeCommand(const Environment &env) const diff --git a/src/plugins/clangcodemodel/clangdiagnosticfilter.cpp b/src/plugins/clangcodemodel/clangdiagnosticfilter.cpp index 2a7d92b987..78126eea69 100644 --- a/src/plugins/clangcodemodel/clangdiagnosticfilter.cpp +++ b/src/plugins/clangcodemodel/clangdiagnosticfilter.cpp @@ -45,8 +45,8 @@ bool isWarningOrNote(ClangBackEnd::DiagnosticSeverity severity) Q_UNREACHABLE(); } -bool isBlackListedDiagnostic(const ClangBackEnd::DiagnosticContainer &diagnostic, - bool isHeaderFile) +bool isBlackListedHeaderDiagnostic(const ClangBackEnd::DiagnosticContainer &diagnostic, + bool isHeaderFile) { static const Utf8StringVector blackList{ Utf8StringLiteral("warning: #pragma once in main file"), @@ -56,6 +56,21 @@ bool isBlackListedDiagnostic(const ClangBackEnd::DiagnosticContainer &diagnostic return isHeaderFile && blackList.contains(diagnostic.text()); } +bool isBlackListedQtDiagnostic(const ClangBackEnd::DiagnosticContainer &diagnostic) +{ + static const Utf8StringVector blackList{ + // From Q_OBJECT: + Utf8StringLiteral("warning: " + "'metaObject' overrides a member function but is not marked 'override'"), + Utf8StringLiteral("warning: " + "'qt_metacast' overrides a member function but is not marked 'override'"), + Utf8StringLiteral("warning: " + "'qt_metacall' overrides a member function but is not marked 'override'"), + }; + + return blackList.contains(diagnostic.text()); +} + template <class Condition> QVector<ClangBackEnd::DiagnosticContainer> filterDiagnostics(const QVector<ClangBackEnd::DiagnosticContainer> &diagnostics, @@ -97,7 +112,8 @@ void ClangDiagnosticFilter::filterDocumentRelatedWarnings( const auto isLocalWarning = [this, isHeaderFile] (const ClangBackEnd::DiagnosticContainer &diagnostic) { return isWarningOrNote(diagnostic.severity()) - && !isBlackListedDiagnostic(diagnostic, isHeaderFile) + && !isBlackListedHeaderDiagnostic(diagnostic, isHeaderFile) + && !isBlackListedQtDiagnostic(diagnostic) && diagnostic.location().filePath() == m_filePath; }; diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index 96f848fb19..a844d98248 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -1019,6 +1019,7 @@ void LldbEngine::fetchDisassembler(DisassemblerAgent *agent) dl.data = line["rawdata"].data(); if (!dl.data.isEmpty()) dl.data += QString(30 - dl.data.size(), QLatin1Char(' ')); + dl.data += fromHex(line["hexdata"].data()); dl.data += line["data"].data(); dl.offset = line["offset"].toInt(); dl.lineNumber = line["line"].toInt(); diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index 10e6d4f3b2..4dc8280851 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -427,7 +427,7 @@ void QmlEngine::beginConnection(Utils::Port port) QString host = runParameters().qmlServer.host; // Use localhost as default if (host.isEmpty()) - host = "localhost"; + host = QHostAddress(QHostAddress::LocalHost).toString(); /* * Let plugin-specific code override the port printed by the application. This is necessary diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp index c36f5c0297..74a600eb0a 100644 --- a/src/plugins/projectexplorer/projectmodels.cpp +++ b/src/plugins/projectexplorer/projectmodels.cpp @@ -198,6 +198,16 @@ bool FlatModel::setData(const QModelIndex &index, const QVariant &value, int rol return true; } +static bool compareProjectNames(const WrapperNode *lhs, const WrapperNode *rhs) +{ + Node *p1 = lhs->m_node; + Node *p2 = rhs->m_node; + const int displayNameResult = caseFriendlyCompare(p1->displayName(), p2->displayName()); + if (displayNameResult != 0) + return displayNameResult < 0; + return p1 < p2; // sort by pointer value +} + void FlatModel::addOrRebuildProjectModel(Project *project) { WrapperNode *container = nodeForProject(project); @@ -205,7 +215,7 @@ void FlatModel::addOrRebuildProjectModel(Project *project) container->removeChildren(); } else { container = new WrapperNode(project->containerNode()); - rootItem()->appendChild(container); + rootItem()->insertOrderedChild(container, &compareProjectNames); } QSet<Node *> seen; @@ -260,16 +270,7 @@ void FlatModel::updateSubtree(FolderNode *node) void FlatModel::rebuildModel() { - QList<Project *> projects = SessionManager::projects(); - QTC_CHECK(projects.size() == rootItem()->childCount()); - - Utils::sort(projects, [](Project *p1, Project *p2) { - const int displayNameResult = caseFriendlyCompare(p1->displayName(), p2->displayName()); - if (displayNameResult != 0) - return displayNameResult < 0; - return p1 < p2; // sort by pointer value - }); - + const QList<Project *> projects = SessionManager::projects(); for (Project *project : projects) addOrRebuildProjectModel(project); } diff --git a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp index 78fe833f59..bcbb55c472 100644 --- a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp @@ -90,7 +90,7 @@ bool QmlProfilerPlugin::initialize(const QStringList &arguments, QString *errorS void QmlProfilerPlugin::extensionsInitialized() { - (void) new QmlProfilerTool(this); + m_profilerTool = new QmlProfilerTool(this); addAutoReleasedObject(new QmlProfilerOptionsPage); @@ -112,6 +112,9 @@ void QmlProfilerPlugin::extensionsInitialized() ExtensionSystem::IPlugin::ShutdownFlag QmlProfilerPlugin::aboutToShutdown() { + delete m_profilerTool; + m_profilerTool = nullptr; + // Save settings. // Disconnect from signals that are not needed during shutdown // Hide UI (if you add UI that is not in the main window directly) diff --git a/src/plugins/qmlprofiler/qmlprofilerplugin.h b/src/plugins/qmlprofiler/qmlprofilerplugin.h index 3175fa917a..88b764e95a 100644 --- a/src/plugins/qmlprofiler/qmlprofilerplugin.h +++ b/src/plugins/qmlprofiler/qmlprofilerplugin.h @@ -34,6 +34,8 @@ namespace QmlProfiler { namespace Internal { +class QmlProfilerTool; + class QmlProfilerPlugin : public ExtensionSystem::IPlugin { Q_OBJECT @@ -47,6 +49,9 @@ public: static QmlProfilerSettings *globalSettings(); QList<QObject *> createTestObjects() const override; + +private: + QmlProfilerTool *m_profilerTool = nullptr; }; } // namespace Internal diff --git a/src/plugins/qmlprofiler/qmlprofilerruncontrol.cpp b/src/plugins/qmlprofiler/qmlprofilerruncontrol.cpp index 90608cbb1f..949eab3176 100644 --- a/src/plugins/qmlprofiler/qmlprofilerruncontrol.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerruncontrol.cpp @@ -64,7 +64,7 @@ static QString QmlServerUrl = "QmlServerUrl"; class QmlProfilerRunner::QmlProfilerRunnerPrivate { public: - QmlProfilerStateManager *m_profilerState = 0; + QPointer<QmlProfilerStateManager> m_profilerState; }; // diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp index 01a8b1e0a2..a9e4c208ac 100644 --- a/src/plugins/qtsupport/exampleslistmodel.cpp +++ b/src/plugins/qtsupport/exampleslistmodel.cpp @@ -709,6 +709,7 @@ void ExamplesListModelFilter::timerEvent(QTimerEvent *timerEvent) { if (m_timerId == timerEvent->timerId()) { invalidateFilter(); + emit layoutChanged(); killTimer(m_timerId); m_timerId = 0; } |