Files
swift-mirror/test/ModuleInterface/empty-extension.swift
Varun Gandhi 02afb9d49b [ModuleInterface] Print full type if ambiguous for extensions.
The patch introduces a new setting instead of changing existing settings
because the generated interfaces in the IDE have slightly different
requirements; the extended type there is unconditionally not printed
qualified (even if it is ambiguous). This is likely because the
ambiguity heuristic is very weak; it doesn't even do name lookup.
Simplifying that logic would be nice, but then we'd need to update
a bunch of IDE/print* tests and end up with more more visual clutter
in the IDE.

Introducing the new setting means we can change the behavior for
swiftinterface files without affecting the behavior for IDE interfaces.

Fixes rdar://79093752.
2021-06-11 20:04:43 -07:00

66 lines
1.5 KiB
Swift

// Test that we don't print extensions to implementation-only imported types.
// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend -emit-module %s -DIOI_LIB -module-name IOILib -emit-module-path %t/IOILib.swiftmodule
// RUN: %target-swift-frontend -emit-module %s -DEXPORTED_LIB -module-name IndirectLib -emit-module-path %t/IndirectLib.swiftmodule -I %t
// RUN: %target-swift-frontend -emit-module %s -DLIB -module-name Lib -emit-module-path %t/Lib.swiftmodule -I %t
// RUN: %target-swift-frontend-typecheck -emit-module-interface-path %t/out.swiftinterface %s -I %t -swift-version 5 -enable-library-evolution
// RUN: %FileCheck %s < %t/out.swiftinterface
// REQUIRES: OS=macosx
#if IOI_LIB
public struct IOIImportedType {
public func foo() {}
}
#elseif EXPORTED_LIB
public struct ExportedType {
public func foo() {}
}
#elseif LIB
@_exported import IndirectLib
public struct NormalImportedType {
public func foo() {}
}
#else // Client
import Lib
@_implementationOnly import IOILib
public protocol PublicProto {
func foo()
}
extension IOIImportedType : PublicProto {}
extension IOIImportedType {
#if os(iOS)
public func funcForAnotherOS() {}
#endif
}
// CHECK-NOT: IOIImportedType
// CHECK-NOT: funcForAnotherOS
extension NormalImportedType : PublicProto {}
// CHECK: extension Lib.NormalImportedType
extension ExportedType : PublicProto {}
// CHECK: extension IndirectLib.ExportedType
extension NormalImportedType {
#if os(macOS)
public func funcForThisOS() {};
#endif
}
// CHECK: funcForThisOS
#endif