From fc7df671de61b7c300d47e363bdd226dfc8a3516 Mon Sep 17 00:00:00 2001 From: John Estropia Date: Mon, 5 Jun 2017 12:45:35 +0900 Subject: [PATCH] Fixes https://bugs.swift.org/browse/SR-4981 --- Sources/CSAsynchronousDataTransaction.swift | 10 ++-- Sources/CSBaseDataTransaction+Querying.swift | 32 +++++------ Sources/CSBaseDataTransaction.swift | 60 +++++++++----------- Sources/CSSynchronousDataTransaction.swift | 10 ++-- Sources/CSUnsafeDataTransaction.swift | 10 ++-- 5 files changed, 57 insertions(+), 65 deletions(-) diff --git a/Sources/CSAsynchronousDataTransaction.swift b/Sources/CSAsynchronousDataTransaction.swift index 7089941..797127c 100644 --- a/Sources/CSAsynchronousDataTransaction.swift +++ b/Sources/CSAsynchronousDataTransaction.swift @@ -35,7 +35,7 @@ import CoreData - SeeAlso: `AsynchronousDataTransaction` */ @objc -public final class CSAsynchronousDataTransaction: CSBaseDataTransaction { +public final class CSAsynchronousDataTransaction: CSBaseDataTransaction, CoreStoreObjectiveCType { /** Saves the transaction changes. This method should not be used after the `-commitWithCompletion:` method was already called once. @@ -139,9 +139,9 @@ public final class CSAsynchronousDataTransaction: CSBaseDataTransaction { public typealias SwiftType = AsynchronousDataTransaction - public override var bridgeToSwift: AsynchronousDataTransaction { + public var bridgeToSwift: AsynchronousDataTransaction { - return super.bridgeToSwift as! AsynchronousDataTransaction + return super.swiftTransaction as! AsynchronousDataTransaction } public required init(_ swiftValue: AsynchronousDataTransaction) { @@ -149,9 +149,9 @@ public final class CSAsynchronousDataTransaction: CSBaseDataTransaction { super.init(swiftValue as BaseDataTransaction) } - public required init(_ swiftValue: BaseDataTransaction) { + public required override init(_ swiftValue: BaseDataTransaction) { - super.init(swiftValue as! AsynchronousDataTransaction) + super.init(swiftValue) } diff --git a/Sources/CSBaseDataTransaction+Querying.swift b/Sources/CSBaseDataTransaction+Querying.swift index e40727a..3a23037 100644 --- a/Sources/CSBaseDataTransaction+Querying.swift +++ b/Sources/CSBaseDataTransaction+Querying.swift @@ -40,7 +40,7 @@ public extension CSBaseDataTransaction { @objc public func fetchExistingObject(_ object: NSManagedObject) -> Any? { - return self.bridgeToSwift.context.fetchExisting(object) as NSManagedObject? + return self.swiftTransaction.context.fetchExisting(object) as NSManagedObject? } /** @@ -52,7 +52,7 @@ public extension CSBaseDataTransaction { @objc public func fetchExistingObjectWithID(_ objectID: NSManagedObjectID) -> Any? { - return self.bridgeToSwift.context.fetchExisting(objectID) as NSManagedObject? + return self.swiftTransaction.context.fetchExisting(objectID) as NSManagedObject? } /** @@ -64,7 +64,7 @@ public extension CSBaseDataTransaction { @objc public func fetchExistingObjects(_ objects: [NSManagedObject]) -> [Any] { - return self.bridgeToSwift.context.fetchExisting(objects) as [NSManagedObject] + return self.swiftTransaction.context.fetchExisting(objects) as [NSManagedObject] } /** @@ -76,7 +76,7 @@ public extension CSBaseDataTransaction { @objc public func fetchExistingObjectsWithIDs(_ objectIDs: [NSManagedObjectID]) -> [Any] { - return self.bridgeToSwift.context.fetchExisting(objectIDs) as [NSManagedObject] + return self.swiftTransaction.context.fetchExisting(objectIDs) as [NSManagedObject] } /** @@ -90,10 +90,10 @@ public extension CSBaseDataTransaction { public func fetchOneFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> Any? { CoreStore.assert( - self.bridgeToSwift.isRunningInAllowedQueue(), + self.swiftTransaction.isRunningInAllowedQueue(), "Attempted to fetch from a \(cs_typeName(self)) outside its designated queue." ) - return self.bridgeToSwift.context.fetchOne(from, fetchClauses) + return self.swiftTransaction.context.fetchOne(from, fetchClauses) } /** @@ -107,10 +107,10 @@ public extension CSBaseDataTransaction { public func fetchAllFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> [Any]? { CoreStore.assert( - self.bridgeToSwift.isRunningInAllowedQueue(), + self.swiftTransaction.isRunningInAllowedQueue(), "Attempted to fetch from a \(cs_typeName(self)) outside its designated queue." ) - return self.bridgeToSwift.context.fetchAll(from, fetchClauses) + return self.swiftTransaction.context.fetchAll(from, fetchClauses) } /** @@ -124,10 +124,10 @@ public extension CSBaseDataTransaction { public func fetchCountFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> NSNumber? { CoreStore.assert( - self.bridgeToSwift.isRunningInAllowedQueue(), + self.swiftTransaction.isRunningInAllowedQueue(), "Attempted to fetch from a \(cs_typeName(self)) outside its designated queue." ) - return self.bridgeToSwift.context + return self.swiftTransaction.context .fetchCount(from, fetchClauses) .flatMap { NSNumber(value: $0) } } @@ -143,10 +143,10 @@ public extension CSBaseDataTransaction { public func fetchObjectIDFrom(_ from: CSFrom, fetchClauses: [CSFetchClause]) -> NSManagedObjectID? { CoreStore.assert( - self.bridgeToSwift.isRunningInAllowedQueue(), + self.swiftTransaction.isRunningInAllowedQueue(), "Attempted to fetch from a \(cs_typeName(self)) outside its designated queue." ) - return self.bridgeToSwift.context.fetchObjectID(from, fetchClauses) + return self.swiftTransaction.context.fetchObjectID(from, fetchClauses) } /** @@ -163,10 +163,10 @@ public extension CSBaseDataTransaction { public func queryValueFrom(_ from: CSFrom, selectClause: CSSelect, queryClauses: [CSQueryClause]) -> Any? { CoreStore.assert( - self.bridgeToSwift.isRunningInAllowedQueue(), + self.swiftTransaction.isRunningInAllowedQueue(), "Attempted to query from a \(cs_typeName(self)) outside its designated queue." ) - return self.bridgeToSwift.context.queryValue(from, selectClause, queryClauses) + return self.swiftTransaction.context.queryValue(from, selectClause, queryClauses) } /** @@ -183,9 +183,9 @@ public extension CSBaseDataTransaction { public func queryAttributesFrom(_ from: CSFrom, selectClause: CSSelect, queryClauses: [CSQueryClause]) -> [[String: Any]]? { CoreStore.assert( - self.bridgeToSwift.isRunningInAllowedQueue(), + self.swiftTransaction.isRunningInAllowedQueue(), "Attempted to query from a \(cs_typeName(self)) outside its designated queue." ) - return self.bridgeToSwift.context.queryAttributes(from, selectClause, queryClauses) + return self.swiftTransaction.context.queryAttributes(from, selectClause, queryClauses) } } diff --git a/Sources/CSBaseDataTransaction.swift b/Sources/CSBaseDataTransaction.swift index 03d0ad0..7eb55d1 100644 --- a/Sources/CSBaseDataTransaction.swift +++ b/Sources/CSBaseDataTransaction.swift @@ -35,7 +35,7 @@ import CoreData - SeeAlso: `BaseDataTransaction` */ @objc -public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { +public class CSBaseDataTransaction: NSObject { // MARK: Object management @@ -45,7 +45,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public var hasChanges: Bool { - return self.bridgeToSwift.hasChanges + return self.swiftTransaction.hasChanges } /** @@ -57,7 +57,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public func createInto(_ into: CSInto) -> Any { - return self.bridgeToSwift.create(into.bridgeToSwift) + return self.swiftTransaction.create(into.bridgeToSwift) } /** @@ -69,7 +69,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public func editObject(_ object: NSManagedObject?) -> Any? { - return self.bridgeToSwift.edit(object) + return self.swiftTransaction.edit(object) } /** @@ -82,7 +82,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public func editInto(_ into: CSInto, objectID: NSManagedObjectID) -> Any? { - return self.bridgeToSwift.edit(into.bridgeToSwift, objectID) + return self.swiftTransaction.edit(into.bridgeToSwift, objectID) } /** @@ -93,7 +93,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public func deleteObject(_ object: NSManagedObject?) { - self.bridgeToSwift.delete(object) + self.swiftTransaction.delete(object) } /** @@ -104,7 +104,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public func deleteObjects(_ objects: [NSManagedObject]) { - self.bridgeToSwift.delete(objects) + self.swiftTransaction.delete(objects) } /** @@ -113,7 +113,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public func refreshAndMergeAllObjects() { - self.bridgeToSwift.refreshAndMergeAllObjects() + self.swiftTransaction.refreshAndMergeAllObjects() } @@ -128,7 +128,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public func insertedObjectsOfType(_ entity: NSManagedObject.Type) -> Set { - return self.bridgeToSwift.insertedObjects(entity) + return self.swiftTransaction.insertedObjects(entity) } /** @@ -139,7 +139,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public func insertedObjectIDs() -> Set { - return self.bridgeToSwift.insertedObjectIDs() + return self.swiftTransaction.insertedObjectIDs() } /** @@ -151,7 +151,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public func insertedObjectIDsOfType(_ entity: NSManagedObject.Type) -> Set { - return self.bridgeToSwift.insertedObjectIDs(entity) + return self.swiftTransaction.insertedObjectIDs(entity) } /** @@ -163,7 +163,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public func updatedObjectsOfType(_ entity: NSManagedObject.Type) -> Set { - return self.bridgeToSwift.updatedObjects(entity) + return self.swiftTransaction.updatedObjects(entity) } /** @@ -174,7 +174,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public func updatedObjectIDs() -> Set { - return self.bridgeToSwift.updatedObjectIDs() + return self.swiftTransaction.updatedObjectIDs() } /** @@ -186,7 +186,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public func updatedObjectIDsOfType(_ entity: NSManagedObject.Type) -> Set { - return self.bridgeToSwift.updatedObjectIDs(entity) + return self.swiftTransaction.updatedObjectIDs(entity) } /** @@ -198,7 +198,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public func deletedObjectsOfType(_ entity: NSManagedObject.Type) -> Set { - return self.bridgeToSwift.deletedObjects(entity) + return self.swiftTransaction.deletedObjects(entity) } /** @@ -209,7 +209,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public func deletedObjectIDs() -> Set { - return self.bridgeToSwift.deletedObjectIDs() + return self.swiftTransaction.deletedObjectIDs() } /** @@ -221,7 +221,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public func deletedObjectIDsOfType(_ entity: NSManagedObject.Type) -> Set { - return self.bridgeToSwift.deletedObjectIDs(entity) + return self.swiftTransaction.deletedObjectIDs(entity) } @@ -229,7 +229,7 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { public override var hash: Int { - return ObjectIdentifier(self.bridgeToSwift).hashValue + return ObjectIdentifier(self.swiftTransaction).hashValue } public override func isEqual(_ object: Any?) -> Bool { @@ -238,28 +238,20 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { return false } - return self.bridgeToSwift === object.bridgeToSwift + return self.swiftTransaction === object.swiftTransaction } - // MARK: CoreStoreObjectiveCType + // MARK: Internal - public required init(_ swiftValue: BaseDataTransaction) { + internal let swiftTransaction: BaseDataTransaction + + internal init(_ swiftValue: BaseDataTransaction) { self.swiftTransaction = swiftValue super.init() } - public var bridgeToSwift: BaseDataTransaction { - - return self.swiftTransaction - } - - - // MARK: Private - - private let swiftTransaction: BaseDataTransaction - // MARK: Deprecated @@ -267,20 +259,20 @@ public class CSBaseDataTransaction: NSObject, CoreStoreObjectiveCType { @objc public func insertedObjects() -> Set { - return self.bridgeToSwift.insertedObjects() + return self.swiftTransaction.insertedObjects() } @available(*, deprecated, message: "Use -[updatedObjectsOfType:] and pass the specific entity class") @objc public func updatedObjects() -> Set { - return self.bridgeToSwift.updatedObjects() + return self.swiftTransaction.updatedObjects() } @available(*, deprecated, message: "Use -[deletedObjectsOfType:] and pass the specific entity class") @objc public func deletedObjects() -> Set { - return self.bridgeToSwift.deletedObjects() + return self.swiftTransaction.deletedObjects() } } diff --git a/Sources/CSSynchronousDataTransaction.swift b/Sources/CSSynchronousDataTransaction.swift index 5f44a70..dea87c2 100644 --- a/Sources/CSSynchronousDataTransaction.swift +++ b/Sources/CSSynchronousDataTransaction.swift @@ -35,7 +35,7 @@ import CoreData - SeeAlso: `SynchronousDataTransaction` */ @objc -public final class CSSynchronousDataTransaction: CSBaseDataTransaction { +public final class CSSynchronousDataTransaction: CSBaseDataTransaction, CoreStoreObjectiveCType { /** Saves the transaction changes and waits for completion synchronously. This method should not be used after the `-commitAndWaitWithError:` method was already called once. @@ -129,9 +129,9 @@ public final class CSSynchronousDataTransaction: CSBaseDataTransaction { public typealias SwiftType = SynchronousDataTransaction - public override var bridgeToSwift: SynchronousDataTransaction { + public var bridgeToSwift: SynchronousDataTransaction { - return super.bridgeToSwift as! SynchronousDataTransaction + return super.swiftTransaction as! SynchronousDataTransaction } public required init(_ swiftValue: SynchronousDataTransaction) { @@ -139,9 +139,9 @@ public final class CSSynchronousDataTransaction: CSBaseDataTransaction { super.init(swiftValue as BaseDataTransaction) } - public required init(_ swiftValue: BaseDataTransaction) { + public required override init(_ swiftValue: BaseDataTransaction) { - super.init(swiftValue as! SynchronousDataTransaction) + super.init(swiftValue) } diff --git a/Sources/CSUnsafeDataTransaction.swift b/Sources/CSUnsafeDataTransaction.swift index 002bae3..da8491c 100644 --- a/Sources/CSUnsafeDataTransaction.swift +++ b/Sources/CSUnsafeDataTransaction.swift @@ -35,7 +35,7 @@ import CoreData - SeeAlso: `UnsafeDataTransaction` */ @objc -public final class CSUnsafeDataTransaction: CSBaseDataTransaction { +public final class CSUnsafeDataTransaction: CSBaseDataTransaction, CoreStoreObjectiveCType { /** Saves the transaction changes asynchronously. For a `CSUnsafeDataTransaction`, multiple commits are allowed, although it is the developer's responsibility to ensure a reasonable leeway to prevent blocking the main thread. @@ -189,9 +189,9 @@ public final class CSUnsafeDataTransaction: CSBaseDataTransaction { public typealias SwiftType = UnsafeDataTransaction - public override var bridgeToSwift: UnsafeDataTransaction { + public var bridgeToSwift: UnsafeDataTransaction { - return super.bridgeToSwift as! UnsafeDataTransaction + return super.swiftTransaction as! UnsafeDataTransaction } public required init(_ swiftValue: UnsafeDataTransaction) { @@ -199,9 +199,9 @@ public final class CSUnsafeDataTransaction: CSBaseDataTransaction { super.init(swiftValue as BaseDataTransaction) } - public required init(_ swiftValue: BaseDataTransaction) { + public required override init(_ swiftValue: BaseDataTransaction) { - super.init(swiftValue as! UnsafeDataTransaction) + super.init(swiftValue) }