|
|
|
/*
|
|
|
|
* Copyright (c) 2017-present, Facebook, Inc.
|
|
|
|
*
|
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
|
*/
|
|
|
|
#include <unordered_map>
|
|
|
|
|
|
|
|
#import <Foundation/NSObject.h>
|
|
|
|
|
|
|
|
#pragma GCC diagnostic ignored "-Wundeclared-selector"
|
|
|
|
|
|
|
|
struct SomeStruct {
|
|
|
|
NSString* someLabel;
|
|
|
|
};
|
|
|
|
|
|
|
|
@interface SomeButton : NSObject
|
|
|
|
|
|
|
|
+ (instancetype)newWithStruct:(SomeStruct)aStruct
|
|
|
|
map:(const std::unordered_map<int, NSString*>&)aMap
|
|
|
|
object:(id)anObject
|
|
|
|
number:(int)n;
|
|
|
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
SomeButton* buttonComponent(void);
|
|
|
|
SomeButton* buttonComponent(void) {
|
|
|
|
// flagging passing empty struct and map
|
|
|
|
return [SomeButton newWithStruct:{} map:{} object:nil number:0];
|
|
|
|
};
|
|
|
|
|
|
|
|
SomeButton* anotherButtonComponent(void);
|
|
|
|
SomeButton* anotherButtonComponent(void) {
|
|
|
|
return [SomeButton newWithStruct:{.someLabel = @"hi"}
|
|
|
|
map:{
|
|
|
|
{ 1, @"some title" }
|
|
|
|
}
|
|
|
|
object:@"a string object"
|
|
|
|
number:5];
|
|
|
|
};
|
|
|
|
|
|
|
|
struct CKComponentAction {
|
|
|
|
CKComponentAction(SEL selector);
|
|
|
|
CKComponentAction(id target, SEL selector);
|
|
|
|
};
|
|
|
|
|
|
|
|
@interface FBSomeComponent : NSObject
|
|
|
|
+ (instancetype)newWithAction:(CKComponentAction)action;
|
|
|
|
@end
|
|
|
|
|
|
|
|
void foo(NSObject* someObject) {
|
|
|
|
[FBSomeComponent newWithAction:@selector(thisBad:)];
|
|
|
|
|
|
|
|
[FBSomeComponent newWithAction:{ @selector(thisIsAlsoBad:) }];
|
|
|
|
|
|
|
|
[FBSomeComponent newWithAction:{ someObject, @selector(thisIsGood:) }];
|
|
|
|
};
|