aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cmakeprojectmanager/cmakebuildsystem.md
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cmakeprojectmanager/cmakebuildsystem.md')
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildsystem.md150
1 files changed, 150 insertions, 0 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.md b/src/plugins/cmakeprojectmanager/cmakebuildsystem.md
new file mode 100644
index 0000000000..ff42461bb1
--- /dev/null
+++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.md
@@ -0,0 +1,150 @@
+# `CMakeBuildSystem`
+
+## Big Picture: `BuildSystem`
+
+This is a sequence diagram of how `ProjectExplorer::BuildSystem` interacts with
+its implementations:
+
+```mermaid
+sequenceDiagram
+ User ->> BuildSystemImpl: provide data and ask for parse (impl. defined!)
+ BuildSystemImpl ->> BuildSystem: call requestParse() or requestDelayedParse()
+ activate BuildSystem
+ BuildSystem ->> BuildSys tem: m_delayedParsingTimer sends timeout()
+ BuildSystem ->> BuildSystemImpl: call triggerParsing()
+ deactivate BuildSystem
+ activate BuildSystemImpl
+ BuildSystemImpl ->> BuildSystem: call guardParsingRun()
+ activate BuildSystem
+ BuildSystem ->> ParseGuard: Construct
+ activate ParseGuard
+ ParseGuard ->> BuildSystem: call emitParsingStarted
+ BuildSystem ->> User: signal parsingStarted()
+ BuildSystem ->> BuildSystemImpl: Hand over ParseGuard
+ deactivate BuildSystem
+ BuildSystemImpl ->> BuildSystemImpl: Do parsing
+ opt Report Success
+ BuildSystemImpl ->> ParseGuard: markAsSuccess()
+ end
+ BuildSystemImpl ->> ParseGuard: Destruct
+ ParseGuard ->> BuildSystem: emitParsingFinished()
+ activate BuildSystem
+ BuildSystem ->> User: Signal ParsingFinished(...)
+ deactivate BuildSystem
+ deactivate ParseGuard
+ deactivate BuildSystemImpl
+```
+
+## The Details of `CMakeBuildSystem`
+
+### States Overview
+
+```mermaid
+graph TD
+ parse --> TreeScanner::asyncScanForFiles
+
+ parse --> FileApiReader::parse
+ FileApiReader::parse --> handleParsingSucceeded
+ handleParsingSucceeded --> combineScanAndParse
+ FileApiReader::parse --> handleParsingFailed
+ handleParsingFailed --> combineScanAndParse
+
+ TreeScanner::asyncScanForFiles --> handleTreeScanningFinished
+ handleTreeScanningFinished --> combineScanAndParse
+```
+
+### Full Sequence Diagram
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant ParseGuard
+ participant CMakeBuildSystem
+ participant FileApiReader
+
+ alt Trigger Parsing
+ User ->> CMakeBuildSystem: Any of the Actions defined for CMakeBuildSystem
+ else
+ User ->> CMakeBuildSystem: Signal from outside the CMakeBuildSystem
+ end
+ activate CMakeBuildSystem
+ CMakeBuildSystem ->> CMakeBuildSystem: call setParametersAndRequestReparse()
+ CMakeBuildSystem ->> CMakeBuildSystem: Validate parameters
+ CMakeBuildSystem ->> FileApiReader: Construct
+ activate FileApiReader
+ CMakeBuildSystem ->> FileApiReader: call setParameters
+ CMakeBuildSystem ->> CMakeBuildSystem: call request*Reparse()
+ deactivate CMakeBuildSystem
+
+ CMakeBuildSystem ->> CMakeBuildSystem: m_delayedParsingTimer sends timeout() triggering triggerParsing()
+
+ activate CMakeBuildSystem
+
+ CMakeBuildSystem ->>+ CMakeBuildSystem: call guardParsingRun()
+ CMakeBuildSystem ->> ParseGuard: Construct
+ activate ParseGuard
+ ParseGuard ->> CMakeBuildSystem: call emitParsingStarted
+ CMakeBuildSystem ->> User: signal parsingStarted()
+ CMakeBuildSystem ->>- CMakeBuildSystem: Hand over ParseGuard
+
+ CMakeBuildSystem ->>+ TreeScanner: call asyncScanForFiles()
+
+ CMakeBuildSystem ->>+ FileApiReader: call parse(...)
+ FileApiReader ->> FileApiReader: startState()
+ deactivate CMakeBuildSystem
+
+ opt Parse
+ FileApiReader ->> FileApiReader: call startCMakeState(...)
+ FileApiReader ->> FileApiReader: call cmakeFinishedState(...)
+ end
+
+ FileApiReader ->> FileApiReader: call endState(...)
+
+ alt Return Result from FileApiReader
+ FileApiReader ->> CMakeBuildSystem: signal dataAvailable() and trigger handleParsingSucceeded()
+ CMakeBuildSystem ->> FileApiReader: call takeBuildTargets()
+ CMakeBuildSystem ->> FileApiReader: call takeParsedConfiguration(....)
+ else
+ FileApiReader ->> CMakeBuildSystem: signal errorOccurred(...) and trigger handelParsingFailed(...)
+ CMakeBuildSystem ->> FileApiReader: call takeParsedConfiguration(....)
+ end
+
+ deactivate FileApiReader
+ Note right of CMakeBuildSystem: TreeScanner is still missing here
+ CMakeBuildSystem ->> CMakeBuildSystem: call combineScanAndParse()
+
+ TreeScanner ->> CMakeBuildSystem: signal finished() triggering handleTreeScanningFinished()
+ CMakeBuildSystem ->> TreeScanner: call release() to get files
+ deactivate TreeScanner
+ Note right of CMakeBuildSystem: All results are in now...
+ CMakeBuildSystem ->> CMakeBuildSystem: call combineScanAndParse()
+
+ activate CMakeBuildSystem
+ opt: Parsing was a success
+ CMakeBuildSystem ->> CMakeBuildSystem: call updateProjectData()
+ CMakeBuildSystem ->> FileApiReader: call projectFilesToWatch()
+ CMakeBuildSystem ->> FileApiReader: call createRawProjectParts(...)
+ CMakeBuildSystem ->> FileApiReader: call resetData()
+ CMakeBuildSystem ->> ParseGuard: call markAsSuccess()
+ end
+
+ CMakeBuildSystem ->> ParseGuard: Destruct
+ deactivate ParseGuard
+
+ CMakeBuildSystem ->> CMakeBuildSystem: call emitBuildSystemUpdated()
+ deactivate FileApiReader
+ deactivate CMakeBuildSystem
+```
+
+# `FileApiReader`
+
+States in the `FileApiReader`.
+
+```mermaid
+graph TD
+ startState --> startCMakeState
+ startState --> endState
+ startCMakeState --> cmakeFinishedState
+ cmakeFinishedState --> endState
+```
+