summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2017-08-17 17:29:25 +0200
committerEike Ziller <eike.ziller@qt.io>2017-08-17 17:29:25 +0200
commita0a42ff7bd862887bce281814f65179d88eb1de5 (patch)
treeb2182dcbbb1bef16fec1c600b8cae67e327e6ca8 /src
parentcf1edc1fb536287c1cb9760014c5dab9690bbf6a (diff)
parenta951448c4dceca637992ea29df832de190f22130 (diff)
downloadqt-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.qbs4
-rw-r--r--src/libs/qmljs/qmljsmodelmanagerinterface.cpp10
-rw-r--r--src/libs/qmljs/qmljsmodelmanagerinterface.h2
-rw-r--r--src/libs/utils/treemodel.cpp7
-rw-r--r--src/libs/utils/treemodel.h11
-rw-r--r--src/plugins/android/androiddebugsupport.cpp1
-rw-r--r--src/plugins/android/androidmanager.cpp4
-rw-r--r--src/plugins/android/androidrunner.cpp11
-rw-r--r--src/plugins/android/androidrunner.h5
-rw-r--r--src/plugins/android/androidtoolchain.cpp3
-rw-r--r--src/plugins/clangcodemodel/clangdiagnosticfilter.cpp22
-rw-r--r--src/plugins/debugger/lldb/lldbengine.cpp1
-rw-r--r--src/plugins/debugger/qml/qmlengine.cpp2
-rw-r--r--src/plugins/projectexplorer/projectmodels.cpp23
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerplugin.cpp5
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerplugin.h5
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerruncontrol.cpp2
-rw-r--r--src/plugins/qtsupport/exampleslistmodel.cpp1
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;
}