@@ -127,22 +127,36 @@ public final class BuildOperation: PackageStructureDelegate, SPMBuildCore.BuildS
127
127
guard SwiftTargetBuildDescription . checkSupportedFrontendFlags ( flags: [ " import-prescan " ] , fs: localFileSystem) else {
128
128
return
129
129
}
130
+
130
131
for (target, commandLine) in description. swiftTargetScanArgs {
131
132
do {
132
133
guard let dependencies = description. targetDependencyMap [ target] else {
133
134
// Skip target if no dependency information is present
134
135
continue
135
136
}
137
+ let targetDependenciesSet = Set ( dependencies)
138
+ guard !description. generatedSourceTargetSet. contains ( target) ,
139
+ targetDependenciesSet. intersection ( description. generatedSourceTargetSet) . isEmpty else {
140
+ // Skip targets which contain, or depend-on-targets, with generated source-code.
141
+ // Such as test discovery targets and targets with plugins.
142
+ continue
143
+ }
136
144
let resolver = try ArgsResolver ( fileSystem: localFileSystem)
137
145
let executor = SPMSwiftDriverExecutor ( resolver: resolver,
138
146
fileSystem: localFileSystem,
139
147
env: ProcessEnv . vars)
148
+
149
+ let consumeDiagnostics : DiagnosticsEngine = DiagnosticsEngine ( handlers: [ ] )
140
150
var driver = try Driver ( args: commandLine,
141
- diagnosticsEngine: diagnostics ,
151
+ diagnosticsEngine: consumeDiagnostics ,
142
152
fileSystem: localFileSystem,
143
153
executor: executor)
154
+ guard !consumeDiagnostics. hasErrors else {
155
+ // If we could not init the driver with this command, something went wrong,
156
+ // proceed without checking this target.
157
+ continue
158
+ }
144
159
let imports = try driver. performImportPrescan ( ) . imports
145
- let targetDependenciesSet = Set ( dependencies)
146
160
let nonDependencyTargetsSet =
147
161
Set ( description. targetDependencyMap. keys. filter { !targetDependenciesSet. contains ( $0) } )
148
162
let importedTargetsMissingDependency = Set ( imports) . intersection ( nonDependencyTargetsSet)
0 commit comments