Skip to content

Commit f0ba164

Browse files
authored
Merge pull request swiftlang#793 from owenv/owenv/guid-refactor
Replace SWBConfiguredTargetGUID with SWBConfiguredTargetIdentifier
2 parents 4e31842 + cc7f178 commit f0ba164

9 files changed

+85
-86
lines changed

Sources/SWBBuildService/BuildDescriptionMessages.swift

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,11 @@ struct BuildDescriptionConfiguredTargetsMsg: MessageHandler {
9595
func handle(request: Request, message: BuildDescriptionConfiguredTargetsRequest) async throws -> BuildDescriptionConfiguredTargetsResponse {
9696
let buildDescription = try await request.buildDescription(for: message)
9797

98+
var configuredTargetIdentifiersByGUID: [String: ConfiguredTargetIdentifier] = [:]
99+
for configuredTarget in buildDescription.allConfiguredTargets {
100+
configuredTargetIdentifiersByGUID[configuredTarget.guid.stringValue] = ConfiguredTargetIdentifier(rawGUID: configuredTarget.guid.stringValue, targetGUID: TargetGUID(rawValue: configuredTarget.target.guid))
101+
}
102+
98103
let dependencyRelationships = Dictionary(
99104
buildDescription.targetDependencies.map { (ConfiguredTarget.GUID(id: $0.target.guid), [$0]) },
100105
uniquingKeysWith: { $0 + $1 }
@@ -116,10 +121,9 @@ struct BuildDescriptionConfiguredTargetsMsg: MessageHandler {
116121

117122
let dependencyRelationships = dependencyRelationships[configuredTarget.guid]
118123
return BuildDescriptionConfiguredTargetsResponse.ConfiguredTargetInfo(
119-
guid: ConfiguredTargetGUID(configuredTarget.guid.stringValue),
120-
target: TargetGUID(rawValue: configuredTarget.target.guid),
124+
identifier: ConfiguredTargetIdentifier(rawGUID: configuredTarget.guid.stringValue, targetGUID: TargetGUID(rawValue: configuredTarget.target.guid)),
121125
name: configuredTarget.target.name,
122-
dependencies: Set(dependencyRelationships?.flatMap(\.targetDependencies).map { ConfiguredTargetGUID($0.guid) } ?? []),
126+
dependencies: Set(dependencyRelationships?.flatMap(\.targetDependencies).compactMap { configuredTargetIdentifiersByGUID[$0.guid] } ?? []),
123127
toolchain: toolchain
124128
)
125129
}
@@ -143,7 +147,7 @@ fileprivate extension SourceLanguage {
143147

144148
struct BuildDescriptionConfiguredTargetSourcesMsg: MessageHandler {
145149
private struct UnknownConfiguredTargetIDError: Error, CustomStringConvertible {
146-
let configuredTarget: ConfiguredTargetGUID
150+
let configuredTarget: ConfiguredTargetIdentifier
147151
var description: String { "Unknown configured target: \(configuredTarget)" }
148152
}
149153

@@ -161,9 +165,9 @@ struct BuildDescriptionConfiguredTargetSourcesMsg: MessageHandler {
161165
}
162166

163167
let indexingInfoInput = TaskGenerateIndexingInfoInput(requestedSourceFile: nil, outputPathOnly: true, enableIndexBuildArena: false)
164-
let sourcesItems = try message.configuredTargets.map { configuredTargetGuid in
165-
guard let target = configuredTargetsByID[ConfiguredTarget.GUID(id: configuredTargetGuid.rawValue)] else {
166-
throw UnknownConfiguredTargetIDError(configuredTarget: configuredTargetGuid)
168+
let sourcesItems = try message.configuredTargets.map { configuredTargetIdentifier in
169+
guard let target = configuredTargetsByID[ConfiguredTarget.GUID(id: configuredTargetIdentifier.rawGUID)] else {
170+
throw UnknownConfiguredTargetIDError(configuredTarget: configuredTargetIdentifier)
167171
}
168172
let sourceFiles = buildDescription.taskStore.tasksForTarget(target).flatMap { task in
169173
task.generateIndexingInfo(input: indexingInfoInput).compactMap { (entry) -> SourceFileInfo? in
@@ -174,7 +178,7 @@ struct BuildDescriptionConfiguredTargetSourcesMsg: MessageHandler {
174178
)
175179
}
176180
}
177-
return ConfiguredTargetSourceFilesInfo(configuredTarget: configuredTargetGuid, sourceFiles: sourceFiles)
181+
return ConfiguredTargetSourceFilesInfo(configuredTarget: configuredTargetIdentifier, sourceFiles: sourceFiles)
178182
}
179183
return BuildDescriptionConfiguredTargetSourcesResponse(targetSourceFileInfos: sourcesItems)
180184
}
@@ -190,7 +194,7 @@ struct IndexBuildSettingsMsg: MessageHandler {
190194
func handle(request: Request, message: IndexBuildSettingsRequest) async throws -> IndexBuildSettingsResponse {
191195
let (buildRequest, buildDescription) = try await request.buildRequestAndDescription(for: message)
192196

193-
let configuredTarget = buildDescription.allConfiguredTargets.filter { $0.guid.stringValue == message.configuredTarget.rawValue }.only
197+
let configuredTarget = buildDescription.allConfiguredTargets.filter { $0.guid.stringValue == message.configuredTarget.rawGUID }.only
194198

195199
let indexingInfoInput = TaskGenerateIndexingInfoInput(
196200
requestedSourceFile: message.file,

Sources/SWBProtocol/BuildDescriptionMessages.swift

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@ public import SWBUtil
1414

1515
// MARK: Support types
1616

17-
public struct ConfiguredTargetGUID: Hashable, Sendable, Codable {
18-
public var rawValue: String
17+
public struct ConfiguredTargetIdentifier: Hashable, Sendable, Codable {
18+
public var rawGUID: String
19+
public var targetGUID: TargetGUID
1920

20-
public init(_ rawValue: String) {
21-
self.rawValue = rawValue
21+
public init(rawGUID: String, targetGUID: TargetGUID) {
22+
self.rawGUID = rawGUID
23+
self.targetGUID = targetGUID
2224
}
2325
}
2426

@@ -61,25 +63,21 @@ public struct BuildDescriptionConfiguredTargetsResponse: Message, SerializableCo
6163

6264
public struct ConfiguredTargetInfo: SerializableCodable, Equatable, Sendable {
6365
/// The GUID of this configured target
64-
public let guid: ConfiguredTargetGUID
65-
66-
/// The GUID of the target from which this configured target was created
67-
public let target: TargetGUID
66+
public let identifier: ConfiguredTargetIdentifier
6867

6968
/// A name of the target that may be displayed to the user
7069
public let name: String
7170

7271
/// The configured targets that this target depends on
73-
public let dependencies: Set<ConfiguredTargetGUID>
72+
public let dependencies: Set<ConfiguredTargetIdentifier>
7473

7574
/// The path of the toolchain that should be used to build this target.
7675
///
7776
/// `nil` if the toolchain for this target could not be determined due to an error.
7877
public let toolchain: Path?
7978

80-
public init(guid: ConfiguredTargetGUID, target: TargetGUID, name: String, dependencies: Set<ConfiguredTargetGUID>, toolchain: Path?) {
81-
self.guid = guid
82-
self.target = target
79+
public init(identifier: ConfiguredTargetIdentifier, name: String, dependencies: Set<ConfiguredTargetIdentifier>, toolchain: Path?) {
80+
self.identifier = identifier
8381
self.name = name
8482
self.dependencies = dependencies
8583
self.toolchain = toolchain
@@ -108,9 +106,9 @@ public struct BuildDescriptionConfiguredTargetSourcesRequest: SessionMessage, Re
108106
public let request: BuildRequestMessagePayload
109107

110108
/// The configured targets for which to load source file information
111-
public let configuredTargets: [ConfiguredTargetGUID]
109+
public let configuredTargets: [ConfiguredTargetIdentifier]
112110

113-
public init(sessionHandle: String, buildDescriptionID: BuildDescriptionID, request: BuildRequestMessagePayload, configuredTargets: [ConfiguredTargetGUID]) {
111+
public init(sessionHandle: String, buildDescriptionID: BuildDescriptionID, request: BuildRequestMessagePayload, configuredTargets: [ConfiguredTargetIdentifier]) {
114112
self.sessionHandle = sessionHandle
115113
self.buildDescriptionID = buildDescriptionID
116114
self.request = request
@@ -148,12 +146,12 @@ public struct BuildDescriptionConfiguredTargetSourcesResponse: Message, Serializ
148146

149147
public struct ConfiguredTargetSourceFilesInfo: SerializableCodable, Equatable, Sendable {
150148
/// The configured target to which this info belongs
151-
public let configuredTarget: ConfiguredTargetGUID
149+
public let configuredTarget: ConfiguredTargetIdentifier
152150

153151
/// Information about the source files in this source file
154152
public let sourceFiles: [SourceFileInfo]
155153

156-
public init(configuredTarget: ConfiguredTargetGUID, sourceFiles: [SourceFileInfo]) {
154+
public init(configuredTarget: ConfiguredTargetIdentifier, sourceFiles: [SourceFileInfo]) {
157155
self.configuredTarget = configuredTarget
158156
self.sourceFiles = sourceFiles
159157
}
@@ -182,7 +180,7 @@ public struct IndexBuildSettingsRequest: SessionMessage, RequestMessage, Seriali
182180
public let request: BuildRequestMessagePayload
183181

184182
/// The configured target in whose context the build settings of the source file should be loaded
185-
public let configuredTarget: ConfiguredTargetGUID
183+
public let configuredTarget: ConfiguredTargetIdentifier
186184

187185
/// The path of the source file for which the build settings should be loaded
188186
public let file: Path
@@ -191,7 +189,7 @@ public struct IndexBuildSettingsRequest: SessionMessage, RequestMessage, Seriali
191189
sessionHandle: String,
192190
buildDescriptionID: BuildDescriptionID,
193191
request: BuildRequestMessagePayload,
194-
configuredTarget: ConfiguredTargetGUID,
192+
configuredTarget: ConfiguredTargetIdentifier,
195193
file: Path
196194
) {
197195
self.sessionHandle = sessionHandle

Sources/SwiftBuild/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ add_library(SwiftBuild
4242
SWBBuildServiceSession.swift
4343
SWBChannel.swift
4444
SWBClientExchangeSupport.swift
45-
SWBConfiguredTargetGUID.swift
45+
SWBConfiguredTargetIdentifier.swift
4646
SWBConfiguredTargetInfo.swift
4747
SWBConfiguredTargetSourceFilesInfo.swift
4848
SWBDocumentationSupport.swift

Sources/SwiftBuild/SWBBuildServiceSession.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -393,25 +393,25 @@ public final class SWBBuildServiceSession: Sendable {
393393
return response.configuredTargets.map { SWBConfiguredTargetInfo($0) }
394394
}
395395

396-
public func sources(of configuredTargets: [SWBConfiguredTargetGUID], buildDescription: SWBBuildDescriptionID, buildRequest: SWBBuildRequest) async throws -> [SWBConfiguredTargetSourceFilesInfo] {
396+
public func sources(of configuredTargets: [SWBConfiguredTargetIdentifier], buildDescription: SWBBuildDescriptionID, buildRequest: SWBBuildRequest) async throws -> [SWBConfiguredTargetSourceFilesInfo] {
397397
let response = try await service.send(
398398
request: BuildDescriptionConfiguredTargetSourcesRequest(
399399
sessionHandle: uid,
400400
buildDescriptionID: BuildDescriptionID(buildDescription),
401401
request: buildRequest.messagePayloadRepresentation,
402-
configuredTargets: configuredTargets.map { ConfiguredTargetGUID($0) }
402+
configuredTargets: configuredTargets.map { ConfiguredTargetIdentifier($0) }
403403
)
404404
)
405405
return response.targetSourceFileInfos.map { SWBConfiguredTargetSourceFilesInfo($0) }
406406
}
407407

408-
public func indexCompilerArguments(of file: AbsolutePath, in configuredTarget: SWBConfiguredTargetGUID, buildDescription: SWBBuildDescriptionID, buildRequest: SWBBuildRequest) async throws -> [String] {
408+
public func indexCompilerArguments(of file: AbsolutePath, in configuredTarget: SWBConfiguredTargetIdentifier, buildDescription: SWBBuildDescriptionID, buildRequest: SWBBuildRequest) async throws -> [String] {
409409
let buildSettings = try await service.send(
410410
request: IndexBuildSettingsRequest(
411411
sessionHandle: uid,
412412
buildDescriptionID: BuildDescriptionID(buildDescription),
413413
request: buildRequest.messagePayloadRepresentation,
414-
configuredTarget: ConfiguredTargetGUID(configuredTarget),
414+
configuredTarget: ConfiguredTargetIdentifier(configuredTarget),
415415
file: Path(file.pathString)
416416
)
417417
)

Sources/SwiftBuild/SWBConfiguredTargetGUID.swift

Lines changed: 0 additions & 31 deletions
This file was deleted.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// This source file is part of the Swift open source project
4+
//
5+
// Copyright (c) 2025 Apple Inc. and the Swift project authors
6+
// Licensed under Apache License v2.0 with Runtime Library Exception
7+
//
8+
// See http://swift.org/LICENSE.txt for license information
9+
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10+
//
11+
//===----------------------------------------------------------------------===//
12+
13+
import SWBProtocol
14+
15+
public struct SWBConfiguredTargetIdentifier: Hashable, Sendable {
16+
public var rawGUID: String
17+
public var targetGUID: SWBTargetGUID
18+
19+
public init(rawGUID: String, targetGUID: SWBTargetGUID) {
20+
self.rawGUID = rawGUID
21+
self.targetGUID = targetGUID
22+
}
23+
24+
init(configuredTargetIdentifier: ConfiguredTargetIdentifier) {
25+
self.init(rawGUID: configuredTargetIdentifier.rawGUID, targetGUID: SWBTargetGUID(configuredTargetIdentifier.targetGUID))
26+
}
27+
}
28+
29+
extension ConfiguredTargetIdentifier {
30+
init(_ identifier: SWBConfiguredTargetIdentifier) {
31+
self.init(rawGUID: identifier.rawGUID, targetGUID: TargetGUID(rawValue: identifier.targetGUID.rawValue))
32+
}
33+
}

Sources/SwiftBuild/SWBConfiguredTargetInfo.swift

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,36 +14,31 @@ import SWBProtocol
1414

1515
public struct SWBConfiguredTargetInfo {
1616
/// The GUID of this configured target
17-
public let guid: SWBConfiguredTargetGUID
18-
19-
/// The GUID of the target from which this configured target was created
20-
public let target: SWBTargetGUID
17+
public let identifier: SWBConfiguredTargetIdentifier
2118

2219
/// A name of the target that may be displayed to the user
2320
public let name: String
2421

2522
/// The configured targets that this target depends on
26-
public let dependencies: Set<SWBConfiguredTargetGUID>
23+
public let dependencies: Set<SWBConfiguredTargetIdentifier>
2724

2825
/// The path of the toolchain that should be used to build this target.
2926
///
3027
/// `nil` if the toolchain for this target could not be determined due to an error.
3128
public let toolchain: AbsolutePath?
3229

33-
public init(guid: SWBConfiguredTargetGUID, target: SWBTargetGUID, name: String, dependencies: Set<SWBConfiguredTargetGUID>, toolchain: AbsolutePath?) {
34-
self.guid = guid
35-
self.target = target
30+
public init(identifier: SWBConfiguredTargetIdentifier, name: String, dependencies: Set<SWBConfiguredTargetIdentifier>, toolchain: AbsolutePath?) {
31+
self.identifier = identifier
3632
self.name = name
3733
self.dependencies = dependencies
3834
self.toolchain = toolchain
3935
}
4036

4137
init(_ configuredTargetInfo: BuildDescriptionConfiguredTargetsResponse.ConfiguredTargetInfo) {
4238
self.init(
43-
guid: SWBConfiguredTargetGUID(configuredTargetInfo.guid),
44-
target: SWBTargetGUID(configuredTargetInfo.target),
39+
identifier: SWBConfiguredTargetIdentifier(configuredTargetIdentifier: configuredTargetInfo.identifier),
4540
name: configuredTargetInfo.name,
46-
dependencies: Set(configuredTargetInfo.dependencies.map { SWBConfiguredTargetGUID($0) }),
41+
dependencies: Set(configuredTargetInfo.dependencies.map { SWBConfiguredTargetIdentifier(configuredTargetIdentifier: $0) }),
4742
toolchain: AbsolutePath(configuredTargetInfo.toolchain)
4843
)
4944
}

Sources/SwiftBuild/SWBConfiguredTargetSourceFilesInfo.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,18 @@ public struct SWBConfiguredTargetSourceFilesInfo: Equatable, Sendable {
4545
}
4646

4747
/// The configured target to which this info belongs
48-
public let configuredTarget: SWBConfiguredTargetGUID
48+
public let configuredTarget: SWBConfiguredTargetIdentifier
4949

5050
/// Information about the source files in this source file
5151
public let sourceFiles: [SourceFileInfo]
5252

53-
public init(configuredTarget: SWBConfiguredTargetGUID, sourceFiles: [SWBConfiguredTargetSourceFilesInfo.SourceFileInfo]) {
53+
public init(configuredTarget: SWBConfiguredTargetIdentifier, sourceFiles: [SWBConfiguredTargetSourceFilesInfo.SourceFileInfo]) {
5454
self.configuredTarget = configuredTarget
5555
self.sourceFiles = sourceFiles
5656
}
5757

5858
init(_ sourceFilesInfo: BuildDescriptionConfiguredTargetSourcesResponse.ConfiguredTargetSourceFilesInfo) {
59-
self.configuredTarget = SWBConfiguredTargetGUID(sourceFilesInfo.configuredTarget)
59+
self.configuredTarget = SWBConfiguredTargetIdentifier(configuredTargetIdentifier: sourceFilesInfo.configuredTarget)
6060
self.sourceFiles = sourceFilesInfo.sourceFiles.map { SourceFileInfo($0) }
6161
}
6262
}

0 commit comments

Comments
 (0)