Skip to content

[5.1 08-28-2019] Cherry-picking recent Swift framework ABI checker enhancements #27011

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
e25754d
swift-api-digester: use qualified type names for generic signatures
nkcsgexi Aug 14, 2019
c8af344
ABI/API checker: serialized json format should include all tool invoc…
nkcsgexi Aug 19, 2019
4902521
ABI/API checker: add a version number for the json descriptors of APIs
nkcsgexi Aug 19, 2019
99ec174
swift-api-checker: teach the script to dump entire SDK content to fil…
nkcsgexi Jul 3, 2019
115efe7
swift-api-checker: teach the script to collect all frameworks with Sw…
nkcsgexi Jul 8, 2019
d5237f0
swift-api-checker: teach infer-imports to find all catalyst-supportin…
nkcsgexi Aug 20, 2019
74e0c6a
swift-api-checker: rename existing fixed-module lists to fixed-clang-…
nkcsgexi Aug 20, 2019
d20c230
swift-api-checker: add support for invoking low-level executable usin…
nkcsgexi Aug 20, 2019
4136ceb
API/ABI checker: diagnose members in removed extensions rather than e…
nkcsgexi Aug 21, 2019
b63e1cc
swift-api-checker: pass down --catalyst to infer-imports.py when look…
nkcsgexi Aug 21, 2019
6a2fde4
ABI/API checker: abort after error occurs while importing a module
nkcsgexi Aug 21, 2019
01508ca
ABI/API checker: use colors when emitting diagnostics in module loading
nkcsgexi Aug 21, 2019
725437f
swift-api-digester: add an action to generate empty baselines
nkcsgexi Aug 22, 2019
e596a7a
cmake: set up installing framework ABI baselines into toolchain
nkcsgexi Aug 22, 2019
55db98a
ABI checker: prefer sugared version of generic signature while emitti…
nkcsgexi Aug 25, 2019
faca080
swift-api-checker.py: allow users to specify json file names when dum…
nkcsgexi Aug 26, 2019
4db02e2
swift-api-checker.py: remove unnecessary framework search paths
nkcsgexi Aug 26, 2019
bde3a72
ABI/API checker: always print fully qualified names for types when di…
nkcsgexi Aug 27, 2019
f7ab70c
Frontend: add a front-end option to specify module names for which we…
nkcsgexi Aug 28, 2019
b261635
test: enable -enable-library-evolution in compare-dump-interface-vs-b…
nkcsgexi Aug 28, 2019
2525aea
ABI/API checker: diagnose ObjC name changes as breakages
nkcsgexi Aug 28, 2019
f4c4cc4
ABI checker: exclude unavailable decls from ABI descriptors
nkcsgexi Aug 28, 2019
49ed0b3
ABI/API checker: populate several lazily computed attributes to nodes
nkcsgexi Aug 29, 2019
8584d22
swift-api-checker.py: teach the script to generate target-specific ba…
nkcsgexi Aug 30, 2019
7d264fd
cmake: symlink framework ABI baseline data into the build directory
nkcsgexi Aug 30, 2019
28fcb48
Revert "Revert "swift-api-digester: teach the tool to find framework-…
nkcsgexi Sep 1, 2019
f882258
swift-api-checker.py: introduce a sub directory under framework name …
nkcsgexi Sep 3, 2019
804574c
test: regenerate ABI/API baselines for the stdlib after cherry-picking
nkcsgexi Sep 3, 2019
0768452
test: remove some merge relics
nkcsgexi Sep 4, 2019
122e0e7
ModuleLoader: move PreferInterfaceForModules from SerializedModuleLoa…
nkcsgexi Sep 4, 2019
e6dd201
ABI/API checker: teach the tool to diagnose against a builtin empty b…
nkcsgexi Sep 4, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions include/swift/AST/DiagnosticsModuleDiffer.def
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ ERROR(decl_new_witness_table_entry,none,"%0 now requires %select{|no}1 new witne

ERROR(new_decl_without_intro,none,"%0 is a new API without @available attribute", (StringRef))

ERROR(objc_name_change,none,"%0 has ObjC name change from %1 to %2", (StringRef, StringRef, StringRef))

#ifndef DIAG_NO_UNDEF
# if defined(DIAG)
# undef DIAG
Expand Down
3 changes: 3 additions & 0 deletions include/swift/Frontend/FrontendOptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ class FrontendOptions {
/// binary module has already been built for use by the compiler.
std::string PrebuiltModuleCachePath;

/// For these modules, we should prefer using Swift interface when importing them.
std::vector<std::string> PreferInterfaceForModules;

/// Emit index data for imported serialized swift system modules.
bool IndexSystemModules = false;

Expand Down
7 changes: 6 additions & 1 deletion include/swift/Frontend/ParseableInterfaceModuleLoader.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,15 +128,18 @@ class ParseableInterfaceModuleLoader : public SerializedModuleLoaderBase {
explicit ParseableInterfaceModuleLoader(
ASTContext &ctx, StringRef cacheDir, StringRef prebuiltCacheDir,
DependencyTracker *tracker, ModuleLoadingMode loadMode,
ArrayRef<std::string> PreferInterfaceForModules,
bool RemarkOnRebuildFromInterface)
: SerializedModuleLoaderBase(ctx, tracker, loadMode),
CacheDir(cacheDir), PrebuiltCacheDir(prebuiltCacheDir),
RemarkOnRebuildFromInterface(RemarkOnRebuildFromInterface)
RemarkOnRebuildFromInterface(RemarkOnRebuildFromInterface),
PreferInterfaceForModules(PreferInterfaceForModules)
{}

std::string CacheDir;
std::string PrebuiltCacheDir;
bool RemarkOnRebuildFromInterface;
ArrayRef<std::string> PreferInterfaceForModules;

std::error_code findModuleFilesInDirectory(
AccessPathElem ModuleID, StringRef DirPath, StringRef ModuleFilename,
Expand All @@ -150,10 +153,12 @@ class ParseableInterfaceModuleLoader : public SerializedModuleLoaderBase {
static std::unique_ptr<ParseableInterfaceModuleLoader>
create(ASTContext &ctx, StringRef cacheDir, StringRef prebuiltCacheDir,
DependencyTracker *tracker, ModuleLoadingMode loadMode,
ArrayRef<std::string> PreferInterfaceForModules = {},
bool RemarkOnRebuildFromInterface = false) {
return std::unique_ptr<ParseableInterfaceModuleLoader>(
new ParseableInterfaceModuleLoader(ctx, cacheDir, prebuiltCacheDir,
tracker, loadMode,
PreferInterfaceForModules,
RemarkOnRebuildFromInterface));
}

Expand Down
4 changes: 4 additions & 0 deletions include/swift/IDE/DigesterEnums.def
Original file line number Diff line number Diff line change
Expand Up @@ -143,18 +143,22 @@ KEY_STRING(ModuleName, moduleName)
KEY_STRING(SuperclassUsr, superclassUsr)
KEY_STRING(EnumRawTypeName, enumRawTypeName)
KEY_STRING(GenericSig, genericSig)
KEY_STRING(SugaredGenericSig, sugared_genericSig)
KEY_STRING(FuncSelfKind, funcSelfKind)
KEY_STRING(ParamValueOwnership, paramValueOwnership)
KEY_STRING(IntromacOS, intro_Macosx)
KEY_STRING(IntroiOS, intro_iOS)
KEY_STRING(IntrotvOS, intro_tvOS)
KEY_STRING(IntrowatchOS, intro_watchOS)
KEY_STRING(Introswift, intro_swift)
KEY_STRING(ObjCName, objc_name)

KEY_STRING_ARR(SuperclassNames, superclassNames)
KEY_STRING_ARR(ToolArgs, tool_arguments)

KEY_UINT(SelfIndex, selfIndex)
KEY_UINT(FixedBinaryOrder, fixedbinaryorder)
KEY_UINT(JsonFormatVer, json_format_version)

KEY(children)
KEY(conformances)
Expand Down
3 changes: 2 additions & 1 deletion lib/Frontend/Frontend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,8 @@ bool CompilerInstance::setUpModuleLoaders() {
StringRef PrebuiltModuleCachePath = FEOpts.PrebuiltModuleCachePath;
auto PIML = ParseableInterfaceModuleLoader::create(
*Context, ModuleCachePath, PrebuiltModuleCachePath,
getDependencyTracker(), MLM, FEOpts.RemarkOnRebuildFromModuleInterface);
getDependencyTracker(), MLM, FEOpts.PreferInterfaceForModules,
FEOpts.RemarkOnRebuildFromModuleInterface);
Context->addModuleLoader(std::move(PIML));
}
Context->addModuleLoader(std::move(SML));
Expand Down
7 changes: 5 additions & 2 deletions lib/Frontend/ParseableInterfaceModuleLoader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1425,11 +1425,14 @@ std::error_code ParseableInterfaceModuleLoader::findModuleFilesInDirectory(
}

// Create an instance of the Impl to do the heavy lifting.
auto ModuleName = ModuleID.first.str();
ParseableInterfaceModuleLoaderImpl Impl(
Ctx, ModPath, InPath, ModuleID.first.str(),
Ctx, ModPath, InPath, ModuleName,
CacheDir, PrebuiltCacheDir, ModuleID.second,
RemarkOnRebuildFromInterface, dependencyTracker,
LoadMode);
llvm::is_contained(PreferInterfaceForModules,
ModuleName) ?
ModuleLoadingMode::PreferParseable : LoadMode);

// Ask the impl to find us a module that we can load or give us an error
// telling us that we couldn't load it.
Expand Down
16 changes: 16 additions & 0 deletions test/api-digester/Inputs/cake.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
public protocol P1 {}
public protocol P2 {}
public protocol P3: P2, P1 {}

@frozen
public struct S1: P1 {
public static func foo1() {}
Expand Down Expand Up @@ -123,3 +124,18 @@ public class PlatformIntroClass {}

@available(swift, introduced: 5)
public class SwiftIntroClass {}

@objc(NewObjCClass)
public class SwiftObjcClass {
@objc(ObjCFool:ObjCA:ObjCB:)
public func foo(a:Int, b:Int, c: Int) {}
}

@available(iOS 10.2, tvOS 10.3, watchOS 3.4, *)
@available(macOS, unavailable)
public class UnavailableOnMac {}

@available(macOS, unavailable)
extension SwiftObjcClass {
public func functionUnavailableOnMac() {}
}
6 changes: 6 additions & 0 deletions test/api-digester/Inputs/cake_baseline/cake.swift
Original file line number Diff line number Diff line change
Expand Up @@ -195,3 +195,9 @@ public class Zoo {
}

public func returnFunctionTypeOwnershipChange() -> (C1) -> () { return { _ in } }

@objc(OldObjCClass)
public class SwiftObjcClass {
@objc(OldObjCFool:OldObjCA:OldObjCB:)
public func foo(a:Int, b:Int, c: Int) {}
}
6 changes: 6 additions & 0 deletions test/api-digester/Inputs/cake_current/cake.swift
Original file line number Diff line number Diff line change
Expand Up @@ -202,3 +202,9 @@ public class Zoo {
}

public func returnFunctionTypeOwnershipChange() -> (__owned C1) -> () { return { _ in } }

@objc(NewObjCClass)
public class SwiftObjcClass {
@objc(NewObjCFool:NewObjCA:NewObjCB:)
public func foo(a:Int, b:Int, c: Int) {}
}
34 changes: 18 additions & 16 deletions test/api-digester/Outputs/Cake-abi.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@

/* Generic Signature Changes */
cake: Func P1.P1Constraint() has generic signature change from <τ_0_0 where τ_0_0 : P1, τ_0_0 : P2> to <τ_0_0 where τ_0_0 : P1>
cake: Protocol P3 has generic signature change from <τ_0_0 : P1, τ_0_0 : P2> to <τ_0_0 : P1, τ_0_0 : P4>
cake: Func P1.P1Constraint() has generic signature change from <Self where Self : cake.P1, Self : cake.P2> to <Self where Self : cake.P1>
cake: Protocol P3 has generic signature change from <Self : cake.P1, Self : cake.P2> to <Self : cake.P1, Self : cake.P4>

/* RawRepresentable Changes */

/* Removed Decls */
Swift: Extension Int has been removed
cake: Accessor GlobalVarChangedToLet.Modify() has been removed
cake: Accessor GlobalVarChangedToLet.Set() has been removed
cake: Accessor RemoveSetters.Value.Modify() has been removed
Expand All @@ -18,6 +17,7 @@ cake: AssociatedType RequiementChanges.removedType has been removed
cake: Class C3 has been removed
cake: Constructor Somestruct2.init(_:) has been removed
cake: Func C4.foo() has been removed
cake: Func Int.IntEnhancer() has been removed
cake: Func RequiementChanges.removedFunc() has been removed
cake: Var RequiementChanges.removedVar has been removed

Expand All @@ -27,25 +27,27 @@ cake: InfixOperator ..*.. has been changed to a PrefixOperator
cake: Protocol ProtocolToEnum has been changed to a Enum

/* Renamed Decls */
cake: Class SwiftObjcClass has ObjC name change from OldObjCClass to NewObjCClass
cake: Func S1.foo5(x:y:) has been renamed to Func foo5(x:y:z:)
cake: Func SwiftObjcClass.foo(a:b:c:) has ObjC name change from OldObjCFool:OldObjCA:OldObjCB: to NewObjCFool:NewObjCA:NewObjCB:
cake: Struct Somestruct2 has been renamed to Struct NSSomestruct2

/* Type Changes */
cake: Accessor Zoo.current.Get() has return type change from Cat to Dog
cake: AssociatedType AssociatedTypePro.T3 has default type change from C1 to C6
cake: Class TChangesFromIntToString has type witness type for AssociatedTypesProtocol.T changing from Int to String
cake: Constructor S1.init(_:) has parameter 0 type change from Int to Double
cake: Func C1.foo2(_:) has parameter 0 type change from Int to () -> ()
cake: Accessor Zoo.current.Get() has return type change from cake.Cat to cake.Dog
cake: AssociatedType AssociatedTypePro.T3 has default type change from cake.C1 to cake.C6
cake: Class TChangesFromIntToString has type witness type for AssociatedTypesProtocol.T changing from Swift.Int to Swift.String
cake: Constructor S1.init(_:) has parameter 0 type change from Swift.Int to Swift.Double
cake: Func C1.foo2(_:) has parameter 0 type change from Swift.Int to () -> ()
cake: Func C7.foo(_:_:) has removed default argument from parameter 0
cake: Func C7.foo(_:_:) has removed default argument from parameter 1
cake: Func EscapingFunctionType.addedEscaping(_:) has added @escaping in parameter 0
cake: Func EscapingFunctionType.removedEscaping(_:) has removed @escaping in parameter 0
cake: Func Somestruct2.foo1(_:) has parameter 0 type change from C3 to C1
cake: Func Zoo.getCurrentAnimalInlinable() has return type change from Cat to Dog
cake: Func Somestruct2.foo1(_:) has parameter 0 type change from cake.C3 to cake.C1
cake: Func Zoo.getCurrentAnimalInlinable() has return type change from cake.Cat to cake.Dog
cake: Func ownershipChange(_:_:) has parameter 0 changing from InOut to Default
cake: Func ownershipChange(_:_:) has parameter 1 changing from Shared to Owned
cake: Func returnFunctionTypeOwnershipChange() has return type change from (C1) -> () to (__owned C1) -> ()
cake: Var Zoo.current has declared type change from Cat to Dog
cake: Func returnFunctionTypeOwnershipChange() has return type change from (cake.C1) -> () to (__owned cake.C1) -> ()
cake: Var Zoo.current has declared type change from cake.Cat to cake.Dog

/* Decl Attribute changes */
cake: Accessor GlobalLetChangedToVar.Modify() is a new API without @available attribute
Expand Down Expand Up @@ -103,13 +105,13 @@ cake: Struct fixedLayoutStruct has removed conformance to P1

/* Protocol Requirement Change */
cake: Accessor HasMutatingMethodClone.bar.Get() now requires new witness table entry
cake: AssociatedType AssociatedTypePro.T1 has removed default type Int
cake: AssociatedType AssociatedTypePro.T1 has removed default type Swift.Int
cake: AssociatedType RequiementChanges.addedTypeWithoutDefault has been added as a protocol requirement
cake: Func HasMutatingMethodClone.foo() now requires new witness table entry
cake: Func RequiementChanges.addedFunc() has been added as a protocol requirement
cake: Var RequiementChanges.addedVar has been added as a protocol requirement

/* Class Inheritance Change */
cake: Class C4 has changed its super class from OldType to NewType
cake: Class SubGenericClass has changed its super class from GenericClass<P1> to GenericClass<P2>
cake: Class SuperClassRemoval has removed its super class C3
cake: Class C4 has changed its super class from APINotesTest.OldType to APINotesTest.NewType
cake: Class SubGenericClass has changed its super class from cake.GenericClass<cake.P1> to cake.GenericClass<cake.P2>
cake: Class SuperClassRemoval has removed its super class cake.C3
11 changes: 11 additions & 0 deletions test/api-digester/Outputs/Cake-binary-vs-interface.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
cake: Func FrozenKind.__derived_enum_equals(_:_:) has been removed
cake: Accessor GlobalLetChangedToVar.Get() is a new API without @available attribute
cake: Accessor GlobalVarChangedToLet.Get() is a new API without @available attribute
cake: Accessor GlobalVarChangedToLet.Modify() is a new API without @available attribute
cake: Accessor GlobalVarChangedToLet.Set() is a new API without @available attribute
cake: Enum FrozenKind is now with @frozen
cake: Enum IceKind is now with @frozen
cake: Func FrozenKind.==(_:_:) is a new API without @available attribute
cake: Var C1.CIIns1 is no longer a stored property
cake: Var C1.CIIns2 is no longer a stored property
cake: Var RemoveSetters.Value is no longer a stored property
24 changes: 13 additions & 11 deletions test/api-digester/Outputs/Cake.txt
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@

/* Generic Signature Changes */
cake: Func P1.P1Constraint() has generic signature change from <Self where Self : P1, Self : P2> to <Self where Self : P1>
cake: Protocol P3 has generic signature change from <Self : P1, Self : P2> to <Self : P1, Self : P4>
cake: Func P1.P1Constraint() has generic signature change from <Self where Self : cake.P1, Self : cake.P2> to <Self where Self : cake.P1>
cake: Protocol P3 has generic signature change from <Self : cake.P1, Self : cake.P2> to <Self : cake.P1, Self : cake.P4>

/* RawRepresentable Changes */

/* Removed Decls */
Swift: Extension Int has been removed
cake: Accessor GlobalVarChangedToLet.Set() has been removed
cake: Accessor RemoveSetters.Value.Set() has been removed
cake: Accessor RemoveSetters.subscript(_:).Set() has been removed
cake: AssociatedType RequiementChanges.removedType has been removed
cake: Constructor Somestruct2.init(_:) has been removed
cake: Func C4.foo() has been removed
cake: Func Int.IntEnhancer() has been removed
cake: Func RequiementChanges.removedFunc() has been removed
cake: Var RequiementChanges.removedVar has been removed

Expand All @@ -22,18 +22,20 @@ cake: InfixOperator ..*.. has been changed to a PrefixOperator
cake: Protocol ProtocolToEnum has been changed to a Enum

/* Renamed Decls */
cake: Class SwiftObjcClass has ObjC name change from OldObjCClass to NewObjCClass
cake: Func S1.foo5(x:y:) has been renamed to Func foo5(x:y:z:)
cake: Func SwiftObjcClass.foo(a:b:c:) has ObjC name change from OldObjCFool:OldObjCA:OldObjCB: to NewObjCFool:NewObjCA:NewObjCB:
cake: Struct Somestruct2 has been renamed to Struct NSSomestruct2

/* Type Changes */
cake: AssociatedType AssociatedTypePro.T3 has default type change from C1 to C6
cake: Constructor S1.init(_:) has parameter 0 type change from Int to Double
cake: Func C1.foo2(_:) has parameter 0 type change from Int to () -> ()
cake: AssociatedType AssociatedTypePro.T3 has default type change from cake.C1 to cake.C6
cake: Constructor S1.init(_:) has parameter 0 type change from Swift.Int to Swift.Double
cake: Func C1.foo2(_:) has parameter 0 type change from Swift.Int to () -> ()
cake: Func C7.foo(_:_:) has removed default argument from parameter 0
cake: Func C7.foo(_:_:) has removed default argument from parameter 1
cake: Func ownershipChange(_:_:) has parameter 0 changing from InOut to Default
cake: Func ownershipChange(_:_:) has parameter 1 changing from Shared to Owned
cake: TypeAlias TChangesFromIntToString.T has underlying type change from Int to String
cake: TypeAlias TChangesFromIntToString.T has underlying type change from Swift.Int to Swift.String

/* Decl Attribute changes */
cake: Func C1.foo1() is now not static
Expand All @@ -52,16 +54,16 @@ cake: Protocol P3 has removed inherited protocol P2
cake: Struct fixedLayoutStruct has removed conformance to P1

/* Protocol Requirement Change */
cake: AssociatedType AssociatedTypePro.T1 has removed default type Int
cake: AssociatedType AssociatedTypePro.T1 has removed default type Swift.Int
cake: AssociatedType RequiementChanges.addedTypeWithoutDefault has been added as a protocol requirement
cake: Func RequiementChanges.addedFunc() has been added as a protocol requirement
cake: Var RequiementChanges.addedVar has been added as a protocol requirement
cake: Accessor ClassWithOpenMember.property.Get() is no longer open for subclassing

/* Class Inheritance Change */
cake: Class C4 has changed its super class from OldType to NewType
cake: Class SubGenericClass has changed its super class from GenericClass<P1> to GenericClass<P2>
cake: Class SuperClassRemoval has removed its super class C3
cake: Class C4 has changed its super class from APINotesTest.OldType to APINotesTest.NewType
cake: Class SubGenericClass has changed its super class from cake.GenericClass<cake.P1> to cake.GenericClass<cake.P2>
cake: Class SuperClassRemoval has removed its super class cake.C3
cake: Func ClassWithOpenMember.bar() is no longer open for subclassing
cake: Func ClassWithOpenMember.foo() is no longer open for subclassing
cake: Var ClassWithOpenMember.property is no longer open for subclassing
14 changes: 7 additions & 7 deletions test/api-digester/Outputs/apinotes-diags-3-4.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,21 @@
/* Generic Signature Changes */

/* RawRepresentable Changes */
APINotesTest(APINotesTest.h): TypeAlias AnimalAttributeName(NSString) is now String representable

/* Removed Decls */
APINotesTest(APINotesTest.h): TypeAlias AnimalAttributeName has been removed

/* Moved Decls */

/* Renamed Decls */
APINotesTest(APINotesTest.h): Var globalAttributeName has been renamed to Var AnimalAttributeName.globalAttributeName

/* Type Changes */
APINotesTest(APINotesTest.h): Func AnimalStatusDescriptor.addingAttributes(_:) has parameter 0 type change from [String : Any] to [AnimalAttributeName : Any]
APINotesTest(APINotesTest.h): Func AnimalStatusDescriptor.addingAttributesArray(_:) has parameter 0 type change from [String] to [AnimalAttributeName]
APINotesTest(APINotesTest.h): Func AnimalStatusDescriptor.addingOptionalAttributes(_:) has parameter 0 type change from [String : Any]? to [AnimalAttributeName : Any]?
APINotesTest(APINotesTest.h): Func AnimalStatusDescriptor.addingOptionalAttributesArray(_:) has parameter 0 type change from [String]? to [AnimalAttributeName]?
APINotesTest(APINotesTest.h): Func AnimalStatusDescriptor.animalStatusSingleAttribute(_:) has parameter 0 type change from String to AnimalAttributeName
APINotesTest(APINotesTest.h): Func AnimalStatusDescriptor.animalStatusSingleOptionalAttribute(_:) has parameter 0 type change from String? to AnimalAttributeName?
APINotesTest(APINotesTest.h): Func AnimalStatusDescriptor.addingAttributes(_:) has parameter 0 type change from [Swift.String : Any] to [APINotesTest.AnimalAttributeName : Any]
APINotesTest(APINotesTest.h): Func AnimalStatusDescriptor.addingAttributesArray(_:) has parameter 0 type change from [Swift.String] to [APINotesTest.AnimalAttributeName]
APINotesTest(APINotesTest.h): Func AnimalStatusDescriptor.addingOptionalAttributes(_:) has parameter 0 type change from [Swift.String : Any]? to [APINotesTest.AnimalAttributeName : Any]?
APINotesTest(APINotesTest.h): Func AnimalStatusDescriptor.addingOptionalAttributesArray(_:) has parameter 0 type change from [Swift.String]? to [APINotesTest.AnimalAttributeName]?
APINotesTest(APINotesTest.h): Func AnimalStatusDescriptor.animalStatusSingleAttribute(_:) has parameter 0 type change from Swift.String to APINotesTest.AnimalAttributeName
APINotesTest(APINotesTest.h): Func AnimalStatusDescriptor.animalStatusSingleOptionalAttribute(_:) has parameter 0 type change from Swift.String? to APINotesTest.AnimalAttributeName?

/* Decl Attribute changes */
Loading