aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/haskell/haskellproject.cpp
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2019-12-19 15:12:08 +0100
committerEike Ziller <eike.ziller@qt.io>2019-12-20 09:29:24 +0000
commit9dd2477c2a9f7383e9eaa0b6f6b1f7691baae1f1 (patch)
tree721f3301b09693c5475f6fd2efbf4e6ab64c4a94 /plugins/haskell/haskellproject.cpp
parentb7fd81f7ad7d4b5df8f3934708ab6bc0b3acb14e (diff)
Adapt to changes in upstream
Change-Id: Ib541f1cedacf4472223d11ae545a3d444190180c Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'plugins/haskell/haskellproject.cpp')
-rw-r--r--plugins/haskell/haskellproject.cpp63
1 files changed, 29 insertions, 34 deletions
diff --git a/plugins/haskell/haskellproject.cpp b/plugins/haskell/haskellproject.cpp
index fdea603..c4d4318 100644
--- a/plugins/haskell/haskellproject.cpp
+++ b/plugins/haskell/haskellproject.cpp
@@ -65,18 +65,12 @@ static QVector<QString> parseExecutableNames(const FilePath &projectFilePath)
return result;
}
-HaskellProjectNode::HaskellProjectNode(const FilePath &projectFilePath)
- : ProjectNode(projectFilePath)
-{}
-
HaskellProject::HaskellProject(const Utils::FilePath &fileName)
: Project(Constants::C_HASKELL_PROJECT_MIMETYPE, fileName)
{
setId(Constants::C_HASKELL_PROJECT_ID);
setDisplayName(fileName.toFileInfo().completeBaseName());
- updateFiles();
- connect(this, &Project::activeTargetChanged, this, &HaskellProject::updateApplicationTargets);
- connect(this, &Project::projectFileIsDirty, this, &HaskellProject::refresh);
+ setBuildSystemCreator([](Target *t) { return new HaskellBuildSystem(t); });
}
bool HaskellProject::isHaskellProject(Project *project)
@@ -84,35 +78,43 @@ bool HaskellProject::isHaskellProject(Project *project)
return project && project->id() == Constants::C_HASKELL_PROJECT_ID;
}
-void HaskellProject::updateFiles()
+HaskellBuildSystem::HaskellBuildSystem(Target *t)
+ : BuildSystem(t)
{
- m_parseGuard = guardParsingRun();
- FilePath projectDir = projectDirectory();
- QFuture<QList<FileNode *>> future = Utils::runAsync([this, projectDir] {
- return FileNode::scanForFiles(projectDir, [this](const FilePath &fn) -> FileNode * {
- if (fn != FilePath::fromString(projectFilePath().toString() + ".user"))
- return new FileNode(fn, FileType::Source);
- else
- return nullptr;
- });
- });
- Utils::onResultReady(future, this, [this](const QList<FileNode *> &nodes) {
- auto root = new HaskellProjectNode(projectDirectory());
- root->setDisplayName(displayName());
+ connect(&m_scanner, &TreeScanner::finished, this, [this] {
+ auto root = std::make_unique<ProjectNode>(projectDirectory());
+ root->setDisplayName(target()->project()->displayName());
std::vector<std::unique_ptr<FileNode>> nodePtrs
- = Utils::transform<std::vector>(nodes, [](FileNode *fn) {
+ = Utils::transform<std::vector>(m_scanner.release(), [](FileNode *fn) {
return std::unique_ptr<FileNode>(fn);
});
root->addNestedNodes(std::move(nodePtrs));
- setRootProjectNode(std::unique_ptr<ProjectNode>(root));
+ setRootProjectNode(std::move(root));
+
+ updateApplicationTargets();
+
m_parseGuard.markAsSuccess();
m_parseGuard = {};
+
+ emitBuildSystemUpdated();
});
+
+ connect(target()->project(),
+ &Project::projectFileIsDirty,
+ this,
+ &BuildSystem::requestDelayedParse);
+
+ requestDelayedParse();
}
-void HaskellProject::updateApplicationTargets(Target *target)
+void HaskellBuildSystem::triggerParsing()
+{
+ m_parseGuard = guardParsingRun();
+ m_scanner.asyncScanForFiles(target()->project()->projectDirectory());
+}
+
+void HaskellBuildSystem::updateApplicationTargets()
{
- QTC_ASSERT(target, return);
const QVector<QString> executables = parseExecutableNames(projectFilePath());
const Utils::FilePath projFilePath = projectFilePath();
const QList<BuildTargetInfo> appTargets
@@ -125,15 +127,8 @@ void HaskellProject::updateApplicationTargets(Target *target)
bti.isQtcRunnable = true;
return bti;
});
- target->setApplicationTargets(appTargets);
- target->updateDefaultRunConfigurations();
-}
-
-void HaskellProject::refresh()
-{
- updateFiles();
- if (activeTarget())
- updateApplicationTargets(activeTarget());
+ setApplicationTargets(appTargets);
+ target()->updateDefaultRunConfigurations();
}
} // namespace Internal