@@ -14,19 +14,22 @@ import Foundation
1414
1515public enum ModuleDependencyId : Hashable {
1616 case swift( String )
17+ case swiftPlaceholder( String )
1718 case clang( String )
1819
19- public var moduleName : String {
20+ var moduleName : String {
2021 switch self {
21- case . swift( let name) : return name
22- case . clang( let name) : return name
22+ case . swift( let name) : return name
23+ case . swiftPlaceholder( let name) : return name
24+ case . clang( let name) : return name
2325 }
2426 }
2527}
2628
2729extension ModuleDependencyId : Codable {
2830 enum CodingKeys : CodingKey {
2931 case swift
32+ case swiftPlaceholder
3033 case clang
3134 }
3235
@@ -36,8 +39,13 @@ extension ModuleDependencyId: Codable {
3639 let moduleName = try container. decode ( String . self, forKey: . swift)
3740 self = . swift( moduleName)
3841 } catch {
39- let moduleName = try container. decode ( String . self, forKey: . clang)
40- self = . clang( moduleName)
42+ do {
43+ let moduleName = try container. decode ( String . self, forKey: . swiftPlaceholder)
44+ self = . swiftPlaceholder( moduleName)
45+ } catch {
46+ let moduleName = try container. decode ( String . self, forKey: . clang)
47+ self = . clang( moduleName)
48+ }
4149 }
4250 }
4351
@@ -46,12 +54,21 @@ extension ModuleDependencyId: Codable {
4654 switch self {
4755 case . swift( let moduleName) :
4856 try container. encode ( moduleName, forKey: . swift)
57+ case . swiftPlaceholder( let moduleName) :
58+ try container. encode ( moduleName, forKey: . swift)
4959 case . clang( let moduleName) :
5060 try container. encode ( moduleName, forKey: . clang)
5161 }
5262 }
5363}
5464
65+ /// Bridging header
66+ public struct BridgingHeader : Codable {
67+ var path : String
68+ var sourceFiles : [ String ]
69+ var moduleDependencies : [ String ]
70+ }
71+
5572/// Details specific to Swift modules.
5673public struct SwiftModuleDetails : Codable {
5774 /// The module interface from which this module was built, if any.
@@ -75,7 +92,16 @@ public struct SwiftModuleDetails: Codable {
7592 /// To build a PCM to be used by this Swift module, we need to append these
7693 /// arguments to the generic PCM build arguments reported from the dependency
7794 /// graph.
78- public var extraPcmArgs : [ String ] ? = [ ]
95+ var extraPcmArgs : [ String ] ?
96+ }
97+
98+ /// Details specific to Swift external modules.
99+ public struct swiftPlaceholderModuleDetails : Codable {
100+ /// The path to the .swiftModuleDoc file.
101+ var moduleDocPath : String ?
102+
103+ /// The path to the .swiftSourceInfo file.
104+ var moduleSourceInfoPath : String ?
79105}
80106
81107/// Details specific to Clang modules.
@@ -95,10 +121,10 @@ public struct ModuleInfo: Codable {
95121 public var modulePath : String
96122
97123 /// The source files used to build this module.
98- public var sourceFiles : [ String ] = [ ]
124+ public var sourceFiles : [ String ] ? = [ ]
99125
100126 /// The set of direct module dependencies of this module.
101- public var directDependencies : [ ModuleDependencyId ] = [ ]
127+ public var directDependencies : [ ModuleDependencyId ] ? = [ ]
102128
103129 /// Specific details of a particular kind of module.
104130 public var details : Details
@@ -109,6 +135,10 @@ public struct ModuleInfo: Codable {
109135 /// a bridging header.
110136 case swift( SwiftModuleDetails )
111137
138+ /// Swift external modules carry additional details that specify their
139+ /// module doc path and source info paths.
140+ case swiftPlaceholder( swiftPlaceholderModuleDetails )
141+
112142 /// Clang modules are built from a module map file.
113143 case clang( ClangModuleDetails )
114144 }
@@ -117,6 +147,7 @@ public struct ModuleInfo: Codable {
117147extension ModuleInfo . Details : Codable {
118148 enum CodingKeys : CodingKey {
119149 case swift
150+ case swiftPlaceholder
120151 case clang
121152 }
122153
@@ -126,8 +157,13 @@ extension ModuleInfo.Details: Codable {
126157 let details = try container. decode ( SwiftModuleDetails . self, forKey: . swift)
127158 self = . swift( details)
128159 } catch {
129- let details = try container. decode ( ClangModuleDetails . self, forKey: . clang)
130- self = . clang( details)
160+ do {
161+ let details = try container. decode ( swiftPlaceholderModuleDetails. self, forKey: . swiftPlaceholder)
162+ self = . swiftPlaceholder( details)
163+ } catch {
164+ let details = try container. decode ( ClangModuleDetails . self, forKey: . clang)
165+ self = . clang( details)
166+ }
131167 }
132168 }
133169
@@ -136,6 +172,8 @@ extension ModuleInfo.Details: Codable {
136172 switch self {
137173 case . swift( let details) :
138174 try container. encode ( details, forKey: . swift)
175+ case . swiftPlaceholder( let details) :
176+ try container. encode ( details, forKey: . swiftPlaceholder)
139177 case . clang( let details) :
140178 try container. encode ( details, forKey: . clang)
141179 }
0 commit comments