Skip to content

Commit

Permalink
Fix multi-threaded access when generic types are generated
Browse files Browse the repository at this point in the history
  • Loading branch information
PaulTaykalo committed Jul 22, 2024
1 parent 81033ec commit 5029e6f
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions SourceryRuntime/Sources/Common/Composer/Composer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,21 @@ public enum Composer {
public static func uniqueTypesAndFunctions(_ parserResult: FileParserResult, serial: Bool = false) -> (types: [Type], functions: [SourceryMethod], typealiases: [Typealias]) {
let composed = ParserResultsComposed(parserResult: parserResult)

let resolveTypeLock = NSLock()
let resolveType = { (typeName: TypeName, containingType: Type?) -> Type? in
composed.resolveType(typeName: typeName, containingType: containingType)
var result: Type?
resolveTypeLock.lock()
result = composed.resolveType(typeName: typeName, containingType: containingType)
resolveTypeLock.unlock()
return result
}

let methodResolveType = { (typeName: TypeName, containingType: Type?, method: Method) -> Type? in
composed.resolveType(typeName: typeName, containingType: containingType, method: method)
var result: Type?
resolveTypeLock.lock()
result = composed.resolveType(typeName: typeName, containingType: containingType, method: method)
resolveTypeLock.unlock()
return result
}

let processType = { (type: Type) in
Expand Down

0 comments on commit 5029e6f

Please sign in to comment.