Files
swift-mirror/stdlib/objc/Foundation/FoundationMirrors.swift.gyb
Dave Abrahams dbde275230 [stdlib] Propagate Reflectable docs
230 undocumented public non-operator APIs remain in core

Swift SVN r22236
2014-09-23 23:08:43 +00:00

148 lines
4.3 KiB
Swift

//===----------------------------------------------------------*- swift -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
%import gyb
%TMirrorDecl = gyb.parseTemplate("../../common/MirrorDecl.gyb")
%TMirrorConformance = gyb.parseTemplate("../../common/MirrorConformance.gyb")
%TMirrorBoilerplate = gyb.parseTemplate("../../common/MirrorBoilerplate.gyb")
// helper functions - these Mirrors are dissimilar enough that it's
// probably not worth trying to write one unique generator - let's
// just use these helpers manually and write the bulk of each one
%{
def getMirrorConformance(Self,Disp = None):
return gyb.executeTemplate(
TMirrorConformance,introspecteeType=Self,disposition=Disp)
def getMirrorBoilerplate(Self,Disp = None):
return gyb.executeTemplate(
TMirrorBoilerplate,introspecteeType=Self,disposition=Disp)
def getMirrorDecl(Self,Disp = None):
return gyb.executeTemplate(TMirrorDecl,introspecteeType=Self,disposition=Disp)
}%
// actual Mirrors
${getMirrorDecl("NSURL")} {
${getMirrorBoilerplate("NSURL")}
var count: Int { get { return 0 } }
subscript(_: Int) -> (String, MirrorType) {
_preconditionFailure("MirrorType access out of bounds")
}
var summary: String { get { return _value.absoluteString! } }
var quickLookObject: QuickLookObject? { return .Some(.URL(summary)) }
}
${getMirrorDecl("NSRange")} {
${getMirrorBoilerplate("NSRange")}
var count: Int { get { return 2 } }
subscript(i: Int) -> (String, MirrorType) {
switch i {
case 0: return ("location", reflect(_value.location))
case 1: return ("length", reflect(_value.length))
default: _preconditionFailure("MirrorType access out of bounds")
}
}
var summary: String { return "(\(_value.location),\(_value.length))" }
var quickLookObject: QuickLookObject? {
return .Some(.Range(UInt64(_value.location),UInt64(_value.length)))
}
}
${getMirrorDecl("NSDate")} {
${getMirrorBoilerplate("NSDate")}
var count: Int { get { return 0 } }
subscript(i: Int) -> (String, MirrorType) {
_preconditionFailure("MirrorType access out of bounds")
}
var summary: String {
let df = NSDateFormatter()
df.dateStyle = .MediumStyle
df.timeStyle = .ShortStyle
return df.stringFromDate(_value)
}
var quickLookObject: QuickLookObject? { return .Some(.Text(summary)) }
}
${getMirrorDecl("NSSet","MembershipContainer")} {
var _a : NSArray!
var _value: NSSet
init(_ x: NSSet) {
_value = x
_a = _value.allObjects
}
var disposition: MirrorDisposition { return .MembershipContainer }
var value: Any { return _value }
var valueType: Any.Type { return (_value as Any).dynamicType }
var objectIdentifier: ObjectIdentifier? { return .None }
// this is the only member that needs to validate _a - others either don't touch it or call into this
var count: Int {
if _a != nil {
return _a.count
}
return 0
}
subscript(i: Int) -> (String, MirrorType) {
_precondition(i >= 0 && i < count, "MirrorType access out of bounds")
return ("[\(i)]", reflect(_a[i]))
}
var summary: String { return "\(count) elements" }
var quickLookObject: QuickLookObject? { return nil }
}
// conformances
${getMirrorConformance("NSURL")}
${getMirrorConformance("NSRange")}
${getMirrorConformance("NSDate")}
${getMirrorConformance("NSSet","MembershipContainer")}
extension NSArray : Reflectable {
/// Returns a mirror that reflects `self`.
public func getMirror() -> MirrorType {
return reflect(self as [AnyObject])
}
}
extension NSDictionary : Reflectable {
/// Returns a mirror that reflects `self`.
public func getMirror() -> MirrorType {
let dict: [NSObject : AnyObject] = _convertNSDictionaryToDictionary(self)
return reflect(dict)
}
}
extension NSString : Reflectable {
/// Returns a mirror that reflects `self`.
public func getMirror() -> MirrorType {
return reflect(self as String)
}
}