DI: Warn on non-delegating cross-module struct initializers

...as detected by initializing an individual field without having
initialized the whole object (via `self = value`).

This only applies in pre-Swift-5 mode because the next commit will
treat all cross-module struct initializers as delegating in Swift 5.
This commit is contained in:
Jordan Rose
2017-11-09 11:24:28 -08:00
parent 1d1d4896db
commit 1598a21e43
18 changed files with 398 additions and 95 deletions

View File

@@ -582,17 +582,17 @@ extension Bool : _ObjectiveCBridgeable {
extension CGFloat : _ObjectiveCBridgeable {
@available(swift, deprecated: 4, renamed: "init(truncating:)")
public init(_ number: NSNumber) {
native = CGFloat.NativeType(truncating: number)
self.init(CGFloat.NativeType(truncating: number))
}
public init(truncating number: NSNumber) {
native = CGFloat.NativeType(truncating: number)
self.init(CGFloat.NativeType(truncating: number))
}
public init?(exactly number: NSNumber) {
var nativeValue: CGFloat.NativeType? = 0
guard CGFloat.NativeType._conditionallyBridgeFromObjectiveC(number, result: &nativeValue) else { return nil }
self.native = nativeValue!
self.init(nativeValue!)
}
@_semantics("convertToObjectiveC")