import Dispatch public class RuleStorage { private var storage: [ObjectIdentifier: [SwiftLintFile: Any]] private let access = DispatchQueue(label: "io.realm.swiftlint.ruleStorageAccess", attributes: .concurrent) public init() { storage = [:] } func collect(info: R.FileInfo, for file: SwiftLintFile, in rule: R) { let key = ObjectIdentifier(R.self) access.sync(flags: .barrier) { storage[key, default: [:]][file] = info } } func collectedInfo(for rule: R) -> [SwiftLintFile: R.FileInfo]? { return access.sync { storage[ObjectIdentifier(R.self)] as? [SwiftLintFile: R.FileInfo] } } }