forked from qt-creator/qt-creator
Observe the cration of extra compiler
We link into the extra compiler factory and notify the PchManager for every extra compiler creation. It enables to monitor if all extra compiler finished. Change-Id: If8da386c88909abd2e0e651e4336865c9dc5bf34 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
@@ -30,9 +30,9 @@ namespace V2 {
|
|||||||
|
|
||||||
QDebug operator<<(QDebug debug, const FileContainer &container)
|
QDebug operator<<(QDebug debug, const FileContainer &container)
|
||||||
{
|
{
|
||||||
debug.nospace() << "FileContainer("
|
debug.nospace() << "FileContainer(" << container.filePath << ", "
|
||||||
<< container.filePath << ", "
|
|
||||||
<< container.commandLineArguments << ", "
|
<< container.commandLineArguments << ", "
|
||||||
|
<< container.unsavedFileContent.hasContent() << ", "
|
||||||
<< container.documentRevision;
|
<< container.documentRevision;
|
||||||
|
|
||||||
debug.nospace() << ")";
|
debug.nospace() << ")";
|
||||||
|
@@ -28,6 +28,7 @@
|
|||||||
#include "pchmanagerprojectupdater.h"
|
#include "pchmanagerprojectupdater.h"
|
||||||
|
|
||||||
#include <cpptools/cppmodelmanager.h>
|
#include <cpptools/cppmodelmanager.h>
|
||||||
|
#include <projectexplorer/extracompiler.h>
|
||||||
|
|
||||||
#include <filecontainerv2.h>
|
#include <filecontainerv2.h>
|
||||||
|
|
||||||
@@ -50,7 +51,8 @@ CLANGPCHMANAGER_EXPORT std::vector<CppTools::ProjectPart*> createProjectParts(Pr
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename ProjectUpdaterType>
|
template<typename ProjectUpdaterType>
|
||||||
class QtCreatorProjectUpdater : public ProjectUpdaterType
|
class QtCreatorProjectUpdater : public ProjectUpdaterType,
|
||||||
|
public ProjectExplorer::ExtraCompilerFactoryObserver
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
template <typename ClientType>
|
template <typename ClientType>
|
||||||
@@ -90,6 +92,15 @@ public:
|
|||||||
ProjectUpdaterType::removeGeneratedFiles({ClangBackEnd::FilePath{filePath}});
|
ProjectUpdaterType::removeGeneratedFiles({ClangBackEnd::FilePath{filePath}});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void newExtraCompiler(const ProjectExplorer::Project *,
|
||||||
|
const Utils::FileName &,
|
||||||
|
const Utils::FileNameList &targets) override
|
||||||
|
{
|
||||||
|
for (const Utils::FileName &target : targets)
|
||||||
|
abstractEditorUpdated(target.toString(), {});
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void connectToCppModelManager()
|
void connectToCppModelManager()
|
||||||
{
|
{
|
||||||
|
@@ -52,7 +52,7 @@ namespace ProjectExplorer {
|
|||||||
|
|
||||||
Q_GLOBAL_STATIC(QThreadPool, s_extraCompilerThreadPool);
|
Q_GLOBAL_STATIC(QThreadPool, s_extraCompilerThreadPool);
|
||||||
Q_GLOBAL_STATIC(QList<ExtraCompilerFactory *>, factories);
|
Q_GLOBAL_STATIC(QList<ExtraCompilerFactory *>, factories);
|
||||||
|
Q_GLOBAL_STATIC(QVector<ExtraCompilerFactoryObserver *>, observers);
|
||||||
class ExtraCompilerPrivate
|
class ExtraCompilerPrivate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -310,7 +310,8 @@ void ExtraCompiler::setContent(const Utils::FileName &file, const QByteArray &co
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ExtraCompilerFactory::ExtraCompilerFactory(QObject *parent) : QObject(parent)
|
ExtraCompilerFactory::ExtraCompilerFactory(QObject *parent)
|
||||||
|
: QObject(parent)
|
||||||
{
|
{
|
||||||
factories->append(this);
|
factories->append(this);
|
||||||
}
|
}
|
||||||
@@ -320,6 +321,14 @@ ExtraCompilerFactory::~ExtraCompilerFactory()
|
|||||||
factories->removeAll(this);
|
factories->removeAll(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ExtraCompilerFactory::annouceCreation(const Project *project,
|
||||||
|
const Utils::FileName &source,
|
||||||
|
const Utils::FileNameList &targets)
|
||||||
|
{
|
||||||
|
for (ExtraCompilerFactoryObserver *observer : *observers)
|
||||||
|
observer->newExtraCompiler(project, source, targets);
|
||||||
|
}
|
||||||
|
|
||||||
QList<ExtraCompilerFactory *> ExtraCompilerFactory::extraCompilerFactories()
|
QList<ExtraCompilerFactory *> ExtraCompilerFactory::extraCompilerFactories()
|
||||||
{
|
{
|
||||||
return *factories();
|
return *factories();
|
||||||
@@ -455,4 +464,14 @@ void ProcessExtraCompiler::cleanUp()
|
|||||||
setCompileTime(QDateTime::currentDateTime());
|
setCompileTime(QDateTime::currentDateTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ExtraCompilerFactoryObserver::ExtraCompilerFactoryObserver()
|
||||||
|
{
|
||||||
|
observers->push_back(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
ExtraCompilerFactoryObserver::~ExtraCompilerFactoryObserver()
|
||||||
|
{
|
||||||
|
observers->removeOne(this);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ProjectExplorer
|
} // namespace ProjectExplorer
|
||||||
|
@@ -137,6 +137,20 @@ private:
|
|||||||
QFutureWatcher<FileNameToContentsHash> *m_watcher = nullptr;
|
QFutureWatcher<FileNameToContentsHash> *m_watcher = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class PROJECTEXPLORER_EXPORT ExtraCompilerFactoryObserver
|
||||||
|
{
|
||||||
|
friend class ExtraCompilerFactory;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
ExtraCompilerFactoryObserver();
|
||||||
|
~ExtraCompilerFactoryObserver();
|
||||||
|
|
||||||
|
virtual void newExtraCompiler(const Project *project,
|
||||||
|
const Utils::FileName &source,
|
||||||
|
const Utils::FileNameList &targets)
|
||||||
|
= 0;
|
||||||
|
};
|
||||||
|
|
||||||
class PROJECTEXPLORER_EXPORT ExtraCompilerFactory : public QObject
|
class PROJECTEXPLORER_EXPORT ExtraCompilerFactory : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@@ -147,8 +161,14 @@ public:
|
|||||||
virtual FileType sourceType() const = 0;
|
virtual FileType sourceType() const = 0;
|
||||||
virtual QString sourceTag() const = 0;
|
virtual QString sourceTag() const = 0;
|
||||||
|
|
||||||
virtual ExtraCompiler *create(const Project *project, const Utils::FileName &source,
|
virtual ExtraCompiler *create(const Project *project,
|
||||||
const Utils::FileNameList &targets) = 0;
|
const Utils::FileName &source,
|
||||||
|
const Utils::FileNameList &targets)
|
||||||
|
= 0;
|
||||||
|
|
||||||
|
void annouceCreation(const Project *project,
|
||||||
|
const Utils::FileName &source,
|
||||||
|
const Utils::FileNameList &targets);
|
||||||
|
|
||||||
static QList<ExtraCompilerFactory *> extraCompilerFactories();
|
static QList<ExtraCompilerFactory *> extraCompilerFactories();
|
||||||
};
|
};
|
||||||
|
@@ -149,6 +149,8 @@ ExtraCompiler *QScxmlcGeneratorFactory::create(
|
|||||||
const Project *project, const Utils::FileName &source,
|
const Project *project, const Utils::FileName &source,
|
||||||
const Utils::FileNameList &targets)
|
const Utils::FileNameList &targets)
|
||||||
{
|
{
|
||||||
|
annouceCreation(project, source, targets);
|
||||||
|
|
||||||
return new QScxmlcGenerator(project, source, targets, this);
|
return new QScxmlcGenerator(project, source, targets, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -100,6 +100,8 @@ ExtraCompiler *UicGeneratorFactory::create(const Project *project,
|
|||||||
const Utils::FileName &source,
|
const Utils::FileName &source,
|
||||||
const Utils::FileNameList &targets)
|
const Utils::FileNameList &targets)
|
||||||
{
|
{
|
||||||
|
annouceCreation(project, source, targets);
|
||||||
|
|
||||||
return new UicGenerator(project, source, targets, this);
|
return new UicGenerator(project, source, targets, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user