aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/qmljs/qmljslink.cpp9
-rw-r--r--src/plugins/android/androidmanifesteditorwidget.cpp16
-rw-r--r--src/plugins/android/androidmanifesteditorwidget.h2
-rw-r--r--src/plugins/android/androidtoolchain.cpp6
-rw-r--r--src/plugins/clangcodemodel/clangfollowsymbol.cpp13
-rw-r--r--src/plugins/coreplugin/systemsettings.ui9
-rw-r--r--src/plugins/cpptools/compileroptionsbuilder.cpp41
-rw-r--r--src/plugins/cpptools/compileroptionsbuilder.h2
-rw-r--r--src/plugins/debugger/cdb/cdbengine.cpp2
-rw-r--r--src/plugins/debugger/debuggerplugin.cpp2
-rw-r--r--src/plugins/debugger/debuggertooltipmanager.cpp1
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp4
-rw-r--r--src/plugins/projectexplorer/projectexplorersettingspage.cpp1
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp4
-rw-r--r--src/plugins/qtsupport/qtoutputformatter.cpp45
-rw-r--r--src/tools/clangbackend/clangbackendmain.cpp5
-rwxr-xr-xtests/system/tools/findUnusedObjects.py46
17 files changed, 147 insertions, 61 deletions
diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp
index 9c7855c5fdb..737ec6cc46d 100644
--- a/src/libs/qmljs/qmljslink.cpp
+++ b/src/libs/qmljs/qmljslink.cpp
@@ -393,13 +393,8 @@ Import LinkPrivate::importNonFile(Document::Ptr doc, const ImportInfo &importInf
}
// TODO: at the moment there is not any types information on Qbs imports.
- // Just check that tha the import is listed in the Qbs bundle.
- if (doc->language() == Dialect::QmlQbs) {
- QmlBundle qbs = ModelManagerInterface::instance()
- ->activeBundles().bundleForLanguage(Dialect::QmlQbs);
- if (qbs.supportedImports().contains(importInfo.name()))
- importFound = true;
- }
+ if (doc->language() == Dialect::QmlQbs)
+ importFound = true;
if (!importFound && importInfo.ast()) {
import.valid = false;
diff --git a/src/plugins/android/androidmanifesteditorwidget.cpp b/src/plugins/android/androidmanifesteditorwidget.cpp
index bcaa0490e30..e040c0db87d 100644
--- a/src/plugins/android/androidmanifesteditorwidget.cpp
+++ b/src/plugins/android/androidmanifesteditorwidget.cpp
@@ -170,12 +170,8 @@ void AndroidManifestEditorWidget::initializePage()
formLayout->addRow(QString(), warningRow);
-
- m_versionCode = new QSpinBox(packageGroupBox);
- m_versionCode->setMaximum(std::numeric_limits<int>::max());
- m_versionCode->setValue(1);
- m_versionCode->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
- formLayout->addRow(tr("Version code:"), m_versionCode);
+ m_versionCodeLineEdit = new QLineEdit(packageGroupBox);
+ formLayout->addRow(tr("Version code:"), m_versionCodeLineEdit);
m_versionNameLinedit = new QLineEdit(packageGroupBox);
formLayout->addRow(tr("Version name:"), m_versionNameLinedit);
@@ -201,8 +197,8 @@ void AndroidManifestEditorWidget::initializePage()
connect(m_packageNameLineEdit, &QLineEdit::textEdited,
this, &AndroidManifestEditorWidget::setPackageName);
- connect(m_versionCode, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
- this, &AndroidManifestEditorWidget::setDirty);
+ connect(m_versionCodeLineEdit, &QLineEdit::textEdited,
+ this, setDirtyFunc);
connect(m_versionNameLinedit, &QLineEdit::textEdited,
this, setDirtyFunc);
connect(m_androidMinSdkVersion,
@@ -765,7 +761,7 @@ void AndroidManifestEditorWidget::syncToWidgets(const QDomDocument &doc)
m_stayClean = true;
QDomElement manifest = doc.documentElement();
m_packageNameLineEdit->setText(manifest.attribute(QLatin1String("package")));
- m_versionCode->setValue(manifest.attribute(QLatin1String("android:versionCode")).toInt());
+ m_versionCodeLineEdit->setText(manifest.attribute(QLatin1String("android:versionCode")));
m_versionNameLinedit->setText(manifest.attribute(QLatin1String("android:versionName")));
QDomElement usesSdkElement = manifest.firstChildElement(QLatin1String("uses-sdk"));
@@ -922,7 +918,7 @@ void AndroidManifestEditorWidget::parseManifest(QXmlStreamReader &reader, QXmlSt
<< QLatin1String("android:versionName");
QStringList values = QStringList()
<< m_packageNameLineEdit->text()
- << QString::number(m_versionCode->value())
+ << m_versionCodeLineEdit->text()
<< m_versionNameLinedit->text();
QXmlStreamAttributes result = modifyXmlStreamAttributes(attributes, keys, values);
diff --git a/src/plugins/android/androidmanifesteditorwidget.h b/src/plugins/android/androidmanifesteditorwidget.h
index a9d21e44a34..49d1ec11558 100644
--- a/src/plugins/android/androidmanifesteditorwidget.h
+++ b/src/plugins/android/androidmanifesteditorwidget.h
@@ -163,7 +163,7 @@ private:
QLineEdit *m_packageNameLineEdit;
QLabel *m_packageNameWarningIcon;
QLabel *m_packageNameWarning;
- QSpinBox *m_versionCode;
+ QLineEdit *m_versionCodeLineEdit;
QLineEdit *m_versionNameLinedit;
QComboBox *m_androidMinSdkVersion;
QComboBox *m_androidTargetSdkVersion;
diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp
index dd8d4ccfb29..1a7315309db 100644
--- a/src/plugins/android/androidtoolchain.cpp
+++ b/src/plugins/android/androidtoolchain.cpp
@@ -139,7 +139,11 @@ QString AndroidToolChain::makeCommand(const Environment &env) const
GccToolChain::DetectedAbisResult AndroidToolChain::detectSupportedAbis() const
{
- return GccToolChain::DetectedAbisResult({targetAbi()}, originalTargetTriple());
+ for (auto itr = ClangTargets.constBegin();itr != ClangTargets.constEnd(); ++itr) {
+ if (itr.value() == targetAbi())
+ return GccToolChain::DetectedAbisResult({targetAbi()}, itr.key());
+ }
+ return GccToolChain::DetectedAbisResult({targetAbi()}, "");
}
diff --git a/src/plugins/clangcodemodel/clangfollowsymbol.cpp b/src/plugins/clangcodemodel/clangfollowsymbol.cpp
index c430c810c30..e5c66f6c6b1 100644
--- a/src/plugins/clangcodemodel/clangfollowsymbol.cpp
+++ b/src/plugins/clangcodemodel/clangfollowsymbol.cpp
@@ -26,6 +26,7 @@
#include "clangeditordocumentprocessor.h"
#include "clangfollowsymbol.h"
+#include <coreplugin/editormanager/editormanager.h>
#include <cpptools/cppmodelmanager.h>
#include <texteditor/texteditor.h>
@@ -155,6 +156,12 @@ static ::Utils::ProcessLinkCallback extendedCallback(::Utils::ProcessLinkCallbac
};
}
+static bool isSameInvocationContext(const Utils::FileName &filePath)
+{
+ return TextEditor::BaseTextEditor::currentTextEditor()->editorWidget()->isVisible()
+ && Core::EditorManager::currentDocument()->filePath() == filePath;
+}
+
void ClangFollowSymbol::findLink(const CppTools::CursorInEditor &data,
::Utils::ProcessLinkCallback &&processLinkCallback,
bool resolveTarget,
@@ -194,9 +201,9 @@ void ClangFollowSymbol::findLink(const CppTools::CursorInEditor &data,
m_watcher.reset(new FutureSymbolWatcher());
- QObject::connect(m_watcher.get(), &FutureSymbolWatcher::finished,
- [=, callback=std::move(processLinkCallback)]() mutable {
- if (m_watcher->isCanceled())
+ QObject::connect(m_watcher.get(), &FutureSymbolWatcher::finished, [=, filePath=data.filePath(),
+ callback=std::move(processLinkCallback)]() mutable {
+ if (m_watcher->isCanceled() || !isSameInvocationContext(filePath))
return callback(Utils::Link());
CppTools::SymbolInfo result = m_watcher->result();
// We did not fail but the result is empty
diff --git a/src/plugins/coreplugin/systemsettings.ui b/src/plugins/coreplugin/systemsettings.ui
index 80be38ca39f..172e773657a 100644
--- a/src/plugins/coreplugin/systemsettings.ui
+++ b/src/plugins/coreplugin/systemsettings.ui
@@ -340,14 +340,19 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="minimumSize">
+ <size>
+ <width>100</width>
+ <height>0</height>
+ </size>
+ </property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
- <widget class="QLineEdit" name="terminalOpenArgs">
- </widget>
+ <widget class="QLineEdit" name="terminalOpenArgs"/>
</item>
<item>
<widget class="QLineEdit" name="terminalExecuteArgs">
diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp
index 61f8242537b..fae2e29fb58 100644
--- a/src/plugins/cpptools/compileroptionsbuilder.cpp
+++ b/src/plugins/cpptools/compileroptionsbuilder.cpp
@@ -404,16 +404,20 @@ static QByteArray msCompatibilityVersionFromDefines(const ProjectExplorer::Macro
return QByteArray();
}
+QByteArray CompilerOptionsBuilder::msvcVersion() const
+{
+ const QByteArray version = msCompatibilityVersionFromDefines(m_projectPart.toolChainMacros);
+ return !version.isEmpty() ? version
+ : msCompatibilityVersionFromDefines(m_projectPart.projectMacros);
+}
+
void CompilerOptionsBuilder::addMsvcCompatibilityVersion()
{
if (m_projectPart.toolchainType == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID
|| m_projectPart.toolchainType == ProjectExplorer::Constants::CLANG_CL_TOOLCHAIN_TYPEID) {
- const ProjectExplorer::Macros macros = m_projectPart.toolChainMacros
- + m_projectPart.projectMacros;
- const QByteArray msvcVersion = msCompatibilityVersionFromDefines(macros);
-
- if (!msvcVersion.isEmpty())
- add(QLatin1String("-fms-compatibility-version=") + msvcVersion);
+ const QByteArray msvcVer = msvcVersion();
+ if (!msvcVer.isEmpty())
+ add(QLatin1String("-fms-compatibility-version=") + msvcVer);
}
}
@@ -599,16 +603,21 @@ void CompilerOptionsBuilder::addProjectConfigFileInclude()
void CompilerOptionsBuilder::undefineClangVersionMacrosForMsvc()
{
if (m_projectPart.toolchainType == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID) {
- static const QStringList macroNames {
- "__clang__",
- "__clang_major__",
- "__clang_minor__",
- "__clang_patchlevel__",
- "__clang_version__"
- };
-
- for (const QString &macroName : macroNames)
- add(undefineOption + macroName);
+ const QByteArray msvcVer = msvcVersion();
+ if (msvcVer.toFloat() < 14.f) {
+ // Original fix was only for msvc 2013 (version 12.0)
+ // Undefying them for newer versions is not necessary and breaks boost.
+ static const QStringList macroNames {
+ "__clang__",
+ "__clang_major__",
+ "__clang_minor__",
+ "__clang_patchlevel__",
+ "__clang_version__"
+ };
+
+ for (const QString &macroName : macroNames)
+ add(undefineOption + macroName);
+ }
}
}
diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h
index 06e549d6137..6af5062196b 100644
--- a/src/plugins/cpptools/compileroptionsbuilder.h
+++ b/src/plugins/cpptools/compileroptionsbuilder.h
@@ -96,6 +96,8 @@ private:
const QString m_clangVersion;
const QString m_clangResourceDirectory;
+ QByteArray msvcVersion() const;
+
QStringList m_options;
};
diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index 6bc3959630b..ebaf1a65b70 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -764,9 +764,9 @@ bool CdbEngine::hasCapability(unsigned cap) const
void CdbEngine::executeStepIn(bool byInstruction)
{
+ adjustOperateByInstruction(byInstruction);
if (!m_lastOperateByInstruction)
m_sourceStepInto = true; // See explanation at handleStackTrace().
- adjustOperateByInstruction(byInstruction);
runCommand({"t", NoFlags}); // Step into-> t (trace)
STATE_DEBUG(state(), Q_FUNC_INFO, __LINE__, "notifyInferiorRunRequested")
notifyInferiorRunRequested();
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 042a7f4368f..12e609bc2fd 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -1365,7 +1365,7 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments,
font.setPointSizeF(size);
m_breakpointManagerWindow->setFont(font);
m_globalLogWindow->setFont(font);
-// m_snapshotWindow->setFont(font);
+ m_engineManagerWindow->setFont(font);
});
diff --git a/src/plugins/debugger/debuggertooltipmanager.cpp b/src/plugins/debugger/debuggertooltipmanager.cpp
index e858bb49d2f..aefa93e6889 100644
--- a/src/plugins/debugger/debuggertooltipmanager.cpp
+++ b/src/plugins/debugger/debuggertooltipmanager.cpp
@@ -1185,7 +1185,6 @@ void DebuggerToolTipManagerPrivate::slotTooltipOverrideRequested
{
QTC_ASSERT(handled, return);
QTC_ASSERT(editorWidget, return);
- *handled = false;
if (!boolSetting(UseToolTipsInMainEditor))
return;
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 0caa97f68c1..47708b89088 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -1289,6 +1289,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
s->value(QLatin1String("ProjectExplorer/Settings/AddLibraryPathsToRunEnv"), true).toBool();
dd->m_projectExplorerSettings.prompToStopRunControl =
s->value(QLatin1String("ProjectExplorer/Settings/PromptToStopRunControl"), false).toBool();
+ dd->m_projectExplorerSettings.automaticallyCreateRunConfigurations =
+ s->value(QLatin1String("ProjectExplorer/Settings/AutomaticallyCreateRunConfigurations"), true).toBool();
dd->m_projectExplorerSettings.maxAppOutputChars =
s->value(QLatin1String("ProjectExplorer/Settings/MaxAppOutputLines"),
Core::Constants::DEFAULT_MAX_CHAR_COUNT).toInt() * 100;
@@ -1859,6 +1861,8 @@ void ProjectExplorerPluginPrivate::savePersistentSettings()
s->setValue(QLatin1String("ProjectExplorer/Settings/AutoRestoreLastSession"), dd->m_projectExplorerSettings.autorestoreLastSession);
s->setValue(QLatin1String("ProjectExplorer/Settings/AddLibraryPathsToRunEnv"), dd->m_projectExplorerSettings.addLibraryPathsToRunEnv);
s->setValue(QLatin1String("ProjectExplorer/Settings/PromptToStopRunControl"), dd->m_projectExplorerSettings.prompToStopRunControl);
+ s->setValue(QLatin1String("ProjectExplorer/Settings/AutomaticallyCreateRunConfigurations"),
+ dd->m_projectExplorerSettings.automaticallyCreateRunConfigurations);
s->setValue(QLatin1String("ProjectExplorer/Settings/MaxAppOutputLines"), dd->m_projectExplorerSettings.maxAppOutputChars / 100);
s->setValue(QLatin1String("ProjectExplorer/Settings/MaxBuildOutputLines"), dd->m_projectExplorerSettings.maxBuildOutputChars / 100);
s->setValue(QLatin1String("ProjectExplorer/Settings/EnvironmentId"), dd->m_projectExplorerSettings.environmentId.toByteArray());
diff --git a/src/plugins/projectexplorer/projectexplorersettingspage.cpp b/src/plugins/projectexplorer/projectexplorersettingspage.cpp
index 5b4b6dbb53a..d7e506021c0 100644
--- a/src/plugins/projectexplorer/projectexplorersettingspage.cpp
+++ b/src/plugins/projectexplorer/projectexplorersettingspage.cpp
@@ -109,6 +109,7 @@ ProjectExplorerSettings ProjectExplorerSettingsWidget::settings() const
m_settings.wrapAppOutput = m_ui.wrapAppOutputCheckBox->isChecked();
m_settings.useJom = m_ui.jomCheckbox->isChecked();
m_settings.addLibraryPathsToRunEnv = m_ui.addLibraryPathsToRunEnvCheckBox->isChecked();
+ m_settings.prompToStopRunControl = m_ui.promptToStopRunControlCheckBox->isChecked();
m_settings.automaticallyCreateRunConfigurations = m_ui.automaticallyCreateRunConfiguration->isChecked();
m_settings.maxAppOutputChars = m_ui.maxAppOutputBox->value();
m_settings.maxBuildOutputChars = m_ui.maxBuildOutputBox->value();
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
index 38be04f5dc8..f91ed9a733e 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
@@ -600,7 +600,9 @@ bool NavigatorTreeModel::setData(const QModelIndex &index, const QVariant &value
void NavigatorTreeModel::notifyDataChanged(const ModelNode &modelNode)
{
const QModelIndex index = indexForModelNode(modelNode);
- dataChanged(index, index);
+ const QAbstractItemModel *model = index.model();
+ const QModelIndex sibling = model ? model->sibling(index.row(), 2, index) : QModelIndex();
+ dataChanged(index, sibling);
}
static QList<ModelNode> collectParents(const QList<ModelNode> &modelNodes)
diff --git a/src/plugins/qtsupport/qtoutputformatter.cpp b/src/plugins/qtsupport/qtoutputformatter.cpp
index 04cd7ba09fd..17487c94289 100644
--- a/src/plugins/qtsupport/qtoutputformatter.cpp
+++ b/src/plugins/qtsupport/qtoutputformatter.cpp
@@ -61,9 +61,11 @@ public:
, qtError(QLatin1String("Object::.*in (.*:\\d+)"))
, qtAssert(QLatin1String("ASSERT: .* in file (.+, line \\d+)"))
, qtAssertX(QLatin1String("ASSERT failure in .*: \".*\", file (.+, line \\d+)"))
- , qtTestFail(QLatin1String("^ Loc: \\[(.*)\\]"))
+ , qtTestFailUnix(QLatin1String("^ Loc: \\[(.*)\\]"))
+ , qtTestFailWin(QLatin1String("^(.*\\(\\d+\\)) : failure location\\s*$"))
, project(proj)
{
+ qmlError.setMinimal(true);
}
~QtOutputFormatterPrivate()
@@ -74,7 +76,8 @@ public:
QRegExp qtError;
QRegExp qtAssert;
QRegExp qtAssertX;
- QRegExp qtTestFail;
+ QRegExp qtTestFailUnix;
+ QRegExp qtTestFailWin;
QPointer<Project> project;
QString lastLine;
FileInProjectFinder projectFinder;
@@ -122,9 +125,13 @@ LinkResult QtOutputFormatter::matchLine(const QString &line) const
lr.href = d->qtAssertX.cap(1);
lr.start = d->qtAssertX.pos(1);
lr.end = lr.start + lr.href.length();
- } else if (d->qtTestFail.indexIn(line) != -1) {
- lr.href = d->qtTestFail.cap(1);
- lr.start = d->qtTestFail.pos(1);
+ } else if (d->qtTestFailUnix.indexIn(line) != -1) {
+ lr.href = d->qtTestFailUnix.cap(1);
+ lr.start = d->qtTestFailUnix.pos(1);
+ lr.end = lr.start + lr.href.length();
+ } else if (d->qtTestFailWin.indexIn(line) != -1) {
+ lr.href = d->qtTestFailWin.cap(1);
+ lr.start = d->qtTestFailWin.pos(1);
lr.end = lr.start + lr.href.length();
}
return lr;
@@ -360,6 +367,34 @@ void QtSupportPlugin::testQtOutputFormatter_data()
<< QString::fromLatin1("file:///main.qml:20 Unexpected token `identifier'")
<< 0 << 19 << QString::fromLatin1("file:///main.qml:20")
<< QString::fromLatin1("/main.qml") << 20 << -1;
+
+ QTest::newRow("Unix file link with timestamp")
+ << QString::fromLatin1("file:///home/user/main.cpp:157 2018-03-21 10:54:45.706")
+ << 0 << 30 << QString::fromLatin1("file:///home/user/main.cpp:157")
+ << QString::fromLatin1("/home/user/main.cpp") << 157 << -1;
+
+ QTest::newRow("Windows file link with timestamp")
+ << QString::fromLatin1("file:///e:/path/main.cpp:157 2018-03-21 10:54:45.706")
+ << 0 << 28 << QString::fromLatin1("file:///e:/path/main.cpp:157")
+ << (Utils::HostOsInfo::isWindowsHost()
+ ? QString::fromLatin1("e:/path/main.cpp")
+ : QString::fromLatin1("/e:/path/main.cpp"))
+ << 157 << -1;
+
+ QTest::newRow("Unix failed QTest link")
+ << QString::fromLatin1(" Loc: [../TestProject/test.cpp(123)]")
+ << 9 << 37 << QString::fromLatin1("../TestProject/test.cpp(123)")
+ << QString::fromLatin1("../TestProject/test.cpp") << 123 << -1;
+
+ QTest::newRow("Windows failed QTest link")
+ << QString::fromLatin1("..\\TestProject\\test.cpp(123) : failure location")
+ << 0 << 28 << QString::fromLatin1("..\\TestProject\\test.cpp(123)")
+ << QString::fromLatin1("..\\TestProject\\test.cpp") << 123 << -1;
+
+ QTest::newRow("Windows failed QTest link with carriage return")
+ << QString::fromLatin1("..\\TestProject\\test.cpp(123) : failure location\r")
+ << 0 << 28 << QString::fromLatin1("..\\TestProject\\test.cpp(123)")
+ << QString::fromLatin1("..\\TestProject\\test.cpp") << 123 << -1;
}
void QtSupportPlugin::testQtOutputFormatter()
diff --git a/src/tools/clangbackend/clangbackendmain.cpp b/src/tools/clangbackend/clangbackendmain.cpp
index efe5970a4d8..5cbac3ce601 100644
--- a/src/tools/clangbackend/clangbackendmain.cpp
+++ b/src/tools/clangbackend/clangbackendmain.cpp
@@ -34,6 +34,7 @@
#include <clangcodemodelclientproxy.h>
#include <iostream>
+#include <clocale>
using ClangBackEnd::ClangCodeModelClientProxy;
using ClangBackEnd::ClangCodeModelServer;
@@ -75,6 +76,10 @@ int main(int argc, char *argv[])
QCoreApplication::setApplicationVersion(QStringLiteral("1.0.0"));
QCoreApplication application(argc, argv);
+
+ // Some tidy checks use locale-dependent conversion functions and thus might throw exceptions.
+ std::setlocale(LC_NUMERIC, "C");
+
CrashHandlerSetup setupCrashHandler(QCoreApplication::applicationName(),
CrashHandlerSetup::DisableRestart);
diff --git a/tests/system/tools/findUnusedObjects.py b/tests/system/tools/findUnusedObjects.py
index 8597b047172..43b826f6b83 100755
--- a/tests/system/tools/findUnusedObjects.py
+++ b/tests/system/tools/findUnusedObjects.py
@@ -26,6 +26,7 @@
############################################################################
import os
+import platform
import sys
import tokenize
from optparse import OptionParser
@@ -37,11 +38,14 @@ lastToken = [None, None]
stopTokens = ('OP', 'NAME', 'NUMBER', 'ENDMARKER')
def parseCommandLine():
- global directory, onlyRemovable
+ global directory, onlyRemovable, sharedFolders
parser = OptionParser("\n%prog [OPTIONS] [DIRECTORY]")
parser.add_option("-o", "--only-removable", dest="onlyRemovable",
action="store_true", default=False,
help="list removable objects only")
+ parser.add_option("-s", dest="sharedFolders",
+ action="store", type="string", default="",
+ help="comma-separated list of shared folders")
(options, args) = parser.parse_args()
if len(args) == 0:
directory = os.path.abspath(".")
@@ -52,6 +56,7 @@ def parseCommandLine():
parser.print_help()
sys.exit(1)
onlyRemovable = options.onlyRemovable
+ sharedFolders = map(os.path.abspath, options.sharedFolders.split(','))
def collectObjects():
global objMap
@@ -97,18 +102,35 @@ def handleDataFiles(openFile, separator):
useCounts[stripped] = useCounts[stripped] + 1
def findUsages():
- global directory, objMap
+ global directory, objMap, sharedFolders
suffixes = (".py", ".csv", ".tsv")
- for root, dirnames, filenames in os.walk(directory):
- for filename in filter(lambda x: x.endswith(suffixes), filenames):
- currentFile = open(os.path.join(root, filename))
- if filename.endswith(".py"):
- tokenize.tokenize(currentFile.readline, handle_token)
- elif filename.endswith(".csv"):
- handleDataFiles(currentFile, ",")
- elif filename.endswith(".tsv"):
- handleDataFiles(currentFile, "\t")
- currentFile.close()
+ directories = [directory]
+ # avoid folders that will be processed anyhow
+ for shared in sharedFolders:
+ skip = False
+ tmpS = shared + "/"
+ for folder in directories:
+ tmpD = folder + "/"
+ if platform.system() in ('Microsoft', 'Windows'):
+ tmpS = tmpS.lower()
+ tmpD = tmpD.lower()
+ if tmpS.startswith(tmpD):
+ skip = True
+ break
+ if not skip:
+ directories.append(shared)
+
+ for directory in directories:
+ for root, dirnames, filenames in os.walk(directory):
+ for filename in filter(lambda x: x.endswith(suffixes), filenames):
+ currentFile = open(os.path.join(root, filename))
+ if filename.endswith(".py"):
+ tokenize.tokenize(currentFile.readline, handle_token)
+ elif filename.endswith(".csv"):
+ handleDataFiles(currentFile, ",")
+ elif filename.endswith(".tsv"):
+ handleDataFiles(currentFile, "\t")
+ currentFile.close()
currentFile = open(objMap)
tokenize.tokenize(currentFile.readline, handle_token)
currentFile.close()