mirror of https://github.com/SnapKit/SnapKit
Instrument each constraint with a source location.
This commit is contained in:
parent
104ce8895c
commit
bbe5b2e49d
|
@ -7,6 +7,8 @@
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
779230441BCB6FC30027CF5F /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 779230431BCB6FC30027CF5F /* SourceLocation.swift */; settings = {ASSET_TAGS = (); }; };
|
||||||
|
779230451BCB6FC30027CF5F /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 779230431BCB6FC30027CF5F /* SourceLocation.swift */; settings = {ASSET_TAGS = (); }; };
|
||||||
EE4910981B19A26000A54F1F /* ViewController+SnapKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE4910971B19A26000A54F1F /* ViewController+SnapKit.swift */; };
|
EE4910981B19A26000A54F1F /* ViewController+SnapKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE4910971B19A26000A54F1F /* ViewController+SnapKit.swift */; };
|
||||||
EE4910991B19A40200A54F1F /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EEBCC9D819CC627D0083B827 /* SnapKit.framework */; };
|
EE4910991B19A40200A54F1F /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EEBCC9D819CC627D0083B827 /* SnapKit.framework */; };
|
||||||
EE94F6091AC0F10A008767FF /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE94F6081AC0F10A008767FF /* UIKit.framework */; };
|
EE94F6091AC0F10A008767FF /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE94F6081AC0F10A008767FF /* UIKit.framework */; };
|
||||||
|
@ -51,6 +53,7 @@
|
||||||
/* End PBXContainerItemProxy section */
|
/* End PBXContainerItemProxy section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
779230431BCB6FC30027CF5F /* SourceLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SourceLocation.swift; sourceTree = "<group>"; };
|
||||||
EE4910971B19A26000A54F1F /* ViewController+SnapKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ViewController+SnapKit.swift"; sourceTree = "<group>"; };
|
EE4910971B19A26000A54F1F /* ViewController+SnapKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ViewController+SnapKit.swift"; sourceTree = "<group>"; };
|
||||||
EE94F6081AC0F10A008767FF /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
EE94F6081AC0F10A008767FF /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
||||||
EE94F60A1AC0F10F008767FF /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/AppKit.framework; sourceTree = DEVELOPER_DIR; };
|
EE94F60A1AC0F10F008767FF /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/AppKit.framework; sourceTree = DEVELOPER_DIR; };
|
||||||
|
@ -156,6 +159,7 @@
|
||||||
EEFCF32B1AD910B900A425FA /* Debugging.swift */,
|
EEFCF32B1AD910B900A425FA /* Debugging.swift */,
|
||||||
EECDB3621AC0C95C006BBC11 /* ConstraintRelation.swift */,
|
EECDB3621AC0C95C006BBC11 /* ConstraintRelation.swift */,
|
||||||
EECDB35F1AC0C95C006BBC11 /* ConstraintAttributes.swift */,
|
EECDB35F1AC0C95C006BBC11 /* ConstraintAttributes.swift */,
|
||||||
|
779230431BCB6FC30027CF5F /* SourceLocation.swift */,
|
||||||
EECDB36B1AC0C967006BBC11 /* Supporting Files */,
|
EECDB36B1AC0C967006BBC11 /* Supporting Files */,
|
||||||
EECDB3681AC0C95C006BBC11 /* Tests */,
|
EECDB3681AC0C95C006BBC11 /* Tests */,
|
||||||
);
|
);
|
||||||
|
@ -363,6 +367,7 @@
|
||||||
EECDB3711AC0C9A6006BBC11 /* EdgeInsets.swift in Sources */,
|
EECDB3711AC0C9A6006BBC11 /* EdgeInsets.swift in Sources */,
|
||||||
EE4910981B19A26000A54F1F /* ViewController+SnapKit.swift in Sources */,
|
EE4910981B19A26000A54F1F /* ViewController+SnapKit.swift in Sources */,
|
||||||
EECDB36F1AC0C9A6006BBC11 /* ConstraintMaker.swift in Sources */,
|
EECDB36F1AC0C9A6006BBC11 /* ConstraintMaker.swift in Sources */,
|
||||||
|
779230441BCB6FC30027CF5F /* SourceLocation.swift in Sources */,
|
||||||
EECDB36D1AC0C9A6006BBC11 /* ConstraintAttributes.swift in Sources */,
|
EECDB36D1AC0C9A6006BBC11 /* ConstraintAttributes.swift in Sources */,
|
||||||
EECDB3721AC0C9A6006BBC11 /* LayoutConstraint.swift in Sources */,
|
EECDB3721AC0C9A6006BBC11 /* LayoutConstraint.swift in Sources */,
|
||||||
EECDB36E1AC0C9A6006BBC11 /* ConstraintItem.swift in Sources */,
|
EECDB36E1AC0C9A6006BBC11 /* ConstraintItem.swift in Sources */,
|
||||||
|
@ -390,6 +395,7 @@
|
||||||
EECDB39A1AC0CBFF006BBC11 /* EdgeInsets.swift in Sources */,
|
EECDB39A1AC0CBFF006BBC11 /* EdgeInsets.swift in Sources */,
|
||||||
EECDB3981AC0CBFF006BBC11 /* ConstraintMaker.swift in Sources */,
|
EECDB3981AC0CBFF006BBC11 /* ConstraintMaker.swift in Sources */,
|
||||||
EECDB3961AC0CBFF006BBC11 /* ConstraintAttributes.swift in Sources */,
|
EECDB3961AC0CBFF006BBC11 /* ConstraintAttributes.swift in Sources */,
|
||||||
|
779230451BCB6FC30027CF5F /* SourceLocation.swift in Sources */,
|
||||||
EECDB39B1AC0CBFF006BBC11 /* LayoutConstraint.swift in Sources */,
|
EECDB39B1AC0CBFF006BBC11 /* LayoutConstraint.swift in Sources */,
|
||||||
EECDB3971AC0CBFF006BBC11 /* ConstraintItem.swift in Sources */,
|
EECDB3971AC0CBFF006BBC11 /* ConstraintItem.swift in Sources */,
|
||||||
);
|
);
|
||||||
|
|
|
@ -61,6 +61,7 @@ public class Constraint {
|
||||||
internal var makerFile: String = "Unknown"
|
internal var makerFile: String = "Unknown"
|
||||||
internal var makerLine: UInt = 0
|
internal var makerLine: UInt = 0
|
||||||
|
|
||||||
|
internal(set) public var location : SourceLocation?
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -195,13 +196,15 @@ internal class ConcreteConstraint: Constraint {
|
||||||
|
|
||||||
private var installInfo: ConcreteConstraintInstallInfo? = nil
|
private var installInfo: ConcreteConstraintInstallInfo? = nil
|
||||||
|
|
||||||
internal init(fromItem: ConstraintItem, toItem: ConstraintItem, relation: ConstraintRelation, constant: Any, multiplier: Float, priority: Float) {
|
internal init(fromItem: ConstraintItem, toItem: ConstraintItem, relation: ConstraintRelation, constant: Any, multiplier: Float, priority: Float, location : SourceLocation?) {
|
||||||
self.fromItem = fromItem
|
self.fromItem = fromItem
|
||||||
self.toItem = toItem
|
self.toItem = toItem
|
||||||
self.relation = relation
|
self.relation = relation
|
||||||
self.constant = constant
|
self.constant = constant
|
||||||
self.multiplier = multiplier
|
self.multiplier = multiplier
|
||||||
self.priority = priority
|
self.priority = priority
|
||||||
|
super.init()
|
||||||
|
self.location = location
|
||||||
}
|
}
|
||||||
|
|
||||||
internal func installOnView(updateExisting updateExisting: Bool = false, file: String? = nil, line: UInt? = nil) -> [LayoutConstraint] {
|
internal func installOnView(updateExisting updateExisting: Bool = false, file: String? = nil, line: UInt? = nil) -> [LayoutConstraint] {
|
||||||
|
|
|
@ -197,25 +197,31 @@ public class ConstraintDescriptionRelatable {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public func equalTo(other: RelationTarget) -> ConstraintDescriptionEditable {
|
public func equalTo(other: RelationTarget, file : String = __FILE__, line : UInt = __LINE__) -> ConstraintDescriptionEditable {
|
||||||
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .Equal))
|
let location = SourceLocation(file: file, line: line)
|
||||||
|
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .Equal, location: location))
|
||||||
}
|
}
|
||||||
public func equalTo(other: LayoutSupport) -> ConstraintDescriptionEditable {
|
public func equalTo(other: LayoutSupport, file : String = __FILE__, line : UInt = __LINE__) -> ConstraintDescriptionEditable {
|
||||||
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .Equal))
|
let location = SourceLocation(file: file, line: line)
|
||||||
|
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .Equal, location: location))
|
||||||
}
|
}
|
||||||
|
|
||||||
public func lessThanOrEqualTo(other: RelationTarget) -> ConstraintDescriptionEditable {
|
public func lessThanOrEqualTo(other: RelationTarget, file : String = __FILE__, line : UInt = __LINE__) -> ConstraintDescriptionEditable {
|
||||||
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .LessThanOrEqualTo))
|
let location = SourceLocation(file: file, line: line)
|
||||||
|
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .LessThanOrEqualTo, location: location))
|
||||||
}
|
}
|
||||||
public func lessThanOrEqualTo(other: LayoutSupport) -> ConstraintDescriptionEditable {
|
public func lessThanOrEqualTo(other: LayoutSupport, file : String = __FILE__, line : UInt = __LINE__) -> ConstraintDescriptionEditable {
|
||||||
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .LessThanOrEqualTo))
|
let location = SourceLocation(file: file, line: line)
|
||||||
|
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .LessThanOrEqualTo, location: location))
|
||||||
}
|
}
|
||||||
|
|
||||||
public func greaterThanOrEqualTo(other: RelationTarget) -> ConstraintDescriptionEditable {
|
public func greaterThanOrEqualTo(other: RelationTarget, file : String = __FILE__, line : UInt = __LINE__) -> ConstraintDescriptionEditable {
|
||||||
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .GreaterThanOrEqualTo))
|
let location = SourceLocation(file: file, line: line)
|
||||||
|
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .GreaterThanOrEqualTo, location: location))
|
||||||
}
|
}
|
||||||
public func greaterThanOrEqualTo(other: LayoutSupport) -> ConstraintDescriptionEditable {
|
public func greaterThanOrEqualTo(other: LayoutSupport, file : String = __FILE__, line : UInt = __LINE__) -> ConstraintDescriptionEditable {
|
||||||
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .GreaterThanOrEqualTo))
|
let location = SourceLocation(file: file, line: line)
|
||||||
|
return ConstraintDescriptionEditable(self.backing.constrainTo(other, relation : .GreaterThanOrEqualTo, location: location))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -301,6 +307,8 @@ public class ConstraintDescriptionExtendable: ConstraintDescriptionRelatable {
|
||||||
*/
|
*/
|
||||||
internal class ConstraintDescription {
|
internal class ConstraintDescription {
|
||||||
|
|
||||||
|
private var location : SourceLocation?
|
||||||
|
|
||||||
private var left: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Left) }
|
private var left: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Left) }
|
||||||
private var top: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Top) }
|
private var top: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Top) }
|
||||||
private var right: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Right) }
|
private var right: ConstraintDescription { return self.addConstraint(ConstraintAttributes.Right) }
|
||||||
|
@ -418,7 +426,9 @@ internal class ConstraintDescription {
|
||||||
relation: self.relation!,
|
relation: self.relation!,
|
||||||
constant: self.constant,
|
constant: self.constant,
|
||||||
multiplier: self.multiplier,
|
multiplier: self.multiplier,
|
||||||
priority: self.priority)
|
priority: self.priority,
|
||||||
|
location: self.location
|
||||||
|
)
|
||||||
}
|
}
|
||||||
return self.concreteConstraint!
|
return self.concreteConstraint!
|
||||||
}
|
}
|
||||||
|
@ -470,7 +480,10 @@ internal class ConstraintDescription {
|
||||||
return self
|
return self
|
||||||
}
|
}
|
||||||
|
|
||||||
private func constrainTo(other: RelationTarget, relation: ConstraintRelation) -> ConstraintDescription {
|
private func constrainTo(other: RelationTarget, relation: ConstraintRelation, location : SourceLocation) -> ConstraintDescription {
|
||||||
|
|
||||||
|
self.location = location
|
||||||
|
|
||||||
if let constant = other as? FloatConvertible {
|
if let constant = other as? FloatConvertible {
|
||||||
self.constant = constant.floatValue
|
self.constant = constant.floatValue
|
||||||
}
|
}
|
||||||
|
@ -494,7 +507,7 @@ internal class ConstraintDescription {
|
||||||
}
|
}
|
||||||
|
|
||||||
@available(iOS 7.0, *)
|
@available(iOS 7.0, *)
|
||||||
private func constrainTo(other: LayoutSupport, relation: ConstraintRelation) -> ConstraintDescription {
|
private func constrainTo(other: LayoutSupport, relation: ConstraintRelation, location : SourceLocation) -> ConstraintDescription {
|
||||||
return constrainTo(ConstraintItem(object: other, attributes: ConstraintAttributes.None), relation: relation, location: location)
|
return constrainTo(ConstraintItem(object: other, attributes: ConstraintAttributes.None), relation: relation, location: location)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
//
|
||||||
|
// SnapKit
|
||||||
|
//
|
||||||
|
// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
public struct SourceLocation {
|
||||||
|
|
||||||
|
public let file : String
|
||||||
|
public let line : UInt
|
||||||
|
|
||||||
|
init(file : String, line : UInt) {
|
||||||
|
self.file = file
|
||||||
|
self.line = line
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue