CMake: Make all readers use isReadyNow() signal

The tealeafreader used to not ever use this signal and used
the isReady() method to short-circuit the whole mechanism.

Change-Id: I2f7caedeedf977c70a5d7807e3a92775757a6fef
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Tobias Hunger
2019-06-05 15:56:37 +02:00
parent 76fc2e0b26
commit c961d9fc9e
7 changed files with 21 additions and 28 deletions

View File

@@ -107,8 +107,11 @@ void BuildDirManager::emitErrorOccured(const QString &message) const
void BuildDirManager::updateReaderType(const BuildDirParameters &p,
std::function<void()> todo)
{
if (!m_reader || !m_reader->isCompatible(p)) {
if (!m_reader || !m_reader->isCompatible(p))
m_reader = BuildDirReader::createReader(p);
QTC_ASSERT(m_reader, return);
connect(m_reader.get(), &BuildDirReader::configurationStarted,
this, &BuildDirManager::parsingStarted);
connect(m_reader.get(), &BuildDirReader::dataAvailable,
@@ -116,15 +119,9 @@ void BuildDirManager::updateReaderType(const BuildDirParameters &p,
connect(m_reader.get(), &BuildDirReader::errorOccured,
this, &BuildDirManager::emitErrorOccured);
connect(m_reader.get(), &BuildDirReader::dirty, this, &BuildDirManager::becameDirty);
}
QTC_ASSERT(m_reader, return);
connect(m_reader.get(), &BuildDirReader::isReadyNow, this, todo);
m_reader->setParameters(p);
if (m_reader->isReady())
todo();
else
connect(m_reader.get(), &BuildDirReader::isReadyNow, this, todo);
}
bool BuildDirManager::hasConfigChanged()

View File

@@ -48,10 +48,5 @@ std::unique_ptr<BuildDirReader> BuildDirReader::createReader(const BuildDirParam
return std::make_unique<TeaLeafReader>();
}
void BuildDirReader::setParameters(const BuildDirParameters &p)
{
m_parameters = p;
}
} // namespace Internal
} // namespace CMakeProjectManager

View File

@@ -53,14 +53,13 @@ class BuildDirReader : public QObject
public:
static std::unique_ptr<BuildDirReader> createReader(const BuildDirParameters &p);
virtual void setParameters(const BuildDirParameters &p);
virtual void setParameters(const BuildDirParameters &p) = 0;
virtual bool isCompatible(const BuildDirParameters &p) = 0;
virtual void resetData() = 0;
virtual void parse(bool forceConfiguration) = 0;
virtual void stop() = 0;
virtual bool isReady() const { return true; }
virtual bool isParsing() const = 0;
virtual QList<CMakeBuildTarget> takeBuildTargets() = 0;

View File

@@ -101,7 +101,7 @@ void ServerModeReader::setParameters(const BuildDirParameters &p)
CMakeTool *cmake = p.cmakeTool();
QTC_ASSERT(cmake, return);
BuildDirReader::setParameters(p);
m_parameters = p;
if (!m_cmakeServer) {
m_cmakeServer.reset(new ServerMode(p.environment,
p.sourceDirectory, p.workDirectory,
@@ -213,11 +213,6 @@ void ServerModeReader::stop()
m_parser.flush();
}
bool ServerModeReader::isReady() const
{
return m_cmakeServer->isConnected();
}
bool ServerModeReader::isParsing() const
{
return static_cast<bool>(m_future);

View File

@@ -53,7 +53,6 @@ public:
void parse(bool forceConfiguration) final;
void stop() final;
bool isReady() const final;
bool isParsing() const final;
QList<CMakeBuildTarget> takeBuildTargets() final;

View File

@@ -152,6 +152,12 @@ TeaLeafReader::~TeaLeafReader()
resetData();
}
void TeaLeafReader::setParameters(const BuildDirParameters &p)
{
m_parameters = p;
emit isReadyNow();
}
bool TeaLeafReader::isCompatible(const BuildDirParameters &p)
{
if (!p.cmakeTool())

View File

@@ -46,6 +46,8 @@ public:
TeaLeafReader();
~TeaLeafReader() final;
void setParameters(const BuildDirParameters &p) final;
bool isCompatible(const BuildDirParameters &p) final;
void resetData() final;
void parse(bool forceConfiguration) final;