// 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 -F %S/mock-sdk -I %t.mod -api-diff-data-file %S/Inputs/qualified.json -emit-migrated-file-path %t/qualified-replacement.swift.result -emit-remap-file-path %t/qualified-replacement.swift.remap -o /dev/null
// RUN: diff -u %S/qualified-replacement.swift.expected %t/qualified-replacement.swift.result

import Cities
import Bar
func foo() {
  _ = NewPropertyUserInterface.newFieldPlus
  NewPropertyUserInterface.newMethodPlus(1)
  _ = NewFooComparisonResult.NewFooOrderedSame
  let _ : FooComparisonResult = NewFooComparisonResult.NewFooOrderedSame
  _ = NewCityKind.NewTown
  _ = GlobalCityKindVillage
  _ = ToplevelWrapper.internalType()
  _ = ToplevelWrapper.internalType(recordName: "")
  bar(NewFooComparisonResult.NewFooOrderedSame)
  bar(.orderedMemberSame)
  bar(NewFooComparisonResult.NewFooOrderedSame)
  bar(NewFooComparisonResult.Nested.orderedMemberSame)
  bar(orderedMovedToGlobal)
  bar(orderedMovedToGlobal)
}

func foo(_: ToplevelWrapper.internalType) {}
func bar(_ : FooComparisonResult) {}
