// REQUIRES: objc_interop // RUN: %empty-directory(%t.mod) // RUN: %target-swift-frontend -emit-module -o %t.mod/Cities.swiftmodule %S/Inputs/Cities.swift -module-name Cities -parse-as-library // RUN: %empty-directory(%t) && %target-swift-frontend -c -update-code -primary-file %s -I %t.mod -api-diff-data-file %S/Inputs/string-representable.json -emit-migrated-file-path %t/string-representable.swift.result -disable-migrator-fixits -o /dev/null -F %S/mock-sdk // RUN: diff -u %S/string-representable.swift.expected %t/string-representable.swift.result import Cities import Bar func foo(_ c: Container) -> String { c.Value = convertToNewAttribute("") c.addingAttributes(convertToCitiesContainerAttributeDictionary(["a": "b", "a": "b", "a": "b"])) c.addingAttributes(convertToCitiesContainerAttributeDictionary(["a": "b", "a": "b", "a": "b"])) c.adding(attributes: convertToSimpleAttributeDictionary(["a": 1, "a": 2, "a": 3])) c.adding(optionalAttributes: convertToOptionalSimpleAttributeDictionary(["a": 1, "a": 2, "a": 3])) _ = Container(optionalAttributes: convertToOptionalSimpleAttributeDictionary([:])) _ = Container(optionalAttrArray: convertToOptionalSimpleAttributeArray([])) _ = Container(optionalAttributes: nil) _ = Container(optionalAttrArray: nil) c.adding(attrArray: convertToSimpleAttributeArray(["key1", "key2"])) c.add(single: convertToSimpleAttribute("")) c.add(singleOptional: convertToOptionalSimpleAttribute("")) c.add(singleOptional: nil) _ = convertFromSimpleAttributeDictionary(c.getAttrDictionary()) _ = convertFromOptionalSimpleAttributeDictionary(c.getOptionalAttrDictionary()) _ = convertFromSimpleAttribute(c.getSingleAttr()) _ = convertFromOptionalSimpleAttribute(c.getOptionalSingleAttr()) _ = convertFromSimpleAttributeArray(c.getAttrArray()) _ = convertFromOptionalSimpleAttributeArray(c.getOptionalAttrArray()) c.addingAttributes(c.getAttrDictionary()) c.adding(optionalAttributes: c.getAttrDictionary()) c.attrDict = convertToSimpleAttributeDictionary(["a": "b", "a": "b", "a": "b"]) c.attrArr = convertToSimpleAttributeArray(["key1", "key2"]) _ = convertFromSimpleAttributeArray(c.attrArr) _ = convertFromSimpleAttributeDictionary(c.attrDict) c.adding(attributes: c.attrDict) _ = Container(optionalAttrArray: c.attrArr) c.adding(optionalAttributes: c.optionalAttrDict) _ = convertFromNewAttribute(AttributeWrapper.NewAttribute) c.Value = AttributeWrapper.NewAttribute c.optionalAttrDict = nil return convertFromNewAttribute(c.Value) } class C: BarForwardDeclaredClass {} func revert(_ a: AwesomeCityAttribute, b: Wrapper.Attribute) { _ = "somevalue" _ = "somevalue" _ = "somevalue" _ = "somevalue" _ = a _ = "somevalue" _ = "somevalue" _ = b _ = NewAttributeWrapper.NewKnownAttr _ = "somevalue" _ = "somevalue" } func bar(_ c: Container) { let attr: AliasAttribute = "" c.add(single: attr) } public class SubContainer: Container { public override func adding(optionalAttributes subname: [String: Any]?) { // Local variable inserted by Swift 4.2 migrator. let subname = convertFromOptionalSimpleAttributeDictionary(subname) } public override func adding(attributes myname: [String: Any]) { // Local variable inserted by Swift 4.2 migrator. let myname = convertFromSimpleAttributeDictionary(myname) } public override func adding(attrArray: [String]) { // Local variable inserted by Swift 4.2 migrator. let attrArray = convertFromSimpleAttributeArray(attrArray) } public override func add(single: String) { // Local variable inserted by Swift 4.2 migrator. let single = convertFromSimpleAttribute(single) } public override func add(singleOptional: String?) { // Local variable inserted by Swift 4.2 migrator. let singleOptional = convertFromOptionalSimpleAttribute(singleOptional) } } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertFromOptionalSimpleAttributeDictionary(_ input: [SimpleAttribute: Any]?) -> [String: Any]? { guard let input = input else { return nil } return Dictionary(uniqueKeysWithValues: input.map {key, value in (key.rawValue, value)}) } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertFromSimpleAttributeDictionary(_ input: [SimpleAttribute: Any]) -> [String: Any] { return Dictionary(uniqueKeysWithValues: input.map {key, value in (key.rawValue, value)}) } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertFromSimpleAttributeArray(_ input: [SimpleAttribute]) -> [String] { return input.map { key in key.rawValue } } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertFromSimpleAttribute(_ input: SimpleAttribute) -> String { return input.rawValue } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertFromOptionalSimpleAttribute(_ input: SimpleAttribute?) -> String? { guard let input = input else { return nil } return input.rawValue } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertToNewAttribute(_ input: String) -> NewAttribute { return NewAttribute(rawValue: input) } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertToCitiesContainerAttributeDictionary(_ input: [String: Any]) -> [Cities.Container.Attribute: Any] { return Dictionary(uniqueKeysWithValues: input.map { key, value in (Cities.Container.Attribute(rawValue: key), value)}) } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertToSimpleAttributeDictionary(_ input: [String: Any]) -> [SimpleAttribute: Any] { return Dictionary(uniqueKeysWithValues: input.map { key, value in (SimpleAttribute(rawValue: key), value)}) } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertToOptionalSimpleAttributeDictionary(_ input: [String: Any]?) -> [SimpleAttribute: Any]? { guard let input = input else { return nil } return Dictionary(uniqueKeysWithValues: input.map { key, value in (SimpleAttribute(rawValue: key), value)}) } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertToOptionalSimpleAttributeArray(_ input: [String]?) -> [SimpleAttribute]? { guard let input = input else { return nil } return input.map { key in SimpleAttribute(key) } } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertToSimpleAttributeArray(_ input: [String]) -> [SimpleAttribute] { return input.map { key in SimpleAttribute(key) } } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertToSimpleAttribute(_ input: String) -> SimpleAttribute { return SimpleAttribute(rawValue: input) } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertToOptionalSimpleAttribute(_ input: String?) -> SimpleAttribute? { guard let input = input else { return nil } return SimpleAttribute(rawValue: input) } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertFromOptionalSimpleAttributeArray(_ input: [SimpleAttribute]?) -> [String]? { guard let input = input else { return nil } return input.map { key in key.rawValue } } // Helper function inserted by Swift 4.2 migrator. fileprivate func convertFromNewAttribute(_ input: NewAttribute) -> String { return input.rawValue }