Create BuildSystem in BuiltInBuildSystemAdapter

This finalizes the move of `BuiltInBuildSystem` creation into `BuiltInBuildSystemAdapter` and means that we can set the message handler of the `BuiltInBuildSystem` during initialization instead of using a setter method.
This commit is contained in:
Alex Hoppen
2024-08-24 00:37:25 -07:00
parent 9f4088038c
commit ea21175dd7
11 changed files with 115 additions and 93 deletions

View File

@@ -77,15 +77,12 @@ package actor BuildServerBuildSystem: MessageHandler {
package weak var messageHandler: BuiltInBuildSystemMessageHandler?
package func setMessageHandler(_ messageHandler: any BuiltInBuildSystemMessageHandler) {
self.messageHandler = messageHandler
}
/// The build settings that have been received from the build server.
private var buildSettings: [DocumentURI: FileBuildSettings] = [:]
package init(
projectRoot: AbsolutePath,
messageHandler: BuiltInBuildSystemMessageHandler?,
fileSystem: FileSystem = localFileSystem
) async throws {
let configPath = projectRoot.appending(component: "buildServer.json")
@@ -105,17 +102,18 @@ package actor BuildServerBuildSystem: MessageHandler {
#endif
self.projectRoot = projectRoot
self.serverConfig = config
self.messageHandler = messageHandler
try await self.initializeBuildServer()
}
/// Creates a build system using the Build Server Protocol config.
///
/// - Returns: nil if `projectRoot` has no config or there is an error parsing it.
package init?(projectRoot: AbsolutePath?) async {
package init?(projectRoot: AbsolutePath?, messageHandler: BuiltInBuildSystemMessageHandler?) async {
guard let projectRoot else { return nil }
do {
try await self.init(projectRoot: projectRoot)
try await self.init(projectRoot: projectRoot, messageHandler: messageHandler)
} catch is FileSystemError {
// config file was missing, no build server for this workspace
return nil