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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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