diff options
Diffstat (limited to 'src/plugins/cmakeprojectmanager/cmakebuildsystem.md')
-rw-r--r-- | src/plugins/cmakeprojectmanager/cmakebuildsystem.md | 150 |
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 +``` + |