Skip to content

Commit

Permalink
Expand serialParse flag to also apply to Composer.uniqueTypesAndFunct…
Browse files Browse the repository at this point in the history
…ions (#1301)
  • Loading branch information
calda authored Mar 13, 2024
1 parent 735659c commit df53fed
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 7 deletions.
2 changes: 1 addition & 1 deletion Sourcery/Sourcery.swift
Original file line number Diff line number Diff line change
Expand Up @@ -405,7 +405,7 @@ extension Sourcery {
let uniqueTypeStart = currentTimestamp()

// ! All files have been scanned, time to join extensions with base class
let (types, functions, typealiases) = Composer.uniqueTypesAndFunctions(parserResult)
let (types, functions, typealiases) = Composer.uniqueTypesAndFunctions(parserResult, serial: serialParse)


let filesThatHadToBeParsed = allResults
Expand Down
4 changes: 2 additions & 2 deletions SourceryRuntime/Sources/Common/Array+Parallel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ public extension Array {
}
}

func parallelPerform(transform: (Element) -> Void) {
func parallelPerform(_ work: (Element) -> Void) {
DispatchQueue.concurrentPerform(iterations: count) { idx in
transform(self[idx])
work(self[idx])
}
}
}
15 changes: 12 additions & 3 deletions SourceryRuntime/Sources/Common/Composer/Composer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ public enum Composer {
/// - filters out any private types and extensions
///
/// - Parameter parserResult: Result of parsing source code.
/// - Parameter serial: Whether to process results serially instead of concurrently
/// - Returns: Final types and extensions of unknown types.
public static func uniqueTypesAndFunctions(_ parserResult: FileParserResult) -> (types: [Type], functions: [SourceryMethod], typealiases: [Typealias]) {
public static func uniqueTypesAndFunctions(_ parserResult: FileParserResult, serial: Bool = false) -> (types: [Type], functions: [SourceryMethod], typealiases: [Typealias]) {
let composed = ParserResultsComposed(parserResult: parserResult)

let resolveType = { (typeName: TypeName, containingType: Type?) -> Type? in
Expand All @@ -31,7 +32,7 @@ public enum Composer {
return composed.resolveType(typeName: typeName, containingType: containingType, method: method)
}

composed.types.parallelPerform { type in
let processType = { (type: Type) in
type.variables.forEach {
resolveVariableTypes($0, of: type, resolve: resolveType)
}
Expand All @@ -55,10 +56,18 @@ public enum Composer {
}
}

composed.functions.parallelPerform { function in
let processFunction = { (function: SourceryMethod) in
resolveMethodTypes(function, of: nil, resolve: methodResolveType)
}

if serial {
composed.types.forEach(processType)
composed.functions.forEach(processFunction)
} else {
composed.types.parallelPerform(processType)
composed.functions.parallelPerform(processFunction)
}

updateTypeRelationships(types: composed.types)

return (
Expand Down
2 changes: 1 addition & 1 deletion SourceryRuntime/Sources/Common/TemplateContext.swift
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public final class TemplateContext: NSObject, SourceryModel, NSCoding, Diffable
let fileParserResultCopy: FileParserResult? = nil
// fileParserResultCopy = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(NSKeyedArchiver.archivedData(withRootObject: parserResult)) as? FileParserResult

let composed = Composer.uniqueTypesAndFunctions(parserResult)
let composed = Composer.uniqueTypesAndFunctions(parserResult, serial: false)
self.types = .init(types: composed.types, typealiases: composed.typealiases)
self.functions = composed.functions

Expand Down

0 comments on commit df53fed

Please sign in to comment.