summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2018-04-13 10:54:42 +0200
committerEike Ziller <eike.ziller@qt.io>2018-04-13 10:54:42 +0200
commit428fcb476ba2c5bbe1d16dfe437e510dafce1777 (patch)
tree10b130ef79d87dd1339004857c8f1e31e29c3f95 /src
parent9e29a32e1ab3af42a4d70984449ba33b3092a50b (diff)
parentf4594c922fe3ffcfaf715cf09622ba48c3d1d620 (diff)
downloadqt-creator-428fcb476ba2c5bbe1d16dfe437e510dafce1777.tar.gz
Merge remote-tracking branch 'origin/4.6'
Conflicts: src/libs/utils/settingsaccessor.cpp src/plugins/autotest/autotestplugin.cpp src/plugins/git/gitclient.cpp src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp src/plugins/qbsprojectmanager/qbsrunconfiguration.h Change-Id: I65f143cad18af509a2621d6c5925abbd038ea70f
Diffstat (limited to 'src')
-rw-r--r--src/libs/utils/settingsaccessor.cpp2
-rw-r--r--src/plugins/android/androiddeployqtstep.cpp4
-rw-r--r--src/plugins/android/androiddeployqtstep.h1
-rw-r--r--src/plugins/android/androidtoolchain.cpp10
-rw-r--r--src/plugins/autotest/autotestplugin.cpp10
-rw-r--r--src/plugins/autotest/qtest/qttestoutputreader.cpp4
-rw-r--r--src/plugins/autotoolsprojectmanager/makestep.cpp3
-rw-r--r--src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp4
-rw-r--r--src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp10
-rw-r--r--src/plugins/coreplugin/dialogs/ioptionspage.cpp11
-rw-r--r--src/plugins/coreplugin/dialogs/ioptionspage.h4
-rw-r--r--src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp11
-rw-r--r--src/plugins/debugger/qml/qmlengineutils.cpp6
-rw-r--r--src/plugins/designer/settingspage.cpp1
-rw-r--r--src/plugins/diffeditor/descriptionwidgetwatcher.cpp4
-rw-r--r--src/plugins/diffeditor/diffeditorwidgetcontroller.cpp6
-rw-r--r--src/plugins/diffeditor/sidebysidediffeditorwidget.cpp8
-rw-r--r--src/plugins/genericprojectmanager/genericmakestep.cpp3
-rw-r--r--src/plugins/git/gitclient.cpp10
-rw-r--r--src/plugins/ios/iosdsymbuildstep.cpp3
-rw-r--r--src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp7
-rw-r--r--src/plugins/projectexplorer/processstep.cpp3
-rw-r--r--src/plugins/projectexplorer/project.cpp2
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.cpp2
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.h3
-rw-r--r--src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp11
-rw-r--r--src/plugins/qbsprojectmanager/qbsrunconfiguration.h4
-rw-r--r--src/plugins/qmakeprojectmanager/makestep.cpp2
-rw-r--r--src/plugins/qmldesigner/components/integration/designdocument.cpp2
-rw-r--r--src/plugins/qmldesigner/components/integration/designdocumentview.cpp8
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp29
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp5
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h1
-rw-r--r--src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp4
-rw-r--r--src/plugins/qmljseditor/qmljseditordocument.cpp4
-rw-r--r--src/plugins/qtsupport/baseqtversion.cpp6
-rw-r--r--src/plugins/qtsupport/qtcreator_tutorials.xml8
-rw-r--r--src/plugins/texteditor/generichighlighter/specificrules.cpp8
-rw-r--r--src/plugins/texteditor/generichighlighter/specificrules.h2
m---------src/shared/qbs0
-rw-r--r--src/tools/clangbackend/clangbackend.pro4
-rw-r--r--src/tools/clangbackend/source/clangtranslationunit.cpp15
-rw-r--r--src/tools/clangpchmanagerbackend/clangpchmanagerbackend.pro4
-rw-r--r--src/tools/clangrefactoringbackend/clangrefactoringbackend.pro4
44 files changed, 181 insertions, 72 deletions
diff --git a/src/libs/utils/settingsaccessor.cpp b/src/libs/utils/settingsaccessor.cpp
index fa359358db..0c41e20cbe 100644
--- a/src/libs/utils/settingsaccessor.cpp
+++ b/src/libs/utils/settingsaccessor.cpp
@@ -454,7 +454,7 @@ bool UpgradingSettingsAccessor::isValidVersionAndId(const int version, const QBy
{
return (version >= 0
&& version >= firstSupportedVersion() && version <= currentVersion())
- && (id == m_id || m_id.isEmpty());
+ && (id.isEmpty() || id == m_id || m_id.isEmpty());
}
SettingsAccessor::RestoreData UpgradingSettingsAccessor::readData(const FileName &path,
diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp
index 9142d3fd26..5e264117e9 100644
--- a/src/plugins/android/androiddeployqtstep.cpp
+++ b/src/plugins/android/androiddeployqtstep.cpp
@@ -156,8 +156,8 @@ bool AndroidDeployQtStep::init(QList<const BuildStep *> &earlierSteps)
m_filesToPull["/system/bin/app_process32"] = buildDir + "app_process";
}
} else {
- m_appProcessBinaries << QLatin1String("/system/bin/app_process32")
- << QLatin1String("/system/bin/app_process");
+ m_filesToPull["/system/bin/app_process32"] = buildDir + "app_process";
+ m_filesToPull["/system/bin/app_process"] = buildDir + "app_process";
}
m_filesToPull["/system/bin/" + linkerName] = buildDir + linkerName;
diff --git a/src/plugins/android/androiddeployqtstep.h b/src/plugins/android/androiddeployqtstep.h
index fad99d545a..4b5534fda5 100644
--- a/src/plugins/android/androiddeployqtstep.h
+++ b/src/plugins/android/androiddeployqtstep.h
@@ -116,7 +116,6 @@ private:
QString m_avdName;
QString m_apkPath;
QMap<QString, QString> m_filesToPull;
- QStringList m_appProcessBinaries;
QString m_targetArch;
bool m_uninstallPreviousPackage = false;
diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp
index a2aa988d47..9d3b8db27b 100644
--- a/src/plugins/android/androidtoolchain.cpp
+++ b/src/plugins/android/androidtoolchain.cpp
@@ -150,7 +150,8 @@ QString AndroidToolChain::typeDisplayName() const
bool AndroidToolChain::isValid() const
{
return GccToolChain::isValid() && targetAbi().isValid() && !m_ndkToolChainVersion.isEmpty()
- && compilerCommand().isChildOf(AndroidConfigurations::currentConfig().ndkLocation());
+ && compilerCommand().isChildOf(AndroidConfigurations::currentConfig().ndkLocation())
+ && !originalTargetTriple().isEmpty();
}
void AndroidToolChain::addToEnvironment(Environment &env) const
@@ -417,6 +418,9 @@ bool AndroidToolChainFactory::versionCompareLess(const QList<int> &a, const QLis
bool AndroidToolChainFactory::versionCompareLess(QList<AndroidToolChain *> atc,
QList<AndroidToolChain *> btc)
{
+ if (atc.isEmpty() || btc.isEmpty())
+ return false;
+
const QList<int> a = versionNumberFromString(atc.at(0)->ndkToolChainVersion());
const QList<int> b = versionNumberFromString(btc.at(0)->ndkToolChainVersion());
@@ -463,7 +467,7 @@ AndroidToolChainFactory::autodetectToolChainsForNdk(const FileName &ndkPath,
FileName compilerPath = AndroidConfigurations::currentConfig().gccPath(abi, lang, version);
AndroidToolChain *tc = findToolChain(compilerPath, lang, alreadyKnown);
- if (!tc) {
+ if (!tc || tc->originalTargetTriple().isEmpty()) {
tc = new AndroidToolChain(abi, version, lang,
ToolChain::AutoDetection);
tc->resetToolChain(compilerPath);
@@ -473,6 +477,8 @@ AndroidToolChainFactory::autodetectToolChainsForNdk(const FileName &ndkPath,
toolChainBundle.append(tc);
}
+ QTC_ASSERT(!toolChainBundle.isEmpty(), continue);
+
auto it = newestToolChainForArch.constFind(abi);
if (it == newestToolChainForArch.constEnd())
newestToolChainForArch.insert(abi, toolChainBundle);
diff --git a/src/plugins/autotest/autotestplugin.cpp b/src/plugins/autotest/autotestplugin.cpp
index 6d6957c83c..d7bb68cdec 100644
--- a/src/plugins/autotest/autotestplugin.cpp
+++ b/src/plugins/autotest/autotestplugin.cpp
@@ -53,6 +53,8 @@
#include <projectexplorer/buildmanager.h>
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/projectexplorericons.h>
+#include <projectexplorer/session.h>
+#include <projectexplorer/target.h>
#include <texteditor/texteditor.h>
#include <utils/textutils.h>
#include <utils/utilsicons.h>
@@ -248,12 +250,16 @@ void AutotestPlugin::onRunUnderCursorTriggered(TestRunMode mode)
void AutotestPlugin::updateMenuItemsEnabledState()
{
+ const ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
+ const ProjectExplorer::Target *target = project ? project->activeTarget() : nullptr;
const bool canScan = !TestRunner::instance()->isTestRunning()
&& TestTreeModel::instance()->parser()->state() == TestCodeParser::Idle;
const bool hasTests = TestTreeModel::instance()->hasTests();
+ // avoid expensive call to PE::canRunStartupProject() - limit to minimum necessary checks
const bool canRun = hasTests && canScan
- && ProjectExplorer::ProjectExplorerPlugin::canRunStartupProject(
- ProjectExplorer::Constants::NORMAL_RUN_MODE);
+ && project && !project->needsConfiguration()
+ && target && target->activeRunConfiguration()
+ && !ProjectExplorer::BuildManager::isBuilding();
ActionManager::command(Constants::ACTION_RUN_ALL_ID)->action()->setEnabled(canRun);
ActionManager::command(Constants::ACTION_RUN_SELECTED_ID)->action()->setEnabled(canRun);
diff --git a/src/plugins/autotest/qtest/qttestoutputreader.cpp b/src/plugins/autotest/qtest/qttestoutputreader.cpp
index a6b22a7b19..4fe43333d2 100644
--- a/src/plugins/autotest/qtest/qttestoutputreader.cpp
+++ b/src/plugins/autotest/qtest/qttestoutputreader.cpp
@@ -172,7 +172,9 @@ void QtTestOutputReader::processXMLOutput(const QByteArray &outputLine)
if (m_className.isEmpty() && outputLine.trimmed().isEmpty())
return;
- m_xmlReader.addData(outputLine);
+ // avoid encoding problems for Quick tests
+ m_xmlReader.addData(m_testType == TestType::QuickTest ? QString::fromLatin1(outputLine)
+ : QString::fromLocal8Bit(outputLine));
while (!m_xmlReader.atEnd()) {
if (m_futureInterface.isCanceled())
return;
diff --git a/src/plugins/autotoolsprojectmanager/makestep.cpp b/src/plugins/autotoolsprojectmanager/makestep.cpp
index 596c2a025b..222978d44a 100644
--- a/src/plugins/autotoolsprojectmanager/makestep.cpp
+++ b/src/plugins/autotoolsprojectmanager/makestep.cpp
@@ -65,9 +65,6 @@ MakeStepFactory::MakeStepFactory()
registerStep<MakeStep>(MAKE_STEP_ID);
setDisplayName(tr("Make", "Display name for AutotoolsProjectManager::MakeStep id."));
setSupportedProjectType(AUTOTOOLS_PROJECT_ID);
- setSupportedStepLists({ProjectExplorer::Constants::BUILDSTEPS_BUILD,
- ProjectExplorer::Constants::BUILDSTEPS_CLEAN,
- ProjectExplorer::Constants::BUILDSTEPS_DEPLOY});
}
// MakeStep
diff --git a/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp b/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp
index 7a5a5c42d4..9df1862529 100644
--- a/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp
+++ b/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp
@@ -165,7 +165,9 @@ private:
QString text;
- if (m_displayHints.showCategoryAndEnableOption)
+ // Diagnostics from clazy/tidy do not have any category or option set, so
+ // avoid to add an empty line.
+ if (m_displayHints.showCategoryAndEnableOption && !diagnostic.category.isEmpty())
text.append(diagnosticCategoryAndEnableOptionRow(diagnostic));
text.append(diagnosticRow(diagnostic, IndentMode::DoNotIndent));
text.append(diagnosticRowsForChildren(diagnostic));
diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
index 3f35640c78..8a0e03deb3 100644
--- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
+++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
@@ -448,6 +448,7 @@ public:
, m_projectPart(projectPart)
{
addLanguageOptions();
+ addGlobalDiagnosticOptions(); // Before addDiagnosticOptions() so users still can overwrite.
addDiagnosticOptions();
addGlobalOptions();
addPrecompiledHeaderOptions();
@@ -546,6 +547,15 @@ private:
addXclangArg("-plugin-arg-clang-lazy", "ignore-included-files");
}
+ void addGlobalDiagnosticOptions()
+ {
+ m_options.append({
+ // Avoid undesired warnings from e.g. Q_OBJECT
+ QStringLiteral("-Wno-unknown-pragmas"),
+ QStringLiteral("-Wno-unknown-warning-option")
+ });
+ }
+
void addGlobalOptions()
{
if (!m_projectPart.project)
diff --git a/src/plugins/coreplugin/dialogs/ioptionspage.cpp b/src/plugins/coreplugin/dialogs/ioptionspage.cpp
index 49d72dc1d9..6a336a5550 100644
--- a/src/plugins/coreplugin/dialogs/ioptionspage.cpp
+++ b/src/plugins/coreplugin/dialogs/ioptionspage.cpp
@@ -138,13 +138,14 @@ QIcon Core::IOptionsPage::categoryIcon() const
static QList<Core::IOptionsPage *> g_optionsPages;
/*!
- Constructs an options page with the given \a parent.
+ Constructs an options page with the given \a parent and registers it
+ at the global options page pool if \a registerGlobally is true.
*/
-Core::IOptionsPage::IOptionsPage(QObject *parent)
- : QObject(parent),
- m_keywordsInitialized(false)
+Core::IOptionsPage::IOptionsPage(QObject *parent, bool registerGlobally)
+ : QObject(parent)
{
- g_optionsPages.append(this);
+ if (registerGlobally)
+ g_optionsPages.append(this);
}
/*!
diff --git a/src/plugins/coreplugin/dialogs/ioptionspage.h b/src/plugins/coreplugin/dialogs/ioptionspage.h
index 16e6d285c0..7f55c25c88 100644
--- a/src/plugins/coreplugin/dialogs/ioptionspage.h
+++ b/src/plugins/coreplugin/dialogs/ioptionspage.h
@@ -44,7 +44,7 @@ class CORE_EXPORT IOptionsPage : public QObject
Q_OBJECT
public:
- IOptionsPage(QObject *parent = 0);
+ IOptionsPage(QObject *parent = nullptr, bool registerGlobally = true);
virtual ~IOptionsPage();
static const QList<IOptionsPage *> allOptionsPages();
@@ -73,7 +73,7 @@ protected:
QString m_displayCategory;
Utils::Icon m_categoryIcon;
- mutable bool m_keywordsInitialized;
+ mutable bool m_keywordsInitialized = false;
mutable QStringList m_keywords;
};
diff --git a/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp b/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp
index 4580e82801..d06afa909b 100644
--- a/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp
+++ b/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp
@@ -33,11 +33,6 @@
namespace CppTools {
-static QStringList commonWarnings()
-{
- return { QStringLiteral("-Wno-unknown-pragmas") };
-}
-
static void addConfigForQuestionableConstructs(ClangDiagnosticConfigsModel &model)
{
ClangDiagnosticConfig config;
@@ -48,7 +43,7 @@ static void addConfigForQuestionableConstructs(ClangDiagnosticConfigsModel &mode
config.setClangOptions(QStringList{
QStringLiteral("-Wall"),
QStringLiteral("-Wextra"),
- } + commonWarnings());
+ });
model.appendOrUpdate(config);
}
@@ -60,7 +55,7 @@ static void addConfigForPedanticWarnings(ClangDiagnosticConfigsModel &model)
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
"Pedantic Warnings"));
config.setIsReadOnly(true);
- config.setClangOptions(QStringList{QStringLiteral("-Wpedantic")} + commonWarnings());
+ config.setClangOptions(QStringList{QStringLiteral("-Wpedantic")});
model.appendOrUpdate(config);
}
@@ -86,7 +81,7 @@ static void addConfigForAlmostEveryWarning(ClangDiagnosticConfigsModel &model)
QStringLiteral("-Wno-switch-enum"),
QStringLiteral("-Wno-missing-prototypes"), // Not optimal for C projects.
QStringLiteral("-Wno-used-but-marked-unused"), // e.g. QTest::qWait
- } + commonWarnings());
+ });
model.appendOrUpdate(config);
}
diff --git a/src/plugins/debugger/qml/qmlengineutils.cpp b/src/plugins/debugger/qml/qmlengineutils.cpp
index 563a472450..455a559e31 100644
--- a/src/plugins/debugger/qml/qmlengineutils.cpp
+++ b/src/plugins/debugger/qml/qmlengineutils.cpp
@@ -210,6 +210,7 @@ void appendDebugOutput(QtMsgType type, const QString &message, const QDebugConte
{
ConsoleItem::ItemType itemType;
switch (type) {
+ case QtInfoMsg:
case QtDebugMsg:
itemType = ConsoleItem::DebugType;
break;
@@ -220,11 +221,10 @@ void appendDebugOutput(QtMsgType type, const QString &message, const QDebugConte
case QtFatalMsg:
itemType = ConsoleItem::ErrorType;
break;
- default:
- //This case is not possible
- return;
}
+ QTC_ASSERT(itemType != ConsoleItem::DefaultType, return);
+
debuggerConsole()->printItem(new ConsoleItem(itemType, message, info.file, info.line));
}
diff --git a/src/plugins/designer/settingspage.cpp b/src/plugins/designer/settingspage.cpp
index 04670e5741..248478934a 100644
--- a/src/plugins/designer/settingspage.cpp
+++ b/src/plugins/designer/settingspage.cpp
@@ -36,6 +36,7 @@
using namespace Designer::Internal;
SettingsPage::SettingsPage(QDesignerOptionsPageInterface *designerPage) :
+ Core::IOptionsPage(nullptr, false),
m_designerPage(designerPage)
{
setId(Core::Id::fromString(m_designerPage->name()));
diff --git a/src/plugins/diffeditor/descriptionwidgetwatcher.cpp b/src/plugins/diffeditor/descriptionwidgetwatcher.cpp
index 0e310cfbcd..5b266ebe74 100644
--- a/src/plugins/diffeditor/descriptionwidgetwatcher.cpp
+++ b/src/plugins/diffeditor/descriptionwidgetwatcher.cpp
@@ -44,7 +44,7 @@ DescriptionWidgetWatcher::DescriptionWidgetWatcher(DiffEditorController *control
m_widgets.append(widget);
}
- connect(EditorManager::instance(), &EditorManager::editorOpened,
+ connect(EditorManager::instance(), &EditorManager::editorOpened, this,
[this](IEditor *editor) {
if (TextEditor::TextEditorWidget *widget = descriptionWidget(editor)) {
m_widgets.append(widget);
@@ -52,7 +52,7 @@ DescriptionWidgetWatcher::DescriptionWidgetWatcher(DiffEditorController *control
}
});
- connect(EditorManager::instance(), &EditorManager::editorAboutToClose,
+ connect(EditorManager::instance(), &EditorManager::editorAboutToClose, this,
[this](IEditor *editor) {
if (TextEditor::TextEditorWidget *widget = descriptionWidget(editor)) {
emit descriptionWidgetRemoved(widget);
diff --git a/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp b/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp
index c4a826bfe9..834c320a52 100644
--- a/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp
+++ b/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp
@@ -227,7 +227,7 @@ void DiffEditorWidgetController::addCodePasterAction(QMenu *menu, int fileIndex,
if (ExtensionSystem::PluginManager::getObject<CodePaster::Service>()) {
// optional code pasting service
QAction *sendChunkToCodePasterAction = menu->addAction(tr("Send Chunk to CodePaster..."));
- connect(sendChunkToCodePasterAction, &QAction::triggered, [this, fileIndex, chunkIndex]() {
+ connect(sendChunkToCodePasterAction, &QAction::triggered, this, [this, fileIndex, chunkIndex]() {
sendChunkToCodePaster(fileIndex, chunkIndex);
});
}
@@ -253,7 +253,7 @@ bool DiffEditorWidgetController::fileNamesAreDifferent(int fileIndex) const
void DiffEditorWidgetController::addApplyAction(QMenu *menu, int fileIndex, int chunkIndex)
{
QAction *applyAction = menu->addAction(tr("Apply Chunk..."));
- connect(applyAction, &QAction::triggered, [this, fileIndex, chunkIndex]() {
+ connect(applyAction, &QAction::triggered, this, [this, fileIndex, chunkIndex]() {
patch(false, fileIndex, chunkIndex);
});
applyAction->setEnabled(chunkExists(fileIndex, chunkIndex) && fileNamesAreDifferent(fileIndex));
@@ -262,7 +262,7 @@ void DiffEditorWidgetController::addApplyAction(QMenu *menu, int fileIndex, int
void DiffEditorWidgetController::addRevertAction(QMenu *menu, int fileIndex, int chunkIndex)
{
QAction *revertAction = menu->addAction(tr("Revert Chunk..."));
- connect(revertAction, &QAction::triggered, [this, fileIndex, chunkIndex]() {
+ connect(revertAction, &QAction::triggered, this, [this, fileIndex, chunkIndex]() {
patch(true, fileIndex, chunkIndex);
});
revertAction->setEnabled(chunkExists(fileIndex, chunkIndex));
diff --git a/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp b/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp
index 81942a9a66..0836e9a952 100644
--- a/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp
+++ b/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp
@@ -166,7 +166,7 @@ SideDiffEditorWidget::SideDiffEditorWidget(QWidget *parent)
settings.m_highlightBlocks = false;
SelectableTextEditorWidget::setDisplaySettings(settings);
- connect(this, &TextEditorWidget::tooltipRequested, [this](const QPoint &point, int position) {
+ connect(this, &TextEditorWidget::tooltipRequested, this, [this](const QPoint &point, int position) {
const int block = document()->findBlock(position).blockNumber();
const auto it = m_fileInfo.constFind(block);
if (it != m_fileInfo.constEnd())
@@ -648,10 +648,10 @@ SideBySideDiffEditorWidget::SideBySideDiffEditorWidget(QWidget *parent)
};
setupHighlightController();
- connect(m_leftEditor, &SideDiffEditorWidget::gotDisplaySettings, setupHighlightController);
+ connect(m_leftEditor, &SideDiffEditorWidget::gotDisplaySettings, this, setupHighlightController);
m_rightEditor->verticalScrollBar()->setFocusProxy(m_leftEditor);
- connect(m_leftEditor, &SideDiffEditorWidget::gotFocus, [this]() {
+ connect(m_leftEditor, &SideDiffEditorWidget::gotFocus, this, [this]() {
if (m_rightEditor->verticalScrollBar()->focusProxy() == m_leftEditor)
return; // We already did it before.
@@ -672,7 +672,7 @@ SideBySideDiffEditorWidget::SideBySideDiffEditorWidget(QWidget *parent)
// too. We bring back the original policy to keep tab focus working.
m_leftEditor->setFocusPolicy(Qt::StrongFocus);
});
- connect(m_rightEditor, &SideDiffEditorWidget::gotFocus, [this]() {
+ connect(m_rightEditor, &SideDiffEditorWidget::gotFocus, this, [this]() {
// Unhack #1.
m_rightEditor->verticalScrollBar()->setFocusProxy(nullptr);
// Unhack #2.
diff --git a/src/plugins/genericprojectmanager/genericmakestep.cpp b/src/plugins/genericprojectmanager/genericmakestep.cpp
index 7bd16b8308..37951d0308 100644
--- a/src/plugins/genericprojectmanager/genericmakestep.cpp
+++ b/src/plugins/genericprojectmanager/genericmakestep.cpp
@@ -318,7 +318,8 @@ GenericMakeAllStepFactory::GenericMakeAllStepFactory()
setDisplayName(QCoreApplication::translate(
"GenericProjectManager::Internal::GenericMakeStep", GENERIC_MS_DISPLAY_NAME));
setSupportedProjectType(Constants::GENERICPROJECT_ID);
- setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
+ setSupportedStepLists({ProjectExplorer::Constants::BUILDSTEPS_BUILD,
+ ProjectExplorer::Constants::BUILDSTEPS_DEPLOY});
}
//
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 327633dea9..3f03428594 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -303,7 +303,7 @@ void GitDiffEditorController::updateBranchList()
VcsCommand *command = GitPlugin::client()->vcsExec(
workingDirectory, {"branch", noColorOption, "-a", "--contains", revision}, nullptr,
false, 0, workingDirectory);
- connect(command, &VcsCommand::stdOutText, [this](const QString &text) {
+ connect(command, &VcsCommand::stdOutText, this, [this](const QString &text) {
const QString remotePrefix = "remotes/";
const QString localPrefix = "<Local>";
const int prefixLength = remotePrefix.length();
@@ -829,12 +829,12 @@ void GitClient::chunkActionsRequested(QMenu *menu, int fileIndex, int chunkIndex
menu->addSeparator();
QAction *stageChunkAction = menu->addAction(tr("Stage Chunk"));
- connect(stageChunkAction, &QAction::triggered,
+ connect(stageChunkAction, &QAction::triggered, this,
[stageChunk, diffController, fileIndex, chunkIndex]() {
stageChunk(diffController, fileIndex, chunkIndex, false);
});
QAction *unstageChunkAction = menu->addAction(tr("Unstage Chunk"));
- connect(unstageChunkAction, &QAction::triggered,
+ connect(unstageChunkAction, &QAction::triggered, this,
[stageChunk, diffController, fileIndex, chunkIndex]() {
stageChunk(diffController, fileIndex, chunkIndex, true);
});
@@ -1000,7 +1000,7 @@ void GitClient::log(const QString &workingDirectory, const QString &fileName,
if (!argWidget) {
argWidget = new GitLogArgumentsWidget(settings(), editor->toolBar());
argWidget->setBaseArguments(args);
- connect(argWidget, &VcsBaseEditorConfig::commandExecutionRequested,
+ connect(argWidget, &VcsBaseEditorConfig::commandExecutionRequested, this,
[=]() { this->log(workingDir, fileName, enableAnnotationContextMenu, args); });
editor->setEditorConfig(argWidget);
}
@@ -1086,7 +1086,7 @@ VcsBaseEditorWidget *GitClient::annotate(
if (!argWidget) {
argWidget = new GitBlameArgumentsWidget(settings(), editor->toolBar());
argWidget->setBaseArguments(extraOptions);
- connect(argWidget, &VcsBaseEditorConfig::commandExecutionRequested,
+ connect(argWidget, &VcsBaseEditorConfig::commandExecutionRequested, this,
[=] {
const int line = VcsBaseEditor::lineNumberOfCurrentEditor();
annotate(workingDir, file, revision, line, extraOptions);
diff --git a/src/plugins/ios/iosdsymbuildstep.cpp b/src/plugins/ios/iosdsymbuildstep.cpp
index 9579018538..2cf4834bc6 100644
--- a/src/plugins/ios/iosdsymbuildstep.cpp
+++ b/src/plugins/ios/iosdsymbuildstep.cpp
@@ -328,9 +328,6 @@ void IosDsymBuildStepConfigWidget::resetDefaults()
IosDsymBuildStepFactory::IosDsymBuildStepFactory()
{
registerStep<IosDsymBuildStep>(Constants::IOS_DSYM_BUILD_STEP_ID);
- setSupportedStepLists({ProjectExplorer::Constants::BUILDSTEPS_CLEAN,
- ProjectExplorer::Constants::BUILDSTEPS_BUILD,
- ProjectExplorer::Constants::BUILDSTEPS_DEPLOY});
setSupportedDeviceTypes({Constants::IOS_DEVICE_TYPE,
Constants::IOS_SIMULATOR_TYPE});
setDisplayName("dsymutil");
diff --git a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp
index 96a9d1a554..578023972f 100644
--- a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp
+++ b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp
@@ -904,12 +904,15 @@ void ListField::initializeData(MacroExpander *expander)
{
QTC_ASSERT(widget(), return);
+ if (m_index >= int(m_itemList.size())) {
+ qWarning().noquote() << QString("%1 (\"%2\") has an index of %3 which does not exist.").arg(type(), name(), QString::number(m_index));
+ m_index = -1;
+ }
+
QStandardItem *currentItem = m_index >= 0 ? m_itemList[uint(m_index)].get() : nullptr;
QList<QStandardItem*> expandedValuesItems;
expandedValuesItems.reserve(int(m_itemList.size()));
- QSize maxIconSize;
-
for (const std::unique_ptr<QStandardItem> &item : m_itemList) {
bool condition = JsonWizard::boolFromVariant(item->data(ConditionRole), expander);
if (!condition)
diff --git a/src/plugins/projectexplorer/processstep.cpp b/src/plugins/projectexplorer/processstep.cpp
index afe2f9ada4..82805fa3ee 100644
--- a/src/plugins/projectexplorer/processstep.cpp
+++ b/src/plugins/projectexplorer/processstep.cpp
@@ -148,9 +148,6 @@ ProcessStepFactory::ProcessStepFactory()
{
registerStep<ProcessStep>(PROCESS_STEP_ID);
setDisplayName(ProcessStep::tr("Custom Process Step", "item in combobox"));
- setSupportedStepLists({ProjectExplorer::Constants::BUILDSTEPS_BUILD,
- ProjectExplorer::Constants::BUILDSTEPS_CLEAN,
- ProjectExplorer::Constants::BUILDSTEPS_DEPLOY});
}
//*******
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index f852d8f792..8a9f6e410a 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -88,7 +88,7 @@ namespace ProjectExplorer {
static bool isListedFileNode(const Node *node)
{
- return node->asContainerNode() || (node->nodeType() == NodeType::File && node->listInProject());
+ return node->asContainerNode() || node->listInProject();
}
static bool nodeLessThan(const Node *n1, const Node *n2)
diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp
index a64b6040cf..1a246e2fe8 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.cpp
+++ b/src/plugins/qbsprojectmanager/qbsproject.cpp
@@ -460,6 +460,7 @@ void QbsProject::updateAfterParse()
updateCppCodeModel();
updateQmlJsCodeModel();
emit fileListChanged();
+ emit dataChanged();
}
void QbsProject::delayedUpdateAfterParse()
@@ -617,6 +618,7 @@ void QbsProject::updateAfterBuild()
m_extraCompilersPending = false;
updateCppCodeModel();
}
+ emit dataChanged();
}
void QbsProject::registerQbsProjectParser(QbsProjectParser *p)
diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h
index c45a595dff..d2e951a78e 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.h
+++ b/src/plugins/qbsprojectmanager/qbsproject.h
@@ -105,6 +105,9 @@ public:
void delayParsing();
+signals:
+ void dataChanged();
+
private:
void handleQbsParsingDone(bool success);
diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
index d56911bfbc..de58b4e067 100644
--- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
+++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
@@ -112,8 +112,8 @@ QbsRunConfiguration::QbsRunConfiguration(Target *target)
connect(target, &Target::kitChanged,
this, &QbsRunConfiguration::updateTargetInformation);
- connect(target->project(), &Project::parsingFinished,
- this, &QbsRunConfiguration::updateTargetInformation);
+ QbsProject *qbsProject = static_cast<QbsProject *>(project());
+ connect(qbsProject, &QbsProject::dataChanged, this, [this] { m_envCache.clear(); });
}
QVariantMap QbsRunConfiguration::toMap() const
@@ -164,9 +164,16 @@ void QbsRunConfiguration::setUsingLibraryPaths(bool useLibPaths)
void QbsRunConfiguration::addToBaseEnvironment(Utils::Environment &env) const
{
+ const auto key = qMakePair(env.toStringList(), m_usingLibraryPaths);
+ const auto it = m_envCache.constFind(key);
+ if (it != m_envCache.constEnd()) {
+ env = it.value();
+ return;
+ }
BuildTargetInfo bti = target()->applicationTargets().buildTargetInfo(buildKey());
if (bti.runEnvModifier)
bti.runEnvModifier(env, m_usingLibraryPaths);
+ m_envCache.insert(key, env);
}
Utils::OutputFormatter *QbsRunConfiguration::createOutputFormatter() const
diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h
index 3e2a360da6..8d3a2ffb98 100644
--- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h
+++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h
@@ -28,7 +28,9 @@
#include <projectexplorer/runnables.h>
#include <QCheckBox>
+#include <QHash>
#include <QLabel>
+#include <QPair>
#include <QStringList>
#include <QWidget>
@@ -62,6 +64,8 @@ private:
void updateTargetInformation();
+ using EnvCache = QHash<QPair<QStringList, bool>, Utils::Environment>;
+ mutable EnvCache m_envCache;
bool m_usingLibraryPaths = true;
};
diff --git a/src/plugins/qmakeprojectmanager/makestep.cpp b/src/plugins/qmakeprojectmanager/makestep.cpp
index bbcf04fdc8..5195bba0a0 100644
--- a/src/plugins/qmakeprojectmanager/makestep.cpp
+++ b/src/plugins/qmakeprojectmanager/makestep.cpp
@@ -461,6 +461,4 @@ MakeStepFactory::MakeStepFactory()
registerStep<MakeStep>(MAKESTEP_BS_ID);
setSupportedProjectType(Constants::QMAKEPROJECT_ID);
setDisplayName(tr("Make"));
- setSupportedStepLists({ProjectExplorer::Constants::BUILDSTEPS_BUILD,
- ProjectExplorer::Constants::BUILDSTEPS_CLEAN});
}
diff --git a/src/plugins/qmldesigner/components/integration/designdocument.cpp b/src/plugins/qmldesigner/components/integration/designdocument.cpp
index 2004614fdd..b4a1bdabdb 100644
--- a/src/plugins/qmldesigner/components/integration/designdocument.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocument.cpp
@@ -633,7 +633,7 @@ static inline Kit *getActiveKit(DesignDocument *designDocument)
if (!target)
return 0;
- if (!target->kit()->isValid())
+ if (!target->kit() || !target->kit()->isValid())
return 0;
QObject::connect(target, &Target::kitChanged,
designDocument, &DesignDocument::updateActiveQtVersion, Qt::UniqueConnection);
diff --git a/src/plugins/qmldesigner/components/integration/designdocumentview.cpp b/src/plugins/qmldesigner/components/integration/designdocumentview.cpp
index bc8930edb6..ef4e900d0f 100644
--- a/src/plugins/qmldesigner/components/integration/designdocumentview.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocumentview.cpp
@@ -24,6 +24,8 @@
****************************************************************************/
#include "designdocumentview.h"
+
+#include <exception.h>
#include <rewriterview.h>
#include <basetexteditmodifier.h>
#include <modelmerger.h>
@@ -156,7 +158,11 @@ void DesignDocumentView::fromText(QString text)
if (rewriterView->errors().isEmpty() && rewriterView->rootModelNode().isValid()) {
ModelMerger merger(this);
- merger.replaceModel(rewriterView->rootModelNode());
+ try {
+ merger.replaceModel(rewriterView->rootModelNode());
+ } catch(Exception &e) {
+ e.showException();
+ }
}
}
diff --git a/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp
index bf7f99edd1..45ff279512 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp
@@ -90,6 +90,33 @@ void CustomFileSystemModel::setFilter(QDir::Filters)
}
+QString filterMetaIcons(const QString fileName)
+{
+
+ QFileInfo info(fileName);
+
+ if (info.dir().path().split("/").contains("designer")) {
+
+ QDir currentDir = info.dir();
+
+ int i = 0;
+ while (!currentDir.isRoot() && i < 3) {
+ if (currentDir.dirName() == "designer") {
+ if (!currentDir.entryList({"*.metainfo"}).isEmpty())
+ return {};
+ }
+
+ currentDir.cdUp();
+ ++i;
+ }
+
+ if (info.dir().dirName() == "designer")
+ return {};
+ }
+
+ return fileName;
+}
+
QModelIndex CustomFileSystemModel::setRootPath(const QString &newPath)
{
beginResetModel();
@@ -116,7 +143,7 @@ QModelIndex CustomFileSystemModel::setRootPath(const QString &newPath)
QDirIterator fileIterator(newPath, nameFilterList, QDir::Files, QDirIterator::Subdirectories);
while (fileIterator.hasNext())
- m_files.append(fileIterator.next());
+ m_files.append(filterMetaIcons(fileIterator.next()));
QDirIterator dirIterator(newPath, {}, QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
while (dirIterator.hasNext())
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp
index 229dbfab13..cadd15c47c 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp
@@ -225,6 +225,8 @@ NodeInstanceServerProxy::NodeInstanceServerProxy(NodeInstanceView *nodeInstanceV
NodeInstanceServerProxy::~NodeInstanceServerProxy()
{
+ m_destructing = true;
+
disconnect(this, SLOT(processFinished(int,QProcess::ExitStatus)));
writeCommand(QVariant::fromValue(EndPuppetCommand()));
@@ -273,6 +275,9 @@ void NodeInstanceServerProxy::dispatchCommand(const QVariant &command, PuppetStr
static const int debugOutputCommandType = QMetaType::type("DebugOutputCommand");
static const int puppetAliveCommandType = QMetaType::type("PuppetAliveCommand");
+ if (m_destructing)
+ return;
+
qCInfo(instanceViewBenchmark) << "dispatching command" << command.userType() << command.typeName();
if (command.userType() == informationChangedCommandType) {
nodeInstanceClient()->informationChanged(command.value<InformationChangedCommand>());
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h
index 4cf8f1241e..6b2469de9e 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h
@@ -128,6 +128,7 @@ private:
RunModus m_runModus;
int m_synchronizeId = -1;
QTime m_benchmarkTimer;
+ bool m_destructing = false;
};
} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index cb2032046e..94d9253431 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -76,7 +76,7 @@ static inline bool isSupportedAttachedProperties(const QString &propertyName)
static inline QStringList supportedVersionsList()
{
static const QStringList list = {
- "2.0", "2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7", "2.8", "2.9", "2.10"
+ "2.0", "2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7", "2.8", "2.9", "2.10", "2.11"
};
return list;
}
@@ -96,7 +96,7 @@ static inline QStringList globalQtEnums()
static inline QStringList knownEnumScopes()
{
static const QStringList list = {
- "TextInput", "TextEdit", "Material", "Universal", "Font", "Shape", "ShapePath"
+ "TextInput", "TextEdit", "Material", "Universal", "Font", "Shape", "ShapePath", "AbstractButton"
};
return list;
}
diff --git a/src/plugins/qmljseditor/qmljseditordocument.cpp b/src/plugins/qmljseditor/qmljseditordocument.cpp
index 8441de6285..6325c7b673 100644
--- a/src/plugins/qmljseditor/qmljseditordocument.cpp
+++ b/src/plugins/qmljseditor/qmljseditordocument.cpp
@@ -499,6 +499,10 @@ QmlJSEditorDocumentPrivate::~QmlJSEditorDocumentPrivate()
{
m_semanticInfoUpdater->abort();
m_semanticInfoUpdater->wait();
+ // clean up all marks, otherwise a callback could try to access deleted members.
+ // see QTCREATORBUG-20199
+ cleanDiagnosticMarks();
+ cleanSemanticMarks();
}
void QmlJSEditorDocumentPrivate::invalidateFormatterCache()
diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp
index cb38340e7c..12941ee0d2 100644
--- a/src/plugins/qtsupport/baseqtversion.cpp
+++ b/src/plugins/qtsupport/baseqtversion.cpp
@@ -413,6 +413,12 @@ QSet<Id> BaseQtVersion::availableFeatures() const
if (qtVersion().matches(5, 10))
return features;
+ features.unite(versionedIds(Constants::FEATURE_QT_QUICK_PREFIX, 2, 11));
+ features.unite(versionedIds(Constants::FEATURE_QT_QUICK_CONTROLS_2_PREFIX, 2, 4));
+
+ if (qtVersion().matches(5, 11))
+ return features;
+
return features;
}
diff --git a/src/plugins/qtsupport/qtcreator_tutorials.xml b/src/plugins/qtsupport/qtcreator_tutorials.xml
index 0948cca5fa..9da1f6e5ff 100644
--- a/src/plugins/qtsupport/qtcreator_tutorials.xml
+++ b/src/plugins/qtsupport/qtcreator_tutorials.xml
@@ -70,6 +70,14 @@
<description><![CDATA[Using Qt Quick Designer to develop Qt Quick applications.]]></description>
<tags>qt creator,qt quick,video</tags>
</tutorial>
+ <tutorial imageUrl=":qtsupport/images/icons/videotutorialicon.png" difficulty="" projectPath="" name="Online: QML - Introduction" isVideo="true" videoUrl="https://www.youtube.com/watch?v=GkzncJ71mm0" videoLength="9:42">
+ <description><![CDATA[Using signals, slots, and property bindings Qt Quick applications.]]></description>
+ <tags>qt creator,qt quick,qml,video</tags>
+ </tutorial>
+ <tutorial imageUrl=":qtsupport/images/icons/videotutorialicon.png" difficulty="" projectPath="" name="Online: Qt Quick Designer - Qt Quick Controls" isVideo="true" videoUrl="https://www.youtube.com/watch?v=uuhmSZxK1mk" videoLength="7:09">
+ <description><![CDATA[Using Qt Quick Controls to develop Qt Quick applications.]]></description>
+ <tags>qt creator,qt quick,controls,video</tags>
+ </tutorial>
<tutorial imageUrl=":qtsupport/images/icons/qteventicon.png" difficulty="" projectPath="" name="Talk: Qt Creator - Getting Started" isVideo="true" videoUrl="https://www.youtube.com/watch?v=nGFmjOiT22Y" videoLength="50:36">
<description><![CDATA[Getting started with using Qt Creator for cross-platform development.]]></description>
diff --git a/src/plugins/texteditor/generichighlighter/specificrules.cpp b/src/plugins/texteditor/generichighlighter/specificrules.cpp
index 8c4b80dc66..82a9de23ca 100644
--- a/src/plugins/texteditor/generichighlighter/specificrules.cpp
+++ b/src/plugins/texteditor/generichighlighter/specificrules.cpp
@@ -247,6 +247,14 @@ bool RegExprRule::doMatchSucceed(const QString &text,
return false;
}
+RegExprRule *RegExprRule::doClone() const
+{
+ auto clone = new RegExprRule(*this);
+ if (m_progress)
+ m_progress->trackRule(clone);
+ return clone;
+}
+
// Keyword
KeywordRule::KeywordRule(const QSharedPointer<HighlightDefinition> &definition) :
m_overrideGlobal(false),
diff --git a/src/plugins/texteditor/generichighlighter/specificrules.h b/src/plugins/texteditor/generichighlighter/specificrules.h
index 63beaf8df9..a5533dcd0d 100644
--- a/src/plugins/texteditor/generichighlighter/specificrules.h
+++ b/src/plugins/texteditor/generichighlighter/specificrules.h
@@ -124,7 +124,7 @@ private:
virtual bool doMatchSucceed(const QString &text,
const int length,
ProgressData *progress);
- virtual RegExprRule *doClone() const { return new RegExprRule(*this); }
+ virtual RegExprRule *doClone() const;
virtual void doReplaceExpressions(const QStringList &captures);
virtual void doProgressFinished();
diff --git a/src/shared/qbs b/src/shared/qbs
-Subproject 0b141d7ecb103d53cc3ea93db505400fe29b46e
+Subproject 8da0e97f40abf19a089197c6aec8333a4e92d72
diff --git a/src/tools/clangbackend/clangbackend.pro b/src/tools/clangbackend/clangbackend.pro
index 3b7c5de518..c1c72036ea 100644
--- a/src/tools/clangbackend/clangbackend.pro
+++ b/src/tools/clangbackend/clangbackend.pro
@@ -19,7 +19,7 @@ SOURCES += clangbackendmain.cpp
HEADERS += ../qtcreatorcrashhandler/crashhandlersetup.h
SOURCES += ../qtcreatorcrashhandler/crashhandlersetup.cpp
-unix {
+unix:!disable_external_rpath:!contains(QMAKE_DEFAULT_LIBDIRS, $${LLVM_LIBDIR}) {
!osx: QMAKE_LFLAGS += -Wl,-z,origin
- !contains(QMAKE_DEFAULT_LIBDIRS, $${LLVM_LIBDIR}):!disable_external_rpath: QMAKE_LFLAGS += -Wl,-rpath,$$shell_quote($${LLVM_LIBDIR})
+ QMAKE_LFLAGS += -Wl,-rpath,$$shell_quote($${LLVM_LIBDIR})
}
diff --git a/src/tools/clangbackend/source/clangtranslationunit.cpp b/src/tools/clangbackend/source/clangtranslationunit.cpp
index baabcaf50b..f0bbc78934 100644
--- a/src/tools/clangbackend/source/clangtranslationunit.cpp
+++ b/src/tools/clangbackend/source/clangtranslationunit.cpp
@@ -237,6 +237,17 @@ static bool isHeaderErrorDiagnostic(const Utf8String &mainFilePath, const Diagno
return isCritical && diagnostic.location().filePath() != mainFilePath;
}
+static bool isIgnoredHeaderErrorDiagnostic(const Diagnostic &diagnostic)
+{
+ // FIXME: This diagnostic can appear if e.g. a main file includes a -isystem header and then the
+ // header is opened in the editor - the provided unsaved file for the newly opened editor
+ // overrides the file from the preamble. In this case, clang uses the version from the preamble
+ // and changes in the header are not reflected in the main file. Typically that's not a problem
+ // because only non-project headers are opened as -isystem headers.
+ return diagnostic.text().endsWith(
+ Utf8StringLiteral("from the precompiled header has been overridden"));
+}
+
void TranslationUnit::extractDiagnostics(DiagnosticContainer &firstHeaderErrorDiagnostic,
QVector<DiagnosticContainer> &mainFileDiagnostics) const
{
@@ -246,7 +257,9 @@ void TranslationUnit::extractDiagnostics(DiagnosticContainer &firstHeaderErrorDi
bool hasFirstHeaderErrorDiagnostic = false;
for (const Diagnostic &diagnostic : diagnostics()) {
- if (!hasFirstHeaderErrorDiagnostic && isHeaderErrorDiagnostic(m_filePath, diagnostic)) {
+ if (!hasFirstHeaderErrorDiagnostic
+ && isHeaderErrorDiagnostic(m_filePath, diagnostic)
+ && !isIgnoredHeaderErrorDiagnostic(diagnostic)) {
hasFirstHeaderErrorDiagnostic = true;
firstHeaderErrorDiagnostic = diagnostic.toDiagnosticContainer();
}
diff --git a/src/tools/clangpchmanagerbackend/clangpchmanagerbackend.pro b/src/tools/clangpchmanagerbackend/clangpchmanagerbackend.pro
index b54db0be04..efdd94377b 100644
--- a/src/tools/clangpchmanagerbackend/clangpchmanagerbackend.pro
+++ b/src/tools/clangpchmanagerbackend/clangpchmanagerbackend.pro
@@ -28,9 +28,9 @@ SOURCES += \
../clangrefactoringbackend/source/refactoringcompilationdatabase.cpp
-unix {
+unix:!disable_external_rpath:!contains(QMAKE_DEFAULT_LIBDIRS, $${LLVM_LIBDIR}) {
!macx: QMAKE_LFLAGS += -Wl,-z,origin
- !disable_external_rpath: QMAKE_LFLAGS += -Wl,-rpath,$$shell_quote($${LLVM_LIBDIR})
+ QMAKE_LFLAGS += -Wl,-rpath,$$shell_quote($${LLVM_LIBDIR})
}
DEFINES += CLANG_COMPILER_PATH=\"R\\\"xxx($${LLVM_BINDIR}/clang)xxx\\\"\"
diff --git a/src/tools/clangrefactoringbackend/clangrefactoringbackend.pro b/src/tools/clangrefactoringbackend/clangrefactoringbackend.pro
index 3b94d003c0..6e7c8262a9 100644
--- a/src/tools/clangrefactoringbackend/clangrefactoringbackend.pro
+++ b/src/tools/clangrefactoringbackend/clangrefactoringbackend.pro
@@ -23,7 +23,7 @@ QMAKE_CXXFLAGS += $$LLVM_CXXFLAGS
SOURCES += \
clangrefactoringbackendmain.cpp
-unix {
+unix:!disable_external_rpath:!contains(QMAKE_DEFAULT_LIBDIRS, $$LLVM_LIBDIR) {
!osx: QMAKE_LFLAGS += -Wl,-z,origin
- !disable_external_rpath: QMAKE_LFLAGS += -Wl,-rpath,$$shell_quote($${LLVM_LIBDIR})
+ QMAKE_LFLAGS += -Wl,-rpath,$$shell_quote($${LLVM_LIBDIR})
}