forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/4.3'
Change-Id: I01d7d8aa282f2bca94f85f55c832c76672e229f7
This commit is contained in:
4
docs.pri
4
docs.pri
@@ -6,9 +6,9 @@
|
|||||||
isEmpty(VERSION): error("Include qtcreator.pri before including docs.pri!")
|
isEmpty(VERSION): error("Include qtcreator.pri before including docs.pri!")
|
||||||
|
|
||||||
qtcver.name = QTC_VERSION
|
qtcver.name = QTC_VERSION
|
||||||
qtcver.value = $$VERSION
|
qtcver.value = $$QTCREATOR_DISPLAY_VERSION
|
||||||
qtcvertag.name = QTC_VERSION_TAG
|
qtcvertag.name = QTC_VERSION_TAG
|
||||||
qtcvertag.value = $$replace(qtcver.value, \.,)
|
qtcvertag.value = $$replace(VERSION, \.,)
|
||||||
qtdocs.name = QT_INSTALL_DOCS
|
qtdocs.name = QT_INSTALL_DOCS
|
||||||
qtdocs.value = $$[QT_INSTALL_DOCS/src]
|
qtdocs.value = $$[QT_INSTALL_DOCS/src]
|
||||||
qdocindex.name = QDOC_INDEX_DIR
|
qdocindex.name = QDOC_INDEX_DIR
|
||||||
|
|||||||
@@ -1304,6 +1304,17 @@ class DumperBase:
|
|||||||
self.putFormattedPointerX(value)
|
self.putFormattedPointerX(value)
|
||||||
self.ping('formattedPointer')
|
self.ping('formattedPointer')
|
||||||
|
|
||||||
|
def putDerefedPointer(self, value):
|
||||||
|
derefValue = value.dereference()
|
||||||
|
innerType = value.type.target() #.unqualified()
|
||||||
|
self.putType(innerType)
|
||||||
|
savedCurrentChildType = self.currentChildType
|
||||||
|
self.currentChildType = innerType.name
|
||||||
|
derefValue.name = '*'
|
||||||
|
self.putItem(derefValue)
|
||||||
|
self.currentChildType = savedCurrentChildType
|
||||||
|
self.putOriginalAddress(value.pointer())
|
||||||
|
|
||||||
def putFormattedPointerX(self, value):
|
def putFormattedPointerX(self, value):
|
||||||
#warn("PUT FORMATTED: %s" % value)
|
#warn("PUT FORMATTED: %s" % value)
|
||||||
pointer = value.pointer()
|
pointer = value.pointer()
|
||||||
@@ -1328,6 +1339,10 @@ class DumperBase:
|
|||||||
self.putNumChild(0)
|
self.putNumChild(0)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if self.currentIName.endswith('.this'):
|
||||||
|
self.putDerefedPointer(value)
|
||||||
|
return
|
||||||
|
|
||||||
displayFormat = self.currentItemFormat(value.type.name)
|
displayFormat = self.currentItemFormat(value.type.name)
|
||||||
innerType = value.type.target() #.unqualified()
|
innerType = value.type.target() #.unqualified()
|
||||||
|
|
||||||
@@ -1375,18 +1390,10 @@ class DumperBase:
|
|||||||
#warn('AUTODEREF: %s' % self.autoDerefPointers)
|
#warn('AUTODEREF: %s' % self.autoDerefPointers)
|
||||||
#warn('INAME: %s' % self.currentIName)
|
#warn('INAME: %s' % self.currentIName)
|
||||||
#warn('INNER: %s' % innerType.name)
|
#warn('INNER: %s' % innerType.name)
|
||||||
if self.autoDerefPointers or self.currentIName.endswith('.this'):
|
if self.autoDerefPointers:
|
||||||
derefValue = value.dereference()
|
# Generic pointer type with AutomaticFormat, but never dereference char types:
|
||||||
# Never dereference char types.
|
|
||||||
if innerType.name not in ('char', 'signed char', 'unsigned char', 'wchar_t'):
|
if innerType.name not in ('char', 'signed char', 'unsigned char', 'wchar_t'):
|
||||||
# Generic pointer type with AutomaticFormat.
|
self.putDerefedPointer(value)
|
||||||
self.putType(innerType)
|
|
||||||
savedCurrentChildType = self.currentChildType
|
|
||||||
self.currentChildType = innerType.name
|
|
||||||
derefValue.name = '*'
|
|
||||||
self.putItem(derefValue)
|
|
||||||
self.currentChildType = savedCurrentChildType
|
|
||||||
self.putOriginalAddress(pointer)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
#warn('GENERIC PLAIN POINTER: %s' % value.type)
|
#warn('GENERIC PLAIN POINTER: %s' % value.type)
|
||||||
|
|||||||
@@ -264,7 +264,10 @@ class Dumper(DumperBase):
|
|||||||
y = nativeValue.cast(chars.array(0, int(nativeType.sizeof - 1)))
|
y = nativeValue.cast(chars.array(0, int(nativeType.sizeof - 1)))
|
||||||
buf = bytearray(struct.pack('x' * size))
|
buf = bytearray(struct.pack('x' * size))
|
||||||
for i in range(size):
|
for i in range(size):
|
||||||
buf[i] = int(y[i])
|
try:
|
||||||
|
buf[i] = int(y[i])
|
||||||
|
except:
|
||||||
|
pass
|
||||||
val.ldata = bytes(buf)
|
val.ldata = bytes(buf)
|
||||||
|
|
||||||
val.type = self.fromNativeType(nativeType)
|
val.type = self.fromNativeType(nativeType)
|
||||||
|
|||||||
40869
share/qtcreator/translations/qtcreator_da.ts
Executable file
40869
share/qtcreator/translations/qtcreator_da.ts
Executable file
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@ TEMPLATE = aux
|
|||||||
|
|
||||||
include(../../../qtcreator.pri)
|
include(../../../qtcreator.pri)
|
||||||
|
|
||||||
LANGUAGES = cs de fr ja pl ru sl uk zh_CN zh_TW
|
LANGUAGES = cs da de fr ja pl ru sl uk zh_CN zh_TW
|
||||||
# *don't* re-enable these without a prior rework
|
# *don't* re-enable these without a prior rework
|
||||||
BAD_LANGUAGES = hu
|
BAD_LANGUAGES = hu
|
||||||
|
|
||||||
|
|||||||
@@ -283,7 +283,7 @@ extern "C" HRESULT CALLBACK pid(CIDebugClient *client, PCSTR args)
|
|||||||
|
|
||||||
int token;
|
int token;
|
||||||
commandTokens<StringList>(args, &token);
|
commandTokens<StringList>(args, &token);
|
||||||
dprintf("Qt Creator CDB extension version 4.2 %d bit.\n",
|
dprintf("Qt Creator CDB extension version 4.3 %d bit.\n",
|
||||||
sizeof(void *) * 8);
|
sizeof(void *) * 8);
|
||||||
if (const ULONG pid = currentProcessId(client))
|
if (const ULONG pid = currentProcessId(client))
|
||||||
ExtensionContext::instance().report('R', token, 0, "pid", "%u", pid);
|
ExtensionContext::instance().report('R', token, 0, "pid", "%u", pid);
|
||||||
|
|||||||
@@ -693,14 +693,14 @@ void Utils::setGlobPatternsForMimeType(const MimeType &mimeType, const QStringLi
|
|||||||
{
|
{
|
||||||
auto d = MimeDatabasePrivate::instance();
|
auto d = MimeDatabasePrivate::instance();
|
||||||
QMutexLocker locker(&d->mutex);
|
QMutexLocker locker(&d->mutex);
|
||||||
return d->provider()->setGlobPatternsForMimeType(mimeType, patterns);
|
d->provider()->setGlobPatternsForMimeType(mimeType, patterns);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Utils::setMagicRulesForMimeType(const MimeType &mimeType, const QMap<int, QList<MimeMagicRule> > &rules)
|
void Utils::setMagicRulesForMimeType(const MimeType &mimeType, const QMap<int, QList<MimeMagicRule> > &rules)
|
||||||
{
|
{
|
||||||
auto d = MimeDatabasePrivate::instance();
|
auto d = MimeDatabasePrivate::instance();
|
||||||
QMutexLocker locker(&d->mutex);
|
QMutexLocker locker(&d->mutex);
|
||||||
return d->provider()->setMagicRulesForMimeType(mimeType, rules);
|
d->provider()->setMagicRulesForMimeType(mimeType, rules);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Utils::setMimeStartupPhase(MimeStartupPhase phase)
|
void Utils::setMimeStartupPhase(MimeStartupPhase phase)
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ void CMakeBuildConfiguration::ctor()
|
|||||||
connect(m_buildDirManager.get(), &BuildDirManager::dataAvailable,
|
connect(m_buildDirManager.get(), &BuildDirManager::dataAvailable,
|
||||||
this, [this, project]() {
|
this, [this, project]() {
|
||||||
project->updateProjectData(this);
|
project->updateProjectData(this);
|
||||||
emit enabledChanged();
|
clearError();
|
||||||
emit dataAvailable();
|
emit dataAvailable();
|
||||||
});
|
});
|
||||||
connect(m_buildDirManager.get(), &BuildDirManager::errorOccured,
|
connect(m_buildDirManager.get(), &BuildDirManager::errorOccured,
|
||||||
@@ -153,7 +153,7 @@ void CMakeBuildConfiguration::ctor()
|
|||||||
connect(m_buildDirManager.get(), &BuildDirManager::configurationStarted,
|
connect(m_buildDirManager.get(), &BuildDirManager::configurationStarted,
|
||||||
this, [this, project]() {
|
this, [this, project]() {
|
||||||
project->handleParsingStarted();
|
project->handleParsingStarted();
|
||||||
emit enabledChanged();
|
clearError(ForceEnabledChanged::True);
|
||||||
emit parsingStarted();
|
emit parsingStarted();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -176,6 +176,7 @@ bool CMakeBuildConfiguration::isParsing() const
|
|||||||
|
|
||||||
void CMakeBuildConfiguration::resetData()
|
void CMakeBuildConfiguration::resetData()
|
||||||
{
|
{
|
||||||
|
clearError();
|
||||||
m_buildDirManager->resetData();
|
m_buildDirManager->resetData();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -342,12 +343,14 @@ void CMakeBuildConfiguration::setCurrentCMakeConfiguration(const QList<ConfigMod
|
|||||||
m_buildDirManager->forceReparse();
|
m_buildDirManager->forceReparse();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMakeBuildConfiguration::clearError()
|
void CMakeBuildConfiguration::clearError(ForceEnabledChanged fec)
|
||||||
{
|
{
|
||||||
if (!m_error.isEmpty()) {
|
if (!m_error.isEmpty()) {
|
||||||
m_error.clear();
|
m_error.clear();
|
||||||
emit enabledChanged();
|
fec = ForceEnabledChanged::True;
|
||||||
}
|
}
|
||||||
|
if (fec == ForceEnabledChanged::True)
|
||||||
|
emit enabledChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMakeBuildConfiguration::emitBuildTypeChanged()
|
void CMakeBuildConfiguration::emitBuildTypeChanged()
|
||||||
|
|||||||
@@ -109,10 +109,12 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void ctor();
|
void ctor();
|
||||||
|
|
||||||
|
enum ForceEnabledChanged : quint8 { False, True };
|
||||||
|
void clearError(ForceEnabledChanged fec = ForceEnabledChanged::False);
|
||||||
QList<ConfigModel::DataItem> completeCMakeConfiguration() const;
|
QList<ConfigModel::DataItem> completeCMakeConfiguration() const;
|
||||||
void setCurrentCMakeConfiguration(const QList<ConfigModel::DataItem> &items);
|
void setCurrentCMakeConfiguration(const QList<ConfigModel::DataItem> &items);
|
||||||
|
|
||||||
void clearError();
|
|
||||||
void setError(const QString &message);
|
void setError(const QString &message);
|
||||||
void setWarning(const QString &message);
|
void setWarning(const QString &message);
|
||||||
|
|
||||||
|
|||||||
@@ -172,6 +172,13 @@ bool CMakeBuildStep::init(QList<const BuildStep *> &earlierSteps)
|
|||||||
emit addTask(Task::buildConfigurationMissingTask());
|
emit addTask(Task::buildConfigurationMissingTask());
|
||||||
canInit = false;
|
canInit = false;
|
||||||
}
|
}
|
||||||
|
if (!bc->isEnabled()) {
|
||||||
|
emit addTask(Task(Task::Error,
|
||||||
|
QCoreApplication::translate("CMakeProjectManager::CMakeBuildStep",
|
||||||
|
"The build configuration is currently disabled."),
|
||||||
|
Utils::FileName(), -1, ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM));
|
||||||
|
canInit = false;
|
||||||
|
}
|
||||||
|
|
||||||
CMakeTool *tool = CMakeKitInformation::cmakeTool(target()->kit());
|
CMakeTool *tool = CMakeKitInformation::cmakeTool(target()->kit());
|
||||||
if (!tool || !tool->isValid()) {
|
if (!tool || !tool->isValid()) {
|
||||||
@@ -185,7 +192,7 @@ bool CMakeBuildStep::init(QList<const BuildStep *> &earlierSteps)
|
|||||||
}
|
}
|
||||||
|
|
||||||
CMakeRunConfiguration *rc = targetsActiveRunConfiguration();
|
CMakeRunConfiguration *rc = targetsActiveRunConfiguration();
|
||||||
if (isCurrentExecutableTarget(m_buildTarget) && (!rc || rc->title().isEmpty())) {
|
if (isCurrentExecutableTarget(m_buildTarget) && (!rc || rc->buildSystemTarget().isEmpty())) {
|
||||||
emit addTask(Task(Task::Error,
|
emit addTask(Task(Task::Error,
|
||||||
QCoreApplication::translate("ProjectExplorer::Task",
|
QCoreApplication::translate("ProjectExplorer::Task",
|
||||||
"You asked to build the current Run Configuration's build target only, "
|
"You asked to build the current Run Configuration's build target only, "
|
||||||
@@ -232,7 +239,7 @@ void CMakeBuildStep::run(QFutureInterface<bool> &fi)
|
|||||||
// Make sure CMake state was written to disk before trying to build:
|
// Make sure CMake state was written to disk before trying to build:
|
||||||
CMakeBuildConfiguration *bc = cmakeBuildConfiguration();
|
CMakeBuildConfiguration *bc = cmakeBuildConfiguration();
|
||||||
if (!bc)
|
if (!bc)
|
||||||
bc = qobject_cast<CMakeBuildConfiguration *>(target()->activeBuildConfiguration());
|
bc = targetsActiveBuildConfiguration();
|
||||||
QTC_ASSERT(bc, return);
|
QTC_ASSERT(bc, return);
|
||||||
|
|
||||||
bool mustDelay = false;
|
bool mustDelay = false;
|
||||||
@@ -348,7 +355,7 @@ QString CMakeBuildStep::allArguments(const CMakeRunConfiguration *rc) const
|
|||||||
|
|
||||||
if (isCurrentExecutableTarget(m_buildTarget)) {
|
if (isCurrentExecutableTarget(m_buildTarget)) {
|
||||||
if (rc)
|
if (rc)
|
||||||
target = rc->title();
|
target = rc->buildSystemTarget();
|
||||||
else
|
else
|
||||||
target = QLatin1String("<i><") + tr(ADD_RUNCONFIGURATION_TEXT) + QLatin1String("></i>");
|
target = QLatin1String("<i><") + tr(ADD_RUNCONFIGURATION_TEXT) + QLatin1String("></i>");
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -40,6 +40,7 @@
|
|||||||
#include <projectexplorer/taskhub.h>
|
#include <projectexplorer/taskhub.h>
|
||||||
|
|
||||||
#include <utils/algorithm.h>
|
#include <utils/algorithm.h>
|
||||||
|
#include <utils/asconst.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
#include <utils/qtcprocess.h>
|
#include <utils/qtcprocess.h>
|
||||||
|
|
||||||
@@ -294,7 +295,7 @@ void ServerModeReader::generateProjectTree(CMakeProjectNode *root,
|
|||||||
void ServerModeReader::updateCodeModel(CppTools::RawProjectParts &rpps)
|
void ServerModeReader::updateCodeModel(CppTools::RawProjectParts &rpps)
|
||||||
{
|
{
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
foreach (const FileGroup *fg, m_fileGroups) {
|
for (const FileGroup *fg : Utils::asConst(m_fileGroups)) {
|
||||||
++counter;
|
++counter;
|
||||||
const QString defineArg
|
const QString defineArg
|
||||||
= transform(fg->defines, [](const QString &s) -> QString {
|
= transform(fg->defines, [](const QString &s) -> QString {
|
||||||
@@ -469,6 +470,8 @@ ServerModeReader::Target *ServerModeReader::extractTargetData(const QVariantMap
|
|||||||
target->fileGroups.append(extractFileGroupData(fgData, srcDir, target));
|
target->fileGroups.append(extractFileGroupData(fgData, srcDir, target));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fixTarget(target);
|
||||||
|
|
||||||
m_targets.append(target);
|
m_targets.append(target);
|
||||||
return target;
|
return target;
|
||||||
}
|
}
|
||||||
@@ -547,6 +550,49 @@ void ServerModeReader::extractCacheData(const QVariantMap &data)
|
|||||||
m_cmakeCache = config;
|
m_cmakeCache = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ServerModeReader::fixTarget(ServerModeReader::Target *target) const
|
||||||
|
{
|
||||||
|
QHash<QString, const FileGroup *> languageFallbacks;
|
||||||
|
|
||||||
|
for (const FileGroup *group : Utils::asConst(target->fileGroups)) {
|
||||||
|
if (group->includePaths.isEmpty() && group->compileFlags.isEmpty()
|
||||||
|
&& group->defines.isEmpty())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
const FileGroup *fallback = languageFallbacks.value(group->language);
|
||||||
|
if (!fallback || fallback->sources.count() < group->sources.count())
|
||||||
|
languageFallbacks.insert(group->language, group);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!languageFallbacks.value(""))
|
||||||
|
return; // No empty language groups found, no need to proceed.
|
||||||
|
|
||||||
|
const FileGroup *fallback = languageFallbacks.value("CXX");
|
||||||
|
if (!fallback)
|
||||||
|
fallback = languageFallbacks.value("C");
|
||||||
|
if (!fallback)
|
||||||
|
fallback = languageFallbacks.value("");
|
||||||
|
|
||||||
|
if (!fallback)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (auto it = target->fileGroups.begin(); it != target->fileGroups.end(); ++it) {
|
||||||
|
if (!(*it)->language.isEmpty())
|
||||||
|
continue;
|
||||||
|
(*it)->language = fallback->language.isEmpty() ? "CXX" : fallback->language;
|
||||||
|
|
||||||
|
if (*it == fallback
|
||||||
|
|| !(*it)->includePaths.isEmpty() || !(*it)->defines.isEmpty()
|
||||||
|
|| !(*it)->compileFlags.isEmpty())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for (const IncludePath *ip : fallback->includePaths)
|
||||||
|
(*it)->includePaths.append(new IncludePath(*ip));
|
||||||
|
(*it)->defines = fallback->defines;
|
||||||
|
(*it)->compileFlags = fallback->compileFlags;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QHash<Utils::FileName, ProjectNode *>
|
QHash<Utils::FileName, ProjectNode *>
|
||||||
ServerModeReader::addCMakeLists(CMakeProjectNode *root, const QList<FileNode *> &cmakeLists)
|
ServerModeReader::addCMakeLists(CMakeProjectNode *root, const QList<FileNode *> &cmakeLists)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -113,6 +113,8 @@ private:
|
|||||||
void extractCMakeInputsData(const QVariantMap &data);
|
void extractCMakeInputsData(const QVariantMap &data);
|
||||||
void extractCacheData(const QVariantMap &data);
|
void extractCacheData(const QVariantMap &data);
|
||||||
|
|
||||||
|
void fixTarget(Target *target) const;
|
||||||
|
|
||||||
QHash<Utils::FileName, ProjectExplorer::ProjectNode *>
|
QHash<Utils::FileName, ProjectExplorer::ProjectNode *>
|
||||||
addCMakeLists(CMakeProjectNode *root, const QList<ProjectExplorer::FileNode *> &cmakeLists);
|
addCMakeLists(CMakeProjectNode *root, const QList<ProjectExplorer::FileNode *> &cmakeLists);
|
||||||
void addProjects(const QHash<Utils::FileName, ProjectExplorer::ProjectNode *> &cmakeListsNodes,
|
void addProjects(const QHash<Utils::FileName, ProjectExplorer::ProjectNode *> &cmakeListsNodes,
|
||||||
|
|||||||
@@ -1397,6 +1397,7 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments,
|
|||||||
m_snapshotHandler = new SnapshotHandler;
|
m_snapshotHandler = new SnapshotHandler;
|
||||||
m_snapshotView = new SnapshotTreeView(m_snapshotHandler);
|
m_snapshotView = new SnapshotTreeView(m_snapshotHandler);
|
||||||
m_snapshotView->setSettings(settings, "Debugger.SnapshotView");
|
m_snapshotView->setSettings(settings, "Debugger.SnapshotView");
|
||||||
|
m_snapshotView->setIconSize(QSize(10, 10));
|
||||||
m_snapshotView->setModel(m_snapshotHandler->model());
|
m_snapshotView->setModel(m_snapshotHandler->model());
|
||||||
m_snapshotWindow = addSearch(m_snapshotView, tr("Snapshots"), DOCKWIDGET_SNAPSHOTS);
|
m_snapshotWindow = addSearch(m_snapshotView, tr("Snapshots"), DOCKWIDGET_SNAPSHOTS);
|
||||||
|
|
||||||
|
|||||||
@@ -3867,7 +3867,7 @@ void GdbEngine::startGdb(const QStringList &args)
|
|||||||
QString msg;
|
QString msg;
|
||||||
QString wd = m_gdbProc.workingDirectory();
|
QString wd = m_gdbProc.workingDirectory();
|
||||||
if (!QFileInfo(wd).isDir())
|
if (!QFileInfo(wd).isDir())
|
||||||
msg = failedToStartMessage() + ' ' + tr("The working directory \"%s\" is not usable.").arg(wd);
|
msg = failedToStartMessage() + ' ' + tr("The working directory \"%1\" is not usable.").arg(wd);
|
||||||
else
|
else
|
||||||
msg = errorMessage(QProcess::FailedToStart);
|
msg = errorMessage(QProcess::FailedToStart);
|
||||||
handleAdapterStartFailed(msg);
|
handleAdapterStartFailed(msg);
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ void AbstractProcessStep::setIgnoreReturnValue(bool b)
|
|||||||
bool AbstractProcessStep::init(QList<const BuildStep *> &earlierSteps)
|
bool AbstractProcessStep::init(QList<const BuildStep *> &earlierSteps)
|
||||||
{
|
{
|
||||||
Q_UNUSED(earlierSteps);
|
Q_UNUSED(earlierSteps);
|
||||||
return true;
|
return !m_process;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -205,6 +205,7 @@ void AbstractProcessStep::run(QFutureInterface<bool> &fi)
|
|||||||
if (!m_process->waitForStarted()) {
|
if (!m_process->waitForStarted()) {
|
||||||
processStartupFailed();
|
processStartupFailed();
|
||||||
m_process.reset();
|
m_process.reset();
|
||||||
|
m_outputParserChain.reset();
|
||||||
reportRunResult(fi, false);
|
reportRunResult(fi, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -555,13 +555,19 @@ QStringList Project::files(Project::FilesMode fileMode,
|
|||||||
if (!rootProjectNode())
|
if (!rootProjectNode())
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
QSet<QString> alreadySeen;
|
||||||
rootProjectNode()->forEachNode([&](const FileNode *fn) {
|
rootProjectNode()->forEachNode([&](const FileNode *fn) {
|
||||||
if (filter && !filter(fn))
|
if (filter && !filter(fn))
|
||||||
return;
|
return;
|
||||||
|
const QString path = fn->filePath().toString();
|
||||||
|
const int count = alreadySeen.count();
|
||||||
|
alreadySeen.insert(path);
|
||||||
|
if (count == alreadySeen.count())
|
||||||
|
return; // skip duplicates
|
||||||
if ((fileMode == AllFiles)
|
if ((fileMode == AllFiles)
|
||||||
|| (fileMode == SourceFiles && !fn->isGenerated())
|
|| (fileMode == SourceFiles && !fn->isGenerated())
|
||||||
|| (fileMode == GeneratedFiles && fn->isGenerated()))
|
|| (fileMode == GeneratedFiles && fn->isGenerated()))
|
||||||
result.append(fn->filePath().toString());
|
result.append(path);
|
||||||
});
|
});
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ FlatModel::FlatModel(QObject *parent)
|
|||||||
connect(sm, &SessionManager::aboutToSaveSession, this, &FlatModel::saveExpandData);
|
connect(sm, &SessionManager::aboutToSaveSession, this, &FlatModel::saveExpandData);
|
||||||
connect(sm, &SessionManager::projectAdded, this, &FlatModel::handleProjectAdded);
|
connect(sm, &SessionManager::projectAdded, this, &FlatModel::handleProjectAdded);
|
||||||
connect(sm, &SessionManager::startupProjectChanged, this, [this] { layoutChanged(); });
|
connect(sm, &SessionManager::startupProjectChanged, this, [this] { layoutChanged(); });
|
||||||
|
rebuildModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant FlatModel::data(const QModelIndex &index, int role) const
|
QVariant FlatModel::data(const QModelIndex &index, int role) const
|
||||||
@@ -104,10 +105,15 @@ QVariant FlatModel::data(const QModelIndex &index, int role) const
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Qt::DecorationRole: {
|
case Qt::DecorationRole: {
|
||||||
if (folderNode)
|
if (folderNode) {
|
||||||
result = folderNode->icon();
|
result = folderNode->icon();
|
||||||
else
|
if (ContainerNode *containerNode = folderNode->asContainerNode()) {
|
||||||
|
if (ProjectNode *projectNode = containerNode->rootProjectNode())
|
||||||
|
result = projectNode->icon();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
result = Core::FileIconProvider::icon(node->filePath().toString());
|
result = Core::FileIconProvider::icon(node->filePath().toString());
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Qt::FontRole: {
|
case Qt::FontRole: {
|
||||||
|
|||||||
@@ -987,6 +987,12 @@ void addTabBarToStackedContainer(const SelectionContext &selectionContext)
|
|||||||
|
|
||||||
const int maxValue = container.directSubModelNodes().count();
|
const int maxValue = container.directSubModelNodes().count();
|
||||||
|
|
||||||
|
QmlItemNode tabBarItem(tabBarNode);
|
||||||
|
|
||||||
|
tabBarItem.anchors().setAnchor(AnchorLineLeft, containerItemNode, AnchorLineLeft);
|
||||||
|
tabBarItem.anchors().setAnchor(AnchorLineRight, containerItemNode, AnchorLineRight);
|
||||||
|
tabBarItem.anchors().setAnchor(AnchorLineBottom, containerItemNode, AnchorLineTop);
|
||||||
|
|
||||||
for (int i = 0; i < maxValue; ++i) {
|
for (int i = 0; i < maxValue; ++i) {
|
||||||
ModelNode tabButtonNode =
|
ModelNode tabButtonNode =
|
||||||
view->createModelNode("QtQuick.Controls.TabButton",
|
view->createModelNode("QtQuick.Controls.TabButton",
|
||||||
@@ -997,12 +1003,6 @@ void addTabBarToStackedContainer(const SelectionContext &selectionContext)
|
|||||||
tabBarNode.defaultNodeListProperty().reparentHere(tabButtonNode);
|
tabBarNode.defaultNodeListProperty().reparentHere(tabButtonNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
QmlItemNode tabBarItem(tabBarNode);
|
|
||||||
|
|
||||||
tabBarItem.anchors().setAnchor(AnchorLineLeft, containerItemNode, AnchorLineLeft);
|
|
||||||
tabBarItem.anchors().setAnchor(AnchorLineRight, containerItemNode, AnchorLineRight);
|
|
||||||
tabBarItem.anchors().setAnchor(AnchorLineBottom, containerItemNode, AnchorLineTop);
|
|
||||||
|
|
||||||
const QString id = tabBarNode.validId();
|
const QString id = tabBarNode.validId();
|
||||||
|
|
||||||
container.removeProperty(indexPropertyName);
|
container.removeProperty(indexPropertyName);
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
#include <QTime>
|
#include <QTime>
|
||||||
|
|
||||||
#include <utils/algorithm.h>
|
#include <utils/algorithm.h>
|
||||||
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
namespace QmlDesigner {
|
namespace QmlDesigner {
|
||||||
|
|
||||||
@@ -85,7 +86,7 @@ void FormEditorScene::resetScene()
|
|||||||
|
|
||||||
FormEditorItem* FormEditorScene::itemForQmlItemNode(const QmlItemNode &qmlItemNode) const
|
FormEditorItem* FormEditorScene::itemForQmlItemNode(const QmlItemNode &qmlItemNode) const
|
||||||
{
|
{
|
||||||
Q_ASSERT(qmlItemNode.isValid());
|
QTC_ASSERT(qmlItemNode.isValid(), return 0);
|
||||||
return m_qmlItemNodeItemHash.value(qmlItemNode);
|
return m_qmlItemNodeItemHash.value(qmlItemNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
#include "itemlibrarywidget.h"
|
#include "itemlibrarywidget.h"
|
||||||
#include <import.h>
|
#include <import.h>
|
||||||
#include <importmanagerview.h>
|
#include <importmanagerview.h>
|
||||||
|
#include <rewriterview.h>
|
||||||
|
|
||||||
namespace QmlDesigner {
|
namespace QmlDesigner {
|
||||||
|
|
||||||
@@ -69,6 +70,7 @@ void ItemLibraryView::modelAttached(Model *model)
|
|||||||
m_widget->setModel(model);
|
m_widget->setModel(model);
|
||||||
updateImports();
|
updateImports();
|
||||||
model->attachView(m_importManagerView);
|
model->attachView(m_importManagerView);
|
||||||
|
m_hasErrors = !rewriterView()->errors().isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ItemLibraryView::modelAboutToBeDetached(Model *model)
|
void ItemLibraryView::modelAboutToBeDetached(Model *model)
|
||||||
@@ -93,6 +95,15 @@ void ItemLibraryView::setResourcePath(const QString &resourcePath)
|
|||||||
m_widget->setResourcePath(resourcePath);
|
m_widget->setResourcePath(resourcePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ItemLibraryView::documentMessagesChanged(const QList<DocumentMessage> &errors, const QList<DocumentMessage> &)
|
||||||
|
{
|
||||||
|
if (m_hasErrors && errors.isEmpty())
|
||||||
|
/* For some reason we have to call update from the event loop */
|
||||||
|
QTimer::singleShot(0, m_widget, &ItemLibraryWidget::updateModel);
|
||||||
|
|
||||||
|
m_hasErrors = !errors.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
void ItemLibraryView::updateImports()
|
void ItemLibraryView::updateImports()
|
||||||
{
|
{
|
||||||
m_widget->updateModel();
|
m_widget->updateModel();
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ public:
|
|||||||
void modelAttached(Model *model) override;
|
void modelAttached(Model *model) override;
|
||||||
void modelAboutToBeDetached(Model *model) override;
|
void modelAboutToBeDetached(Model *model) override;
|
||||||
void importsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports) override;
|
void importsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports) override;
|
||||||
|
void documentMessagesChanged(const QList<DocumentMessage> &errors, const QList<DocumentMessage> &warnings) override;
|
||||||
|
|
||||||
void setResourcePath(const QString &resourcePath);
|
void setResourcePath(const QString &resourcePath);
|
||||||
|
|
||||||
@@ -59,6 +60,7 @@ protected:
|
|||||||
private:
|
private:
|
||||||
QPointer<ItemLibraryWidget> m_widget;
|
QPointer<ItemLibraryWidget> m_widget;
|
||||||
ImportManagerView *m_importManagerView;
|
ImportManagerView *m_importManagerView;
|
||||||
|
bool m_hasErrors = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -177,7 +177,7 @@ bool TextEditorWidget::eventFilter( QObject *, QEvent *event)
|
|||||||
{
|
{
|
||||||
static std::vector<int> overrideKeys = { Qt::Key_Delete, Qt::Key_Backspace, Qt::Key_Left,
|
static std::vector<int> overrideKeys = { Qt::Key_Delete, Qt::Key_Backspace, Qt::Key_Left,
|
||||||
Qt::Key_Right, Qt::Key_Up, Qt::Key_Down, Qt::Key_Insert,
|
Qt::Key_Right, Qt::Key_Up, Qt::Key_Down, Qt::Key_Insert,
|
||||||
Qt::Key_Escape, Qt::Key_Home, Qt::Key_End };
|
Qt::Key_Escape };
|
||||||
|
|
||||||
static std::vector<QKeySequence> overrideSequences = { QKeySequence::SelectAll, QKeySequence::Cut,
|
static std::vector<QKeySequence> overrideSequences = { QKeySequence::SelectAll, QKeySequence::Cut,
|
||||||
QKeySequence::Copy, QKeySequence::Delete,
|
QKeySequence::Copy, QKeySequence::Delete,
|
||||||
|
|||||||
@@ -575,10 +575,10 @@ private:
|
|||||||
void initialiseProperties();
|
void initialiseProperties();
|
||||||
|
|
||||||
TypeName m_qualfiedTypeName;
|
TypeName m_qualfiedTypeName;
|
||||||
int m_majorVersion;
|
int m_majorVersion = -1;
|
||||||
int m_minorVersion;
|
int m_minorVersion = -1;
|
||||||
bool m_isValid;
|
bool m_isValid = false;
|
||||||
bool m_isFileComponent;
|
bool m_isFileComponent = false;
|
||||||
PropertyNameList m_properties;
|
PropertyNameList m_properties;
|
||||||
PropertyNameList m_signals;
|
PropertyNameList m_signals;
|
||||||
QList<TypeName> m_propertyTypes;
|
QList<TypeName> m_propertyTypes;
|
||||||
@@ -673,10 +673,11 @@ NodeMetaInfoPrivate::NodeMetaInfoPrivate() : m_isValid(false)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeMetaInfoPrivate::NodeMetaInfoPrivate(Model *model, TypeName type, int maj, int min) :
|
NodeMetaInfoPrivate::NodeMetaInfoPrivate(Model *model, TypeName type, int maj, int min)
|
||||||
m_qualfiedTypeName(type), m_majorVersion(maj),
|
: m_qualfiedTypeName(type)
|
||||||
m_minorVersion(min), m_isValid(false), m_isFileComponent(false),
|
, m_majorVersion(maj)
|
||||||
m_model(model)
|
, m_minorVersion(min)
|
||||||
|
, m_model(model)
|
||||||
{
|
{
|
||||||
if (context()) {
|
if (context()) {
|
||||||
const CppComponentValue *cppObjectValue = getCppComponentValue();
|
const CppComponentValue *cppObjectValue = getCppComponentValue();
|
||||||
@@ -1003,7 +1004,7 @@ static QByteArray getPackage(const QByteArray &name)
|
|||||||
bool NodeMetaInfoPrivate::cleverCheckType(const TypeName &otherType) const
|
bool NodeMetaInfoPrivate::cleverCheckType(const TypeName &otherType) const
|
||||||
{
|
{
|
||||||
if (otherType == qualfiedTypeName())
|
if (otherType == qualfiedTypeName())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (isFileComponent())
|
if (isFileComponent())
|
||||||
return false;
|
return false;
|
||||||
@@ -1177,8 +1178,8 @@ QString NodeMetaInfoPrivate::lookupName() const
|
|||||||
|
|
||||||
QStringList NodeMetaInfoPrivate::lookupNameComponent() const
|
QStringList NodeMetaInfoPrivate::lookupNameComponent() const
|
||||||
{
|
{
|
||||||
QString tempString = fullQualifiedImportAliasType();
|
QString tempString = fullQualifiedImportAliasType();
|
||||||
return tempString.split('.');
|
return tempString.split('.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1415,7 +1416,6 @@ QStringList NodeMetaInfo::propertyKeysForEnum(const PropertyName &propertyName)
|
|||||||
|
|
||||||
QVariant NodeMetaInfo::propertyCastedValue(const PropertyName &propertyName, const QVariant &value) const
|
QVariant NodeMetaInfo::propertyCastedValue(const PropertyName &propertyName, const QVariant &value) const
|
||||||
{
|
{
|
||||||
|
|
||||||
const QVariant variant = value;
|
const QVariant variant = value;
|
||||||
QVariant copyVariant = variant;
|
QVariant copyVariant = variant;
|
||||||
if (propertyIsEnumType(propertyName)
|
if (propertyIsEnumType(propertyName)
|
||||||
@@ -1489,10 +1489,12 @@ TypeName NodeMetaInfo::typeName() const
|
|||||||
{
|
{
|
||||||
return m_privateData->qualfiedTypeName();
|
return m_privateData->qualfiedTypeName();
|
||||||
}
|
}
|
||||||
|
|
||||||
int NodeMetaInfo::majorVersion() const
|
int NodeMetaInfo::majorVersion() const
|
||||||
{
|
{
|
||||||
return m_privateData->majorVersion();
|
return m_privateData->majorVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
int NodeMetaInfo::minorVersion() const
|
int NodeMetaInfo::minorVersion() const
|
||||||
{
|
{
|
||||||
return m_privateData->minorVersion();
|
return m_privateData->minorVersion();
|
||||||
@@ -1537,8 +1539,7 @@ bool NodeMetaInfo::isSubclassOf(const TypeName &type, int majorVersion, int mino
|
|||||||
if (typeName().isEmpty())
|
if (typeName().isEmpty())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (typeName() == type
|
if (typeName() == type && availableInVersion(majorVersion, minorVersion))
|
||||||
&& availableInVersion(majorVersion, minorVersion))
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (m_privateData->prototypeCachePositives().contains(Internal::stringIdentifier(type, majorVersion, minorVersion)))
|
if (m_privateData->prototypeCachePositives().contains(Internal::stringIdentifier(type, majorVersion, minorVersion)))
|
||||||
@@ -1549,8 +1550,8 @@ bool NodeMetaInfo::isSubclassOf(const TypeName &type, int majorVersion, int mino
|
|||||||
|
|
||||||
foreach (const NodeMetaInfo &superClass, superClasses()) {
|
foreach (const NodeMetaInfo &superClass, superClasses()) {
|
||||||
if (superClass.m_privateData->cleverCheckType(type)
|
if (superClass.m_privateData->cleverCheckType(type)
|
||||||
&& superClass.availableInVersion(majorVersion, minorVersion)) {
|
&& superClass.availableInVersion(majorVersion, minorVersion)) {
|
||||||
m_privateData->prototypeCachePositives().insert(Internal::stringIdentifier(type, majorVersion, minorVersion));
|
m_privateData->prototypeCachePositives().insert(Internal::stringIdentifier(type, majorVersion, minorVersion));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -357,6 +357,7 @@ void QmlProject::generateProjectTree()
|
|||||||
fileType = FileType::Project;
|
fileType = FileType::Project;
|
||||||
newRoot->addNestedNode(new FileNode(Utils::FileName::fromString(f), fileType, false));
|
newRoot->addNestedNode(new FileNode(Utils::FileName::fromString(f), fileType, false));
|
||||||
}
|
}
|
||||||
|
newRoot->addNestedNode(new FileNode(projectFilePath(), FileType::Project, false));
|
||||||
|
|
||||||
setRootProjectNode(newRoot);
|
setRootProjectNode(newRoot);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -596,6 +596,8 @@ BookmarkModel* BookmarkManager::listBookmarkModel() const
|
|||||||
|
|
||||||
void BookmarkManager::saveBookmarks()
|
void BookmarkManager::saveBookmarks()
|
||||||
{
|
{
|
||||||
|
if (!m_isModelSetup)
|
||||||
|
return;
|
||||||
QByteArray bookmarks;
|
QByteArray bookmarks;
|
||||||
QDataStream stream(&bookmarks, QIODevice::WriteOnly);
|
QDataStream stream(&bookmarks, QIODevice::WriteOnly);
|
||||||
|
|
||||||
@@ -708,6 +710,7 @@ void BookmarkManager::itemChanged(QStandardItem *item)
|
|||||||
|
|
||||||
void BookmarkManager::setupBookmarkModels()
|
void BookmarkManager::setupBookmarkModels()
|
||||||
{
|
{
|
||||||
|
m_isModelSetup = true;
|
||||||
treeModel->clear();
|
treeModel->clear();
|
||||||
listModel->clear();
|
listModel->clear();
|
||||||
|
|
||||||
|
|||||||
@@ -176,4 +176,5 @@ private:
|
|||||||
BookmarkModel *treeModel;
|
BookmarkModel *treeModel;
|
||||||
BookmarkModel *listModel;
|
BookmarkModel *listModel;
|
||||||
QStandardItem *renameItem;
|
QStandardItem *renameItem;
|
||||||
|
bool m_isModelSetup = false;
|
||||||
};
|
};
|
||||||
|
|||||||
Submodule src/shared/qbs updated: cc99f7de4e...96f182fd97
@@ -1282,7 +1282,8 @@ void tst_Dumpers::dumper()
|
|||||||
"\n\n#if defined(_MSC_VER)" + (data.useQt ?
|
"\n\n#if defined(_MSC_VER)" + (data.useQt ?
|
||||||
"\n#include <qt_windows.h>" :
|
"\n#include <qt_windows.h>" :
|
||||||
"\n#define NOMINMAX\n#include <Windows.h>") +
|
"\n#define NOMINMAX\n#include <Windows.h>") +
|
||||||
"\n#define BREAK [](){ DebugBreak(); }();"
|
"\nvoid qtcDebugBreakFunction() { return; }"
|
||||||
|
"\n#define BREAK qtcDebugBreakFunction();"
|
||||||
"\n\nvoid unused(const void *first,...) { (void) first; }"
|
"\n\nvoid unused(const void *first,...) { (void) first; }"
|
||||||
"\n#else"
|
"\n#else"
|
||||||
"\n#include <stdint.h>\n";
|
"\n#include <stdint.h>\n";
|
||||||
@@ -1473,20 +1474,18 @@ void tst_Dumpers::dumper()
|
|||||||
cmds += "quit\n";
|
cmds += "quit\n";
|
||||||
|
|
||||||
} else if (m_debuggerEngine == CdbEngine) {
|
} else if (m_debuggerEngine == CdbEngine) {
|
||||||
QString cdbextPath = m_env.value("_NT_DEBUGGER_EXTENSION_PATH");
|
|
||||||
const int frameNumber = cdbextPath.contains("qtcreatorcdbext64") ? 2 : 1;
|
|
||||||
args << QLatin1String("-aqtcreatorcdbext.dll")
|
args << QLatin1String("-aqtcreatorcdbext.dll")
|
||||||
<< QLatin1String("-G")
|
<< QLatin1String("-G")
|
||||||
<< QLatin1String("-xi")
|
<< QLatin1String("-xn")
|
||||||
<< QLatin1String("0x4000001f")
|
<< QLatin1String("0x4000001f")
|
||||||
<< QLatin1String("-c")
|
<< QLatin1String("-c")
|
||||||
<< QLatin1String("g")
|
<< QLatin1String("bm doit!qtcDebugBreakFunction;g")
|
||||||
<< QLatin1String("debug\\doit.exe");
|
<< QLatin1String("debug\\doit.exe");
|
||||||
cmds += "!qtcreatorcdbext.script sys.path.insert(1, '" + dumperDir + "')\n"
|
cmds += "!qtcreatorcdbext.script sys.path.insert(1, '" + dumperDir + "')\n"
|
||||||
"!qtcreatorcdbext.script from cdbbridge import *\n"
|
"!qtcreatorcdbext.script from cdbbridge import *\n"
|
||||||
"!qtcreatorcdbext.script theDumper = Dumper()\n"
|
"!qtcreatorcdbext.script theDumper = Dumper()\n"
|
||||||
"!qtcreatorcdbext.script theDumper.setupDumpers()\n"
|
"!qtcreatorcdbext.script theDumper.setupDumpers()\n"
|
||||||
".frame " + QString::number(frameNumber) + "\n"
|
".frame 1\n"
|
||||||
"!qtcreatorcdbext.pid\n"
|
"!qtcreatorcdbext.pid\n"
|
||||||
"!qtcreatorcdbext.script -t 42 theDumper.fetchVariables({"
|
"!qtcreatorcdbext.script -t 42 theDumper.fetchVariables({"
|
||||||
"'token':2,'fancy':1,'forcens':1,"
|
"'token':2,'fancy':1,'forcens':1,"
|
||||||
@@ -6707,11 +6706,19 @@ void tst_Dumpers::dumper_data()
|
|||||||
+ Check("tc.2.bar", "15", "int")
|
+ Check("tc.2.bar", "15", "int")
|
||||||
+ Check("tc.3.bar", "15", "int");
|
+ Check("tc.3.bar", "15", "int");
|
||||||
|
|
||||||
|
QTest::newRow("UndefinedStaticMembers")
|
||||||
|
<< Data("struct Foo { int a = 15; static int b; }; \n",
|
||||||
|
"Foo f; unused(&f);\n")
|
||||||
|
+ Check("f.a", "15", "int")
|
||||||
|
+ Check("f.b", "<optimized out>", "") % NoCdbEngine
|
||||||
|
+ Check("f.b", "", "<Value unavailable error>") % CdbEngine;
|
||||||
|
|
||||||
QTest::newRow("ArrayOfFunctionPointers")
|
QTest::newRow("ArrayOfFunctionPointers")
|
||||||
<< Data("typedef int (*FP)(int *); \n"
|
<< Data("typedef int (*FP)(int *); \n"
|
||||||
"int func(int *param) { unused(param); return 0; } \n",
|
"int func(int *param) { unused(param); return 0; } \n",
|
||||||
"FP fps[5]; fps[0] = func; fps[0](0); unused(&fps);\n")
|
"FP fps[5]; fps[0] = func; fps[0](0); unused(&fps);\n")
|
||||||
+ RequiredMessage("Searching for type int (*)(int *) across all target modules, this could be very slow")
|
+ RequiredMessage("Searching for type int (*)(int *) across all target "
|
||||||
|
"modules, this could be very slow")
|
||||||
+ LldbEngine;
|
+ LldbEngine;
|
||||||
|
|
||||||
QTest::newRow("Sql")
|
QTest::newRow("Sql")
|
||||||
|
|||||||
Reference in New Issue
Block a user