forked from qt-creator/qt-creator
CMake: Fix project parsing notification
This builds on top of 08677c0b01 and
fixes one more code path to go through a common entry/exit point.
Change-Id: I1d00fa9242f247028e5d3b0ef3b5fe1d3f4cb03d
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -97,12 +97,15 @@ ServerModeReader::~ServerModeReader()
|
||||
stop();
|
||||
}
|
||||
|
||||
void ServerModeReader::setParameters(const BuildDirReader::Parameters &p)
|
||||
void ServerModeReader::setParameters(const BuildDirParameters &p)
|
||||
{
|
||||
QTC_ASSERT(p.cmakeTool, return);
|
||||
|
||||
BuildDirReader::setParameters(p);
|
||||
if (!m_cmakeServer) {
|
||||
m_cmakeServer.reset(new ServerMode(p.environment,
|
||||
p.sourceDirectory, p.buildDirectory, p.cmakeExecutable,
|
||||
p.sourceDirectory, p.buildDirectory,
|
||||
p.cmakeTool->cmakeExecutable(),
|
||||
p.generator, p.extraGenerator, p.platform, p.toolset,
|
||||
true, 1));
|
||||
connect(m_cmakeServer.get(), &ServerMode::errorOccured,
|
||||
@@ -135,14 +138,17 @@ void ServerModeReader::setParameters(const BuildDirReader::Parameters &p)
|
||||
}
|
||||
}
|
||||
|
||||
bool ServerModeReader::isCompatible(const BuildDirReader::Parameters &p)
|
||||
bool ServerModeReader::isCompatible(const BuildDirParameters &p)
|
||||
{
|
||||
// Server mode connection got lost, reset...
|
||||
if (!m_parameters.cmakeExecutable.isEmpty() && !m_cmakeServer)
|
||||
if (!p.cmakeTool)
|
||||
return false;
|
||||
|
||||
return p.cmakeHasServerMode
|
||||
&& p.cmakeExecutable == m_parameters.cmakeExecutable
|
||||
// Server mode connection got lost, reset...
|
||||
if (!m_parameters.cmakeTool->cmakeExecutable().isEmpty() && !m_cmakeServer)
|
||||
return false;
|
||||
|
||||
return p.cmakeTool->hasServerMode()
|
||||
&& p.cmakeTool->cmakeExecutable() == m_parameters.cmakeTool->cmakeExecutable()
|
||||
&& p.environment == m_parameters.environment
|
||||
&& p.generator == m_parameters.generator
|
||||
&& p.extraGenerator == m_parameters.extraGenerator
|
||||
@@ -154,16 +160,22 @@ bool ServerModeReader::isCompatible(const BuildDirReader::Parameters &p)
|
||||
|
||||
void ServerModeReader::resetData()
|
||||
{
|
||||
m_hasData = false;
|
||||
m_cmakeConfiguration.clear();
|
||||
// m_cmakeFiles: Keep these!
|
||||
m_cmakeInputsFileNodes.clear();
|
||||
qDeleteAll(m_projects); // Also deletes targets and filegroups that are its children!
|
||||
m_projects.clear();
|
||||
m_targets.clear();
|
||||
m_fileGroups.clear();
|
||||
}
|
||||
|
||||
void ServerModeReader::parse(bool force)
|
||||
void ServerModeReader::parse(bool forceConfiguration)
|
||||
{
|
||||
emit configurationStarted();
|
||||
|
||||
QTC_ASSERT(m_cmakeServer, return);
|
||||
QVariantMap extra;
|
||||
if (force || !QDir(m_parameters.buildDirectory.toString()).exists("CMakeCache.txt")) {
|
||||
if (forceConfiguration || !QDir(m_parameters.buildDirectory.toString()).exists("CMakeCache.txt")) {
|
||||
QStringList cacheArguments = transform(m_parameters.configuration,
|
||||
[this](const CMakeConfigItem &i) {
|
||||
return i.toArgument(m_parameters.expander);
|
||||
@@ -208,12 +220,7 @@ bool ServerModeReader::isParsing() const
|
||||
return static_cast<bool>(m_future);
|
||||
}
|
||||
|
||||
bool ServerModeReader::hasData() const
|
||||
{
|
||||
return m_hasData;
|
||||
}
|
||||
|
||||
QList<CMakeBuildTarget> ServerModeReader::buildTargets() const
|
||||
QList<CMakeBuildTarget> ServerModeReader::takeBuildTargets()
|
||||
{
|
||||
const QList<CMakeBuildTarget> result = transform(m_targets, [](const Target *t) -> CMakeBuildTarget {
|
||||
CMakeBuildTarget ct;
|
||||
@@ -246,8 +253,8 @@ QList<CMakeBuildTarget> ServerModeReader::buildTargets() const
|
||||
|
||||
CMakeConfig ServerModeReader::takeParsedConfiguration()
|
||||
{
|
||||
CMakeConfig config = m_cmakeCache;
|
||||
m_cmakeCache.clear();
|
||||
CMakeConfig config = m_cmakeConfiguration;
|
||||
m_cmakeConfiguration.clear();
|
||||
return config;
|
||||
}
|
||||
|
||||
@@ -372,11 +379,6 @@ void ServerModeReader::updateCodeModel(CppTools::RawProjectParts &rpps)
|
||||
: CppTools::ProjectPart::Library);
|
||||
rpps.append(rpp);
|
||||
}
|
||||
|
||||
qDeleteAll(m_projects); // Not used anymore!
|
||||
m_projects.clear();
|
||||
m_targets.clear();
|
||||
m_fileGroups.clear();
|
||||
}
|
||||
|
||||
void ServerModeReader::handleReply(const QVariantMap &data, const QString &inReplyTo)
|
||||
@@ -415,7 +417,6 @@ void ServerModeReader::handleReply(const QVariantMap &data, const QString &inRep
|
||||
m_future->reportFinished();
|
||||
m_future.reset();
|
||||
}
|
||||
m_hasData = true;
|
||||
Core::MessageManager::write(tr("CMake Project was parsed successfully."));
|
||||
emit dataAvailable();
|
||||
}
|
||||
@@ -672,7 +673,7 @@ void ServerModeReader::extractCacheData(const QVariantMap &data)
|
||||
item.values = CMakeConfigItem::cmakeSplitValue(properties.value("STRINGS").toString(), true);
|
||||
config.append(item);
|
||||
}
|
||||
m_cmakeCache = config;
|
||||
m_cmakeConfiguration = config;
|
||||
}
|
||||
|
||||
void ServerModeReader::fixTarget(ServerModeReader::Target *target) const
|
||||
|
||||
Reference in New Issue
Block a user