aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2018-06-06 09:57:01 +0200
committerEike Ziller <eike.ziller@qt.io>2018-06-06 09:57:01 +0200
commit3f356f31bc311e5eeacee7e1ac01ed7d2f9943de (patch)
treee52f5b67c8d60c68015c8d99252e01fc7e54dbda
parent0fbb2839f92b001414d1eed2ae2627cf421fd34f (diff)
parent5921376573bf57b09fa89fa788b94f2a5a1fdda9 (diff)
Merge remote-tracking branch 'origin/4.7'
Conflicts: qbs/modules/qtc/qtc.qbs qtcreator.pri Change-Id: I3d42bd52fb7b977cfdfad83092fb6f6eac974e24
-rw-r--r--doc/images/qtcreator-filesystem-view.pngbin18128 -> 19139 bytes
-rw-r--r--doc/src/analyze/cpu-usage-analyzer.qdoc7
-rw-r--r--doc/src/howto/creator-ui.qdoc11
-rw-r--r--src/libs/3rdparty/botan/botan.cpp2
-rw-r--r--src/libs/3rdparty/cplusplus/Name.h2
-rw-r--r--src/libs/3rdparty/cplusplus/Names.h2
-rw-r--r--src/libs/clangsupport/clangcodemodelconnectionclient.cpp6
-rw-r--r--src/libs/clangsupport/processcreator.cpp9
-rw-r--r--src/libs/clangsupport/processcreator.h3
-rw-r--r--src/libs/glsl/glslengine.h2
-rw-r--r--src/libs/qtcreatorcdbext/containers.cpp2
-rw-r--r--src/libs/qtcreatorcdbext/stringutils.h2
-rw-r--r--src/libs/qtcreatorcdbext/symbolgroup.cpp2
-rw-r--r--src/libs/utils/fileutils.cpp2
-rw-r--r--src/libs/utils/fileutils.h8
-rw-r--r--src/libs/utils/smallstringview.h4
-rw-r--r--src/plugins/clangtools/clangtidyclazyruncontrol.cpp3
-rw-r--r--src/plugins/clangtools/clangtoolruncontrol.cpp16
-rw-r--r--src/plugins/clangtools/clangtoolruncontrol.h5
-rw-r--r--src/plugins/clangtools/clangtoolrunner.cpp24
-rw-r--r--src/plugins/clangtools/clangtoolrunner.h6
-rw-r--r--src/plugins/clangtools/clangtoolslogfilereader.cpp2
-rw-r--r--src/plugins/coreplugin/dialogs/filepropertiesdialog.cpp4
-rw-r--r--src/plugins/coreplugin/variablechooser.cpp4
-rw-r--r--src/plugins/cpptools/cppfindreferences.cpp14
-rw-r--r--src/plugins/debugger/gdb/gdbengine.cpp2
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp3
-rw-r--r--src/plugins/qmljseditor/qmljsfindreferences.cpp19
-rw-r--r--src/plugins/qtsupport/gettingstartedwelcomepage.cpp2
-rw-r--r--src/plugins/texteditor/behaviorsettingswidget.cpp2
-rw-r--r--src/plugins/texteditor/generichighlighter/rule.cpp8
-rw-r--r--src/tools/clangbackend/clangbackendmain.cpp1
-rw-r--r--src/tools/clangbackend/source/clangasyncjob.h4
-rw-r--r--tests/system/shared/clang.py2
-rw-r--r--tests/system/suite_APTW/tst_APTW01/test.py4
35 files changed, 117 insertions, 72 deletions
diff --git a/doc/images/qtcreator-filesystem-view.png b/doc/images/qtcreator-filesystem-view.png
index cd730fc925..407f39a2b2 100644
--- a/doc/images/qtcreator-filesystem-view.png
+++ b/doc/images/qtcreator-filesystem-view.png
Binary files differ
diff --git a/doc/src/analyze/cpu-usage-analyzer.qdoc b/doc/src/analyze/cpu-usage-analyzer.qdoc
index a43d8ac1dc..3a6019295d 100644
--- a/doc/src/analyze/cpu-usage-analyzer.qdoc
+++ b/doc/src/analyze/cpu-usage-analyzer.qdoc
@@ -405,6 +405,13 @@
The CPU Usage Analyzer might fail to record data for the following reasons:
\list 1
+ \li Perf events may be globally disabled on your system. The
+ preconfigured Boot to Qt images come with perf events enabled. For
+ a custom configuration you need to make sure that the file
+ \c {/proc/sys/kernel/perf_event_paranoid} contains a value smaller
+ than \c {2}. For maximum flexibility in recording traces you can
+ set the value to \c {-1}. This allows any user to record any kind
+ of trace, even using raw kernel trace points.
\li The connection between the target device and the host may not be
fast enough to transfer the data produced by Perf. Try modifying
the values of the \uicontrol {Stack snapshot size} or
diff --git a/doc/src/howto/creator-ui.qdoc b/doc/src/howto/creator-ui.qdoc
index f436ae54eb..268a5d75a6 100644
--- a/doc/src/howto/creator-ui.qdoc
+++ b/doc/src/howto/creator-ui.qdoc
@@ -219,7 +219,11 @@
\li To stop synchronizing the position in the project tree with the file
currently opened in the editor, deselect \inlineimage linkicon.png
- (\uicontrol {Synchronize with Editor}).
+ (\uicontrol {Synchronize with Editor}). You can specify a keyboard
+ shortcut to use when synchronization is needed. Select
+ \uicontrol Tools > \uicontrol Options > \uicontrol Environment >
+ \uicontrol Keyboard, and then search for
+ \uicontrol {Show in Explorer}.
\li To see the absolute path of a file, move the mouse pointer over the
file name.
@@ -263,7 +267,10 @@
\image qtcreator-filesystem-view.png
By default, the contents of the directory that contains the file currently
- active in the editor are displayed. The path to the active file is displayed
+ active in the editor are displayed. To stop the synchronization, delesect
+ the \uicontrol {Synchronize Root Directory with Editor} button.
+
+ The path to the active file is displayed
as bread crumbs. You can move to any directory along the path by clicking
it. To hide the bread crumbs, select \inlineimage filtericon.png
(\uicontrol Options) and then deselect the \uicontrol {Show Bread Crumbs}
diff --git a/src/libs/3rdparty/botan/botan.cpp b/src/libs/3rdparty/botan/botan.cpp
index 87736d5fe3..0d912062b3 100644
--- a/src/libs/3rdparty/botan/botan.cpp
+++ b/src/libs/3rdparty/botan/botan.cpp
@@ -465,7 +465,7 @@ inline V search_map(const std::map<K, V>& mapping,
* Function adaptor for delete operation
*/
template<class T>
-class del_fun : public std::unary_function<T, void>
+class del_fun
{
public:
void operator()(T* ptr) { delete ptr; }
diff --git a/src/libs/3rdparty/cplusplus/Name.h b/src/libs/3rdparty/cplusplus/Name.h
index 200ccac75d..460f0bca11 100644
--- a/src/libs/3rdparty/cplusplus/Name.h
+++ b/src/libs/3rdparty/cplusplus/Name.h
@@ -59,7 +59,7 @@ public:
bool match(const Name *other, Matcher *matcher = 0) const;
public:
- struct Compare: std::binary_function<const Name *, const Name *, bool> {
+ struct Compare {
bool operator()(const Name *name, const Name *other) const;
};
diff --git a/src/libs/3rdparty/cplusplus/Names.h b/src/libs/3rdparty/cplusplus/Names.h
index 41f3e761b4..b8d090da2f 100644
--- a/src/libs/3rdparty/cplusplus/Names.h
+++ b/src/libs/3rdparty/cplusplus/Names.h
@@ -101,7 +101,7 @@ public:
bool isSpecialization() const { return _isSpecialization; }
// Comparator needed to distinguish between two different TemplateNameId(e.g.:used in std::map)
- struct Compare: std::binary_function<const TemplateNameId *, const TemplateNameId *, bool> {
+ struct Compare {
bool operator()(const TemplateNameId *name, const TemplateNameId *other) const;
};
diff --git a/src/libs/clangsupport/clangcodemodelconnectionclient.cpp b/src/libs/clangsupport/clangcodemodelconnectionclient.cpp
index 1938d06353..56186e24dc 100644
--- a/src/libs/clangsupport/clangcodemodelconnectionclient.cpp
+++ b/src/libs/clangsupport/clangcodemodelconnectionclient.cpp
@@ -25,6 +25,7 @@
#include "clangcodemodelconnectionclient.h"
+#include <utils/environment.h>
#include <utils/temporarydirectory.h>
#include <QCoreApplication>
@@ -50,6 +51,11 @@ ClangCodeModelConnectionClient::ClangCodeModelConnectionClient(
m_processCreator.setTemporaryDirectoryPattern("clangbackend-XXXXXX");
m_processCreator.setArguments({connectionName()});
+ Utils::Environment environment;
+ environment.set(QStringLiteral("LIBCLANG_NOTHREADS"), QString());
+ environment.set(QStringLiteral("LIBCLANG_DISABLE_CRASH_RECOVERY"), QString());
+ m_processCreator.setEnvironment(environment);
+
stdErrPrefixer().setPrefix("clangbackend.stderr: ");
stdOutPrefixer().setPrefix("clangbackend.stdout: ");
}
diff --git a/src/libs/clangsupport/processcreator.cpp b/src/libs/clangsupport/processcreator.cpp
index dfc7f56d9f..22b52793e3 100644
--- a/src/libs/clangsupport/processcreator.cpp
+++ b/src/libs/clangsupport/processcreator.cpp
@@ -56,6 +56,11 @@ void ProcessCreator::setArguments(const QStringList &arguments)
m_arguments = arguments;
}
+void ProcessCreator::setEnvironment(const Utils::Environment &environment)
+{
+ m_environment = environment;
+}
+
std::future<QProcessUniquePointer> ProcessCreator::createProcess() const
{
return std::async(std::launch::async, [&] {
@@ -167,6 +172,10 @@ QProcessEnvironment ProcessCreator::processEnvironment() const
processEnvironment.insert("TEMP", temporaryDirectoryPath);
}
+ const Utils::Environment &env = m_environment;
+ for (auto it = env.constBegin(); it != env.constEnd(); ++it)
+ processEnvironment.insert(it.key(), it.value());
+
return processEnvironment;
}
diff --git a/src/libs/clangsupport/processcreator.h b/src/libs/clangsupport/processcreator.h
index 9742992175..928857319b 100644
--- a/src/libs/clangsupport/processcreator.h
+++ b/src/libs/clangsupport/processcreator.h
@@ -29,6 +29,7 @@
#include "processhandle.h"
+#include <utils/environment.h>
#include <utils/temporarydirectory.h>
#include <QStringList>
@@ -51,6 +52,7 @@ public:
void setTemporaryDirectoryPattern(const QString &temporaryDirectoryPattern);
void setProcessPath(const QString &m_processPath);
void setArguments(const QStringList &m_arguments);
+ void setEnvironment(const Utils::Environment &environment);
void setObserver(QObject *m_observer);
std::future<QProcessUniquePointer> createProcess() const;
@@ -72,6 +74,7 @@ private:
QString m_processPath;
QString m_temporaryDirectoryPattern;
QStringList m_arguments;
+ Utils::Environment m_environment;
QObject *m_observer = nullptr;
};
diff --git a/src/libs/glsl/glslengine.h b/src/libs/glsl/glslengine.h
index 6b126111f6..7cf6e2d164 100644
--- a/src/libs/glsl/glslengine.h
+++ b/src/libs/glsl/glslengine.h
@@ -71,7 +71,7 @@ template <typename Type>
class TypeTable
{
public:
- struct Compare: std::binary_function<Type, Type, bool> {
+ struct Compare {
bool operator()(const Type &value, const Type &other) const {
return value.isLessThan(&other);
}
diff --git a/src/libs/qtcreatorcdbext/containers.cpp b/src/libs/qtcreatorcdbext/containers.cpp
index 1248fca175..128f450caf 100644
--- a/src/libs/qtcreatorcdbext/containers.cpp
+++ b/src/libs/qtcreatorcdbext/containers.cpp
@@ -245,7 +245,7 @@ AbstractSymbolGroupNodePtrVector linkedListChildList(SymbolGroupValue headNode,
}
// Helper function for linkedListChildList that returns a member by name
-class MemberByName : public std::unary_function<const SymbolGroupValue &, SymbolGroupValue>
+class MemberByName
{
public:
explicit MemberByName(const char *name) : m_name(name) {}
diff --git a/src/libs/qtcreatorcdbext/stringutils.h b/src/libs/qtcreatorcdbext/stringutils.h
index 89316d7e9a..e8297d44a4 100644
--- a/src/libs/qtcreatorcdbext/stringutils.h
+++ b/src/libs/qtcreatorcdbext/stringutils.h
@@ -52,7 +52,7 @@ void split(const std::string &s, char sep, Iterator it)
// A boolean predicate that can be used for grepping sequences
// of strings for a 'needle' substring.
-class SubStringPredicate : public std::unary_function<const std::string &, bool>
+class SubStringPredicate
{
public:
explicit SubStringPredicate(const char *needle) : m_needle(needle) {}
diff --git a/src/libs/qtcreatorcdbext/symbolgroup.cpp b/src/libs/qtcreatorcdbext/symbolgroup.cpp
index 5ea3e8930e..8404f0d77c 100644
--- a/src/libs/qtcreatorcdbext/symbolgroup.cpp
+++ b/src/libs/qtcreatorcdbext/symbolgroup.cpp
@@ -251,7 +251,7 @@ std::string SymbolGroup::debug(const std::string &iname,
typedef std::pair<unsigned, std::string> InamePathEntry;
-struct InamePathEntryLessThan : public std::binary_function<InamePathEntry, InamePathEntry, bool> {
+struct InamePathEntryLessThan {
bool operator()(const InamePathEntry &i1, const InamePathEntry& i2) const
{
if (i1.first < i2.first)
diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp
index 776d7aa66f..001dd70a05 100644
--- a/src/libs/utils/fileutils.cpp
+++ b/src/libs/utils/fileutils.cpp
@@ -801,7 +801,7 @@ QTextStream &operator<<(QTextStream &s, const FileName &fn)
#ifdef Q_OS_WIN
template <>
-void withNTFSPermissions(const std::function<void()> &task)
+void withNtfsPermissions(const std::function<void()> &task)
{
qt_ntfs_permission_lookup++;
task();
diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h
index b0068f4341..011069e118 100644
--- a/src/libs/utils/fileutils.h
+++ b/src/libs/utils/fileutils.h
@@ -51,7 +51,7 @@ class QWidget;
QTCREATOR_UTILS_EXPORT QDebug operator<<(QDebug dbg, const Utils::FileName &c);
-// for withNTFSPermissions
+// for withNtfsPermissions
#ifdef Q_OS_WIN
extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
#endif
@@ -135,7 +135,7 @@ public:
#ifdef Q_OS_WIN
template <typename T>
-T withNTFSPermissions(const std::function<T()> &task)
+T withNtfsPermissions(const std::function<T()> &task)
{
qt_ntfs_permission_lookup++;
T result = task();
@@ -144,12 +144,12 @@ T withNTFSPermissions(const std::function<T()> &task)
}
template <>
-QTCREATOR_UTILS_EXPORT void withNTFSPermissions(const std::function<void()> &task);
+QTCREATOR_UTILS_EXPORT void withNtfsPermissions(const std::function<void()> &task);
#else // Q_OS_WIN
template <typename T>
-T withNTFSPermissions(const std::function<T()> &task)
+T withNtfsPermissions(const std::function<T()> &task)
{
return task();
}
diff --git a/src/libs/utils/smallstringview.h b/src/libs/utils/smallstringview.h
index 0d8600e5de..7881500ce6 100644
--- a/src/libs/utils/smallstringview.h
+++ b/src/libs/utils/smallstringview.h
@@ -39,9 +39,7 @@ using enable_if_has_char_data_pointer = typename std::enable_if_t<
std::is_same<
std::remove_const_t<
std::remove_pointer_t<
- std::result_of_t<
- decltype(&String::data)(String)
- >
+ decltype(std::declval<const String>().data())
>
>, char>::value
, int>;
diff --git a/src/plugins/clangtools/clangtidyclazyruncontrol.cpp b/src/plugins/clangtools/clangtidyclazyruncontrol.cpp
index 12f158ae68..42a0af5cdf 100644
--- a/src/plugins/clangtools/clangtidyclazyruncontrol.cpp
+++ b/src/plugins/clangtools/clangtidyclazyruncontrol.cpp
@@ -48,11 +48,10 @@ ClangTidyClazyRunControl::ClangTidyClazyRunControl(
ClangToolRunner *ClangTidyClazyRunControl::createRunner()
{
QTC_ASSERT(!m_clangExecutable.isEmpty(), return 0);
- QTC_ASSERT(!m_clangLogFileDir.isEmpty(), return 0);
auto runner = new ClangTidyClazyRunner(m_diagnosticConfig,
m_clangExecutable,
- m_clangLogFileDir,
+ m_temporaryDir.path(),
m_environment,
this);
connect(runner, &ClangTidyClazyRunner::finishedWithSuccess,
diff --git a/src/plugins/clangtools/clangtoolruncontrol.cpp b/src/plugins/clangtools/clangtoolruncontrol.cpp
index 7e53fe3818..707ccccfa3 100644
--- a/src/plugins/clangtools/clangtoolruncontrol.cpp
+++ b/src/plugins/clangtools/clangtoolruncontrol.cpp
@@ -60,7 +60,6 @@
#include <utils/algorithm.h>
#include <utils/checkablemessagebox.h>
#include <utils/hostosinfo.h>
-#include <utils/temporarydirectory.h>
#include <utils/qtcprocess.h>
#include <QAction>
@@ -232,6 +231,7 @@ ClangToolRunControl::ClangToolRunControl(RunControl *runControl,
: RunWorker(runControl)
, m_projectBuilder(new ProjectBuilder(runControl, target->project(), this))
, m_clangExecutable(CppTools::clangExecutable(CLANG_BINDIR))
+ , m_temporaryDir("clangtools-XXXXXX")
, m_target(target)
, m_fileInfos(fileInfos)
{
@@ -299,9 +299,7 @@ void ClangToolRunControl::start()
Utils::NormalMessageFormat);
// Create log dir
- Utils::TemporaryDirectory temporaryDir("qtc-clangtools-XXXXXX");
- temporaryDir.setAutoRemove(false);
- if (!temporaryDir.isValid()) {
+ if (!m_temporaryDir.isValid()) {
const QString errorMessage
= toolName + tr(": Failed to create temporary dir, stop.");
appendMessage(errorMessage, Utils::ErrorMessageFormat);
@@ -310,7 +308,6 @@ void ClangToolRunControl::start()
reportFailure(errorMessage);
return;
}
- m_clangLogFileDir = temporaryDir.path();
// Collect files
const AnalyzeUnits unitsToProcess = unitsToAnalyze(CLANG_VERSION);
@@ -388,13 +385,15 @@ void ClangToolRunControl::analyzeNextFile()
Utils::StdOutFormat);
}
-void ClangToolRunControl::onRunnerFinishedWithSuccess(const QString &filePath,
- const QString &logFilePath)
+void ClangToolRunControl::onRunnerFinishedWithSuccess(const QString &filePath)
{
+ const QString logFilePath = qobject_cast<ClangToolRunner *>(sender())->logFilePath();
qCDebug(LOG) << "onRunnerFinishedWithSuccess:" << logFilePath;
QString errorMessage;
const QList<Diagnostic> diagnostics = tool()->read(filePath, logFilePath, &errorMessage);
+ QFile::remove(logFilePath); // Clean-up.
+
if (!errorMessage.isEmpty()) {
qCDebug(LOG) << "onRunnerFinishedWithSuccess: Error reading log file:" << errorMessage;
const QString filePath = qobject_cast<ClangToolRunner *>(sender())->filePath();
@@ -415,6 +414,9 @@ void ClangToolRunControl::onRunnerFinishedWithFailure(const QString &errorMessag
qCDebug(LOG).noquote() << "onRunnerFinishedWithFailure:"
<< errorMessage << '\n' << errorDetails;
+ // Even in the error case the log file was created, so clean it up here, too.
+ QFile::remove(qobject_cast<ClangToolRunner *>(sender())->logFilePath());
+
++m_filesNotAnalyzed;
m_success = false;
const QString filePath = qobject_cast<ClangToolRunner *>(sender())->filePath();
diff --git a/src/plugins/clangtools/clangtoolruncontrol.h b/src/plugins/clangtools/clangtoolruncontrol.h
index dae3521bc1..65f4bf35d0 100644
--- a/src/plugins/clangtools/clangtoolruncontrol.h
+++ b/src/plugins/clangtools/clangtoolruncontrol.h
@@ -30,6 +30,7 @@
#include <projectexplorer/runconfiguration.h>
#include <cpptools/projectinfo.h>
#include <utils/environment.h>
+#include <utils/temporarydirectory.h>
#include <QFutureInterface>
#include <QStringList>
@@ -69,7 +70,7 @@ protected:
virtual ClangToolRunner *createRunner() = 0;
- void onRunnerFinishedWithSuccess(const QString &filePath, const QString &logFilePath);
+ void onRunnerFinishedWithSuccess(const QString &filePath);
void onRunnerFinishedWithFailure(const QString &errorMessage, const QString &errorDetails);
private:
@@ -90,7 +91,7 @@ protected:
ProjectBuilder *m_projectBuilder;
Utils::Environment m_environment;
QString m_clangExecutable;
- QString m_clangLogFileDir;
+ Utils::TemporaryDirectory m_temporaryDir;
private:
QPointer<ProjectExplorer::Target> m_target;
diff --git a/src/plugins/clangtools/clangtoolrunner.cpp b/src/plugins/clangtools/clangtoolrunner.cpp
index 79b027a930..f7b48a1d6a 100644
--- a/src/plugins/clangtools/clangtoolrunner.cpp
+++ b/src/plugins/clangtools/clangtoolrunner.cpp
@@ -105,11 +105,6 @@ bool ClangToolRunner::run(const QString &filePath, const QStringList &compilerOp
return true;
}
-QString ClangToolRunner::filePath() const
-{
- return m_filePath;
-}
-
void ClangToolRunner::onProcessStarted()
{
emit started();
@@ -121,10 +116,11 @@ void ClangToolRunner::onProcessFinished(int exitCode, QProcess::ExitStatus exitS
if (exitCode == 0) {
qCDebug(LOG).noquote() << "Output:\n" << Utils::SynchronousProcess::normalizeNewlines(
QString::fromLocal8Bit(m_processOutput));
- emit finishedWithSuccess(m_filePath, actualLogFile());
+ emit finishedWithSuccess(m_filePath);
+ } else {
+ emit finishedWithFailure(finishedWithBadExitCode(m_name, exitCode),
+ processCommandlineAndOutput());
}
- else
- emit finishedWithFailure(finishedWithBadExitCode(m_name, exitCode), processCommandlineAndOutput());
} else { // == QProcess::CrashExit
emit finishedWithFailure(finishedDueToCrash(m_name), processCommandlineAndOutput());
}
@@ -147,7 +143,7 @@ QString ClangToolRunner::createLogFile(const QString &filePath) const
{
const QString fileName = QFileInfo(filePath).fileName();
const QString fileTemplate = m_clangLogFileDir
- + QLatin1String("/report-") + fileName + QLatin1String("-XXXXXX.plist");
+ + QLatin1String("/report-") + fileName + QLatin1String("-XXXXXX");
Utils::TemporaryFile temporaryFile("clangtools");
temporaryFile.setAutoRemove(false);
@@ -170,15 +166,5 @@ QString ClangToolRunner::processCommandlineAndOutput() const
QString::fromLocal8Bit(m_processOutput)));
}
-QString ClangToolRunner::actualLogFile() const
-{
- if (QFileInfo(m_logFile).size() == 0) {
- // Current clang-cl ignores -o, always putting the log file into the working directory.
- return m_clangLogFileDir + QLatin1Char('/') + QFileInfo(m_filePath).completeBaseName()
- + QLatin1String(".plist");
- }
- return m_logFile;
-}
-
} // namespace Internal
} // namespace ClangTools
diff --git a/src/plugins/clangtools/clangtoolrunner.h b/src/plugins/clangtools/clangtoolrunner.h
index 5473890dd8..01585a8ca7 100644
--- a/src/plugins/clangtools/clangtoolrunner.h
+++ b/src/plugins/clangtools/clangtoolrunner.h
@@ -52,11 +52,12 @@ public:
// (2) -o output-file
bool run(const QString &filePath, const QStringList &compilerOptions = QStringList());
- QString filePath() const;
+ QString filePath() const { return m_filePath; }
+ QString logFilePath() const { return m_logFile; }
signals:
void started();
- void finishedWithSuccess(const QString &filePath, const QString &logFilePath);
+ void finishedWithSuccess(const QString &filePath);
void finishedWithFailure(const QString &errorMessage, const QString &errorDetails);
protected:
@@ -71,7 +72,6 @@ private:
QString createLogFile(const QString &filePath) const;
QString processCommandlineAndOutput() const;
- QString actualLogFile() const;
protected:
QString m_logFile;
diff --git a/src/plugins/clangtools/clangtoolslogfilereader.cpp b/src/plugins/clangtools/clangtoolslogfilereader.cpp
index f0885c22fc..ecf4b8fbec 100644
--- a/src/plugins/clangtools/clangtoolslogfilereader.cpp
+++ b/src/plugins/clangtools/clangtoolslogfilereader.cpp
@@ -67,7 +67,7 @@ static bool checkFilePath(const QString &filePath, QString *errorMessage)
QList<Diagnostic> LogFileReader::readSerialized(const QString &filePath, const QString &logFilePath,
QString *errorMessage)
{
- if (!checkFilePath(filePath, errorMessage))
+ if (!checkFilePath(logFilePath, errorMessage))
return QList<Diagnostic>();
ClangSerializedDiagnosticsReader reader;
diff --git a/src/plugins/coreplugin/dialogs/filepropertiesdialog.cpp b/src/plugins/coreplugin/dialogs/filepropertiesdialog.cpp
index 45dd3eea40..e2fc4f1c6a 100644
--- a/src/plugins/coreplugin/dialogs/filepropertiesdialog.cpp
+++ b/src/plugins/coreplugin/dialogs/filepropertiesdialog.cpp
@@ -63,7 +63,7 @@ FilePropertiesDialog::~FilePropertiesDialog()
void FilePropertiesDialog::refresh()
{
- Utils::withNTFSPermissions<void>([this] {
+ Utils::withNtfsPermissions<void>([this] {
const QFileInfo fileInfo(m_fileName);
QLocale locale;
@@ -94,7 +94,7 @@ void FilePropertiesDialog::refresh()
void FilePropertiesDialog::setPermission(QFile::Permissions newPermissions, bool set)
{
- Utils::withNTFSPermissions<void>([this, newPermissions, set] {
+ Utils::withNtfsPermissions<void>([this, newPermissions, set] {
QFile::Permissions permissions = QFile::permissions(m_fileName);
if (set)
permissions |= newPermissions;
diff --git a/src/plugins/coreplugin/variablechooser.cpp b/src/plugins/coreplugin/variablechooser.cpp
index 5f675de7a3..186a74d6a3 100644
--- a/src/plugins/coreplugin/variablechooser.cpp
+++ b/src/plugins/coreplugin/variablechooser.cpp
@@ -203,9 +203,7 @@ public:
if (role == Qt::ToolTipRole) {
QString description = m_expander->variableDescription(m_variable);
- QString value;
- if (!m_expander->isPrefixVariable(m_variable))
- value = m_expander->value(m_variable).toHtmlEscaped();
+ const QString value = m_expander->value(m_variable).toHtmlEscaped();
if (!value.isEmpty())
description += QLatin1String("<p>") + VariableChooser::tr("Current Value: %1").arg(value);
return description;
diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index d2ae4e9f43..b017cb7e8f 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -168,7 +168,7 @@ static QList<QByteArray> fullIdForSymbol(CPlusPlus::Symbol *symbol)
namespace {
-class ProcessFile: public std::unary_function<QString, QList<CPlusPlus::Usage> >
+class ProcessFile
{
const WorkingCopy workingCopy;
const CPlusPlus::Snapshot snapshot;
@@ -177,6 +177,10 @@ class ProcessFile: public std::unary_function<QString, QList<CPlusPlus::Usage> >
QFutureInterface<CPlusPlus::Usage> *future;
public:
+ // needed by QtConcurrent
+ using argument_type = const Utils::FileName &;
+ using result_type = QList<CPlusPlus::Usage>;
+
ProcessFile(const WorkingCopy &workingCopy,
const CPlusPlus::Snapshot snapshot,
CPlusPlus::Document::Ptr symbolDocument,
@@ -230,7 +234,7 @@ public:
}
};
-class UpdateUI: public std::binary_function<QList<CPlusPlus::Usage> &, QList<CPlusPlus::Usage>, void>
+class UpdateUI
{
QFutureInterface<CPlusPlus::Usage> *future;
@@ -596,7 +600,7 @@ static void searchFinished(SearchResult *search, QFutureWatcher<CPlusPlus::Usage
namespace {
-class FindMacroUsesInFile: public std::unary_function<QString, QList<CPlusPlus::Usage> >
+class FindMacroUsesInFile
{
const WorkingCopy workingCopy;
const CPlusPlus::Snapshot snapshot;
@@ -604,6 +608,10 @@ class FindMacroUsesInFile: public std::unary_function<QString, QList<CPlusPlus::
QFutureInterface<CPlusPlus::Usage> *future;
public:
+ // needed by QtConcurrent
+ using argument_type = const Utils::FileName &;
+ using result_type = QList<CPlusPlus::Usage>;
+
FindMacroUsesInFile(const WorkingCopy &workingCopy,
const CPlusPlus::Snapshot snapshot,
const CPlusPlus::Macro &macro,
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index a6c773f18b..6e919e523e 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -4034,7 +4034,7 @@ void GdbEngine::handleDebugInfoLocation(const DebuggerResponse &response)
{
if (response.resultClass == ResultDone) {
const QString debugInfoLocation = runParameters().debugInfoLocation;
- if (QFile::exists(debugInfoLocation)) {
+ if (!debugInfoLocation.isEmpty() && QFile::exists(debugInfoLocation)) {
const QString curDebugInfoLocations = response.consoleStreamOutput.split('"').value(1);
QString cmd = "set debug-file-directory " + debugInfoLocation;
if (!curDebugInfoLocations.isEmpty())
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp
index 6ac07433a4..16c2e5f1b2 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp
@@ -508,7 +508,8 @@ QString PropertyEditorQmlBackend::fileFromUrl(const QUrl &url)
bool PropertyEditorQmlBackend::checkIfUrlExists(const QUrl &url)
{
- return QFileInfo::exists(fileFromUrl(url));
+ const QString &file = fileFromUrl(url);
+ return !file.isEmpty() && QFileInfo::exists(file);
}
void PropertyEditorQmlBackend::emitSelectionToBeChanged()
diff --git a/src/plugins/qmljseditor/qmljsfindreferences.cpp b/src/plugins/qmljseditor/qmljsfindreferences.cpp
index 7806d9c385..af2750de0c 100644
--- a/src/plugins/qmljseditor/qmljsfindreferences.cpp
+++ b/src/plugins/qmljseditor/qmljsfindreferences.cpp
@@ -683,7 +683,7 @@ static QString matchingLine(unsigned position, const QString &source)
return source.mid(start, end - start);
}
-class ProcessFile: public std::unary_function<QString, QList<FindReferences::Usage> >
+class ProcessFile
{
ContextPtr context;
typedef FindReferences::Usage Usage;
@@ -692,6 +692,10 @@ class ProcessFile: public std::unary_function<QString, QList<FindReferences::Usa
QFutureInterface<Usage> *future;
public:
+ // needed by QtConcurrent
+ using argument_type = const QString &;
+ using result_type = QList<Usage>;
+
ProcessFile(const ContextPtr &context,
QString name,
const ObjectValue *scope,
@@ -721,7 +725,7 @@ public:
}
};
-class SearchFileForType: public std::unary_function<QString, QList<FindReferences::Usage> >
+class SearchFileForType
{
ContextPtr context;
typedef FindReferences::Usage Usage;
@@ -730,6 +734,10 @@ class SearchFileForType: public std::unary_function<QString, QList<FindReference
QFutureInterface<Usage> *future;
public:
+ // needed by QtConcurrent
+ using argument_type = const QString &;
+ using result_type = QList<Usage>;
+
SearchFileForType(const ContextPtr &context,
QString name,
const ObjectValue *scope,
@@ -759,12 +767,17 @@ public:
}
};
-class UpdateUI: public std::binary_function<QList<FindReferences::Usage> &, QList<FindReferences::Usage>, void>
+class UpdateUI
{
typedef FindReferences::Usage Usage;
QFutureInterface<Usage> *future;
public:
+ // needed by QtConcurrent
+ using first_argument_type = QList<Usage> &;
+ using second_argument_type = const QList<Usage> &;
+ using result_type = void;
+
UpdateUI(QFutureInterface<Usage> *future): future(future) {}
void operator()(QList<Usage> &, const QList<Usage> &usages)
diff --git a/src/plugins/qtsupport/gettingstartedwelcomepage.cpp b/src/plugins/qtsupport/gettingstartedwelcomepage.cpp
index 0a71aca1e3..5e9b3dc076 100644
--- a/src/plugins/qtsupport/gettingstartedwelcomepage.cpp
+++ b/src/plugins/qtsupport/gettingstartedwelcomepage.cpp
@@ -201,7 +201,7 @@ void ExamplesWelcomePage::openProject(const ExampleItem &item)
// If the Qt is a distro Qt on Linux, it will not be writable, hence compilation will fail
// Same if it is installed in non-writable location for other reasons
- const bool needsCopy = withNTFSPermissions<bool>([proFileInfo] {
+ const bool needsCopy = withNtfsPermissions<bool>([proFileInfo] {
QFileInfo pathInfo(proFileInfo.path());
return !proFileInfo.isWritable()
|| !pathInfo.isWritable() /* path of .pro file */
diff --git a/src/plugins/texteditor/behaviorsettingswidget.cpp b/src/plugins/texteditor/behaviorsettingswidget.cpp
index 718ea5e6e9..65bb8d5717 100644
--- a/src/plugins/texteditor/behaviorsettingswidget.cpp
+++ b/src/plugins/texteditor/behaviorsettingswidget.cpp
@@ -59,7 +59,7 @@ BehaviorSettingsWidget::BehaviorSettingsWidget(QWidget *parent)
QList<int> mibs = QTextCodec::availableMibs();
Utils::sort(mibs);
QList<int>::iterator firstNonNegative =
- std::find_if(mibs.begin(), mibs.end(), std::bind2nd(std::greater_equal<int>(), 0));
+ std::find_if(mibs.begin(), mibs.end(), [](int n) { return n >=0; });
if (firstNonNegative != mibs.end())
std::rotate(mibs.begin(), firstNonNegative, mibs.end());
foreach (int mib, mibs) {
diff --git a/src/plugins/texteditor/generichighlighter/rule.cpp b/src/plugins/texteditor/generichighlighter/rule.cpp
index 29be2fe6a3..701c6ac459 100644
--- a/src/plugins/texteditor/generichighlighter/rule.cpp
+++ b/src/plugins/texteditor/generichighlighter/rule.cpp
@@ -144,7 +144,9 @@ bool Rule::charPredicateMatchSucceed(const QString &text,
ProgressData *progress,
bool (QChar::* predicate)() const) const
{
- return predicateMatchSucceed(text, length, progress, std::mem_fun_ref(predicate));
+ return predicateMatchSucceed(text, length, progress, [predicate](const QChar &c) {
+ return (c.*predicate)();
+ });
}
bool Rule::charPredicateMatchSucceed(const QString &text,
@@ -152,7 +154,9 @@ bool Rule::charPredicateMatchSucceed(const QString &text,
ProgressData *progress,
bool (*predicate)(const QChar &)) const
{
- return predicateMatchSucceed(text, length, progress, std::ptr_fun(predicate));
+ return predicateMatchSucceed(text, length, progress, [predicate](const QChar &c) {
+ return predicate(c);
+ });
}
bool Rule::matchSucceed(const QString &text, const int length, ProgressData *progress)
diff --git a/src/tools/clangbackend/clangbackendmain.cpp b/src/tools/clangbackend/clangbackendmain.cpp
index 28b7f251b6..338fec7982 100644
--- a/src/tools/clangbackend/clangbackendmain.cpp
+++ b/src/tools/clangbackend/clangbackendmain.cpp
@@ -82,7 +82,6 @@ int main(int argc, char *argv[])
const QString connection = processArguments(application);
- clang_toggleCrashRecovery(true);
clang_enableStackTraces();
ClangCodeModelServer clangCodeModelServer;
diff --git a/src/tools/clangbackend/source/clangasyncjob.h b/src/tools/clangbackend/source/clangasyncjob.h
index 58b6a1f845..69befdcdac 100644
--- a/src/tools/clangbackend/source/clangasyncjob.h
+++ b/src/tools/clangbackend/source/clangasyncjob.h
@@ -58,7 +58,9 @@ public:
&QFutureWatcher<Result>::finished,
onFinished);
- const QFuture<Result> future = Utils::runAsync(m_runner);
+ // Use 16MB stack size as clang_annotateTokens() would with an internal thread.
+ const Utils::StackSizeInBytes stackSize = 1024 * 1024 * 16;
+ const QFuture<Result> future = Utils::runAsync(stackSize, m_runner);
m_futureWatcher.setFuture(future);
return future;
diff --git a/tests/system/shared/clang.py b/tests/system/shared/clang.py
index dc07789740..d1a5660828 100644
--- a/tests/system/shared/clang.py
+++ b/tests/system/shared/clang.py
@@ -50,7 +50,7 @@ def startCreator(useClang):
if not startCreatorTryingClang():
return False
else:
- startApplication("qtcreator" + SettingsPath)
+ startApplication("qtcreator -noload ClangCodeModel" + SettingsPath)
finally:
overrideStartApplication()
return startedWithoutPluginError()
diff --git a/tests/system/suite_APTW/tst_APTW01/test.py b/tests/system/suite_APTW/tst_APTW01/test.py
index 10b3facf20..e6fcc937c1 100644
--- a/tests/system/suite_APTW/tst_APTW01/test.py
+++ b/tests/system/suite_APTW/tst_APTW01/test.py
@@ -27,7 +27,9 @@ source("../../shared/qtcreator.py")
# test New Qt Gui Application build and run for release and debug option
def main():
- startApplication("qtcreator" + SettingsPath)
+ # Start Creator with built-in code model, to avoid having
+ # warnings from the clang code model in "issues" view
+ startCreator(False)
if not startedWithoutPluginError():
return
checkedTargets = createProject_Qt_GUI(tempDir(), "SampleApp")