Commit d028dfbb authored by j4cbo's avatar j4cbo

Merge pull request #130 from PSPDFKit-labs/peter/objc-generics

Objective-C generics
parents 180b4ba7 a6a2ca2f
......@@ -93,6 +93,7 @@ class ObjcMarshal(spec: Spec) extends Marshal(spec) {
def toObjcType(ty: TypeRef, needRef: Boolean): (String, Boolean) = toObjcType(ty.resolved, needRef)
def toObjcType(tm: MExpr): (String, Boolean) = toObjcType(tm, false)
def toObjcType(tm: MExpr, needRef: Boolean): (String, Boolean) = {
def args(tm: MExpr) = if (tm.args.isEmpty) "" else tm.args.map(toBoxedParamType).mkString("<", ", ", ">")
def f(tm: MExpr, needRef: Boolean): (String, Boolean) = {
tm.base match {
case MOptional =>
......@@ -110,9 +111,9 @@ class ObjcMarshal(spec: Spec) extends Marshal(spec) {
case MDate => ("NSDate", true)
case MBinary => ("NSData", true)
case MOptional => throw new AssertionError("optional should have been special cased")
case MList => ("NSArray", true)
case MSet => ("NSSet", true)
case MMap => ("NSDictionary", true)
case MList => ("NSArray" + args(tm), true)
case MSet => ("NSSet" + args(tm), true)
case MMap => ("NSDictionary" + args(tm), true)
case d: MDef => d.defType match {
case DEnum => if (needRef) ("NSNumber", true) else (idObjc.ty(d.name), false)
case DRecord => (idObjc.ty(d.name), true)
......@@ -135,6 +136,11 @@ class ObjcMarshal(spec: Spec) extends Marshal(spec) {
f(tm, needRef)
}
def toBoxedParamType(tm: MExpr): String = {
val (name, needRef) = toObjcType(tm, true)
name + (if(needRef) " *" else "")
}
def toObjcParamType(tm: MExpr): String = {
val (name, needRef) = toObjcType(tm)
name + (if(needRef) " *" else "")
......
......@@ -4,9 +4,9 @@
#import <Foundation/Foundation.h>
@interface DBMapDateRecord : NSObject
- (nonnull instancetype)initWithDatesById:(nonnull NSDictionary *)datesById;
+ (nonnull instancetype)mapDateRecordWithDatesById:(nonnull NSDictionary *)datesById;
- (nonnull instancetype)initWithDatesById:(nonnull NSDictionary<NSString *, NSDate *> *)datesById;
+ (nonnull instancetype)mapDateRecordWithDatesById:(nonnull NSDictionary<NSString *, NSDate *> *)datesById;
@property (nonatomic, readonly, nonnull) NSDictionary * datesById;
@property (nonatomic, readonly, nonnull) NSDictionary<NSString *, NSDate *> * datesById;
@end
......@@ -6,7 +6,7 @@
@implementation DBMapDateRecord
- (nonnull instancetype)initWithDatesById:(nonnull NSDictionary *)datesById
- (nonnull instancetype)initWithDatesById:(nonnull NSDictionary<NSString *, NSDate *> *)datesById
{
if (self = [super init]) {
_datesById = datesById;
......@@ -14,7 +14,7 @@
return self;
}
+ (nonnull instancetype)mapDateRecordWithDatesById:(nonnull NSDictionary *)datesById
+ (nonnull instancetype)mapDateRecordWithDatesById:(nonnull NSDictionary<NSString *, NSDate *> *)datesById
{
return [[self alloc] initWithDatesById:datesById];
}
......
......@@ -4,9 +4,9 @@
#import <Foundation/Foundation.h>
@interface DBMapListRecord : NSObject
- (nonnull instancetype)initWithMapList:(nonnull NSArray *)mapList;
+ (nonnull instancetype)mapListRecordWithMapList:(nonnull NSArray *)mapList;
- (nonnull instancetype)initWithMapList:(nonnull NSArray<NSDictionary<NSString *, NSNumber *> *> *)mapList;
+ (nonnull instancetype)mapListRecordWithMapList:(nonnull NSArray<NSDictionary<NSString *, NSNumber *> *> *)mapList;
@property (nonatomic, readonly, nonnull) NSArray * mapList;
@property (nonatomic, readonly, nonnull) NSArray<NSDictionary<NSString *, NSNumber *> *> * mapList;
@end
......@@ -6,7 +6,7 @@
@implementation DBMapListRecord
- (nonnull instancetype)initWithMapList:(nonnull NSArray *)mapList
- (nonnull instancetype)initWithMapList:(nonnull NSArray<NSDictionary<NSString *, NSNumber *> *> *)mapList
{
if (self = [super init]) {
_mapList = mapList;
......@@ -14,7 +14,7 @@
return self;
}
+ (nonnull instancetype)mapListRecordWithMapList:(nonnull NSArray *)mapList
+ (nonnull instancetype)mapListRecordWithMapList:(nonnull NSArray<NSDictionary<NSString *, NSNumber *> *> *)mapList
{
return [[self alloc] initWithMapList:mapList];
}
......
......@@ -4,13 +4,13 @@
#import <Foundation/Foundation.h>
@interface DBMapRecord : NSObject
- (nonnull instancetype)initWithMap:(nonnull NSDictionary *)map
imap:(nonnull NSDictionary *)imap;
+ (nonnull instancetype)mapRecordWithMap:(nonnull NSDictionary *)map
imap:(nonnull NSDictionary *)imap;
- (nonnull instancetype)initWithMap:(nonnull NSDictionary<NSString *, NSNumber *> *)map
imap:(nonnull NSDictionary<NSNumber *, NSNumber *> *)imap;
+ (nonnull instancetype)mapRecordWithMap:(nonnull NSDictionary<NSString *, NSNumber *> *)map
imap:(nonnull NSDictionary<NSNumber *, NSNumber *> *)imap;
@property (nonatomic, readonly, nonnull) NSDictionary * map;
@property (nonatomic, readonly, nonnull) NSDictionary<NSString *, NSNumber *> * map;
@property (nonatomic, readonly, nonnull) NSDictionary * imap;
@property (nonatomic, readonly, nonnull) NSDictionary<NSNumber *, NSNumber *> * imap;
@end
......@@ -6,8 +6,8 @@
@implementation DBMapRecord
- (nonnull instancetype)initWithMap:(nonnull NSDictionary *)map
imap:(nonnull NSDictionary *)imap
- (nonnull instancetype)initWithMap:(nonnull NSDictionary<NSString *, NSNumber *> *)map
imap:(nonnull NSDictionary<NSNumber *, NSNumber *> *)imap
{
if (self = [super init]) {
_map = map;
......@@ -16,8 +16,8 @@
return self;
}
+ (nonnull instancetype)mapRecordWithMap:(nonnull NSDictionary *)map
imap:(nonnull NSDictionary *)imap
+ (nonnull instancetype)mapRecordWithMap:(nonnull NSDictionary<NSString *, NSNumber *> *)map
imap:(nonnull NSDictionary<NSNumber *, NSNumber *> *)imap
{
return [[self alloc] initWithMap:map
imap:imap];
......
......@@ -4,9 +4,9 @@
#import <Foundation/Foundation.h>
@interface DBNestedCollection : NSObject
- (nonnull instancetype)initWithSetList:(nonnull NSArray *)setList;
+ (nonnull instancetype)nestedCollectionWithSetList:(nonnull NSArray *)setList;
- (nonnull instancetype)initWithSetList:(nonnull NSArray<NSSet<NSString *> *> *)setList;
+ (nonnull instancetype)nestedCollectionWithSetList:(nonnull NSArray<NSSet<NSString *> *> *)setList;
@property (nonatomic, readonly, nonnull) NSArray * setList;
@property (nonatomic, readonly, nonnull) NSArray<NSSet<NSString *> *> * setList;
@end
......@@ -6,7 +6,7 @@
@implementation DBNestedCollection
- (nonnull instancetype)initWithSetList:(nonnull NSArray *)setList
- (nonnull instancetype)initWithSetList:(nonnull NSArray<NSSet<NSString *> *> *)setList
{
if (self = [super init]) {
_setList = setList;
......@@ -14,7 +14,7 @@
return self;
}
+ (nonnull instancetype)nestedCollectionWithSetList:(nonnull NSArray *)setList
+ (nonnull instancetype)nestedCollectionWithSetList:(nonnull NSArray<NSSet<NSString *> *> *)setList
{
return [[self alloc] initWithSetList:setList];
}
......
......@@ -4,9 +4,9 @@
#import <Foundation/Foundation.h>
@interface DBPrimitiveList : NSObject
- (nonnull instancetype)initWithList:(nonnull NSArray *)list;
+ (nonnull instancetype)primitiveListWithList:(nonnull NSArray *)list;
- (nonnull instancetype)initWithList:(nonnull NSArray<NSNumber *> *)list;
+ (nonnull instancetype)primitiveListWithList:(nonnull NSArray<NSNumber *> *)list;
@property (nonatomic, readonly, nonnull) NSArray * list;
@property (nonatomic, readonly, nonnull) NSArray<NSNumber *> * list;
@end
......@@ -6,7 +6,7 @@
@implementation DBPrimitiveList
- (nonnull instancetype)initWithList:(nonnull NSArray *)list
- (nonnull instancetype)initWithList:(nonnull NSArray<NSNumber *> *)list
{
if (self = [super init]) {
_list = list;
......@@ -14,7 +14,7 @@
return self;
}
+ (nonnull instancetype)primitiveListWithList:(nonnull NSArray *)list
+ (nonnull instancetype)primitiveListWithList:(nonnull NSArray<NSNumber *> *)list
{
return [[self alloc] initWithList:list];
}
......
......@@ -4,13 +4,13 @@
#import <Foundation/Foundation.h>
@interface DBSetRecord : NSObject
- (nonnull instancetype)initWithSet:(nonnull NSSet *)set
iset:(nonnull NSSet *)iset;
+ (nonnull instancetype)setRecordWithSet:(nonnull NSSet *)set
iset:(nonnull NSSet *)iset;
- (nonnull instancetype)initWithSet:(nonnull NSSet<NSString *> *)set
iset:(nonnull NSSet<NSNumber *> *)iset;
+ (nonnull instancetype)setRecordWithSet:(nonnull NSSet<NSString *> *)set
iset:(nonnull NSSet<NSNumber *> *)iset;
@property (nonatomic, readonly, nonnull) NSSet * set;
@property (nonatomic, readonly, nonnull) NSSet<NSString *> * set;
@property (nonatomic, readonly, nonnull) NSSet * iset;
@property (nonatomic, readonly, nonnull) NSSet<NSNumber *> * iset;
@end
......@@ -6,8 +6,8 @@
@implementation DBSetRecord
- (nonnull instancetype)initWithSet:(nonnull NSSet *)set
iset:(nonnull NSSet *)iset
- (nonnull instancetype)initWithSet:(nonnull NSSet<NSString *> *)set
iset:(nonnull NSSet<NSNumber *> *)iset
{
if (self = [super init]) {
_set = set;
......@@ -16,8 +16,8 @@
return self;
}
+ (nonnull instancetype)setRecordWithSet:(nonnull NSSet *)set
iset:(nonnull NSSet *)iset
+ (nonnull instancetype)setRecordWithSet:(nonnull NSSet<NSString *> *)set
iset:(nonnull NSSet<NSNumber *> *)iset
{
return [[self alloc] initWithSet:set
iset:iset];
......
......@@ -78,28 +78,28 @@ static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for th
} DJINNI_TRANSLATE_EXCEPTIONS()
}
+ (nonnull NSDictionary *)getMap {
+ (nonnull NSDictionary<NSString *, NSNumber *> *)getMap {
try {
auto r = ::testsuite::TestHelpers::get_map();
return ::djinni::Map<::djinni::String, ::djinni::I64>::fromCpp(r);
} DJINNI_TRANSLATE_EXCEPTIONS()
}
+ (BOOL)checkMap:(nonnull NSDictionary *)m {
+ (BOOL)checkMap:(nonnull NSDictionary<NSString *, NSNumber *> *)m {
try {
auto r = ::testsuite::TestHelpers::check_map(::djinni::Map<::djinni::String, ::djinni::I64>::toCpp(m));
return ::djinni::Bool::fromCpp(r);
} DJINNI_TRANSLATE_EXCEPTIONS()
}
+ (nonnull NSDictionary *)getEmptyMap {
+ (nonnull NSDictionary<NSString *, NSNumber *> *)getEmptyMap {
try {
auto r = ::testsuite::TestHelpers::get_empty_map();
return ::djinni::Map<::djinni::String, ::djinni::I64>::fromCpp(r);
} DJINNI_TRANSLATE_EXCEPTIONS()
}
+ (BOOL)checkEmptyMap:(nonnull NSDictionary *)m {
+ (BOOL)checkEmptyMap:(nonnull NSDictionary<NSString *, NSNumber *> *)m {
try {
auto r = ::testsuite::TestHelpers::check_empty_map(::djinni::Map<::djinni::String, ::djinni::I64>::toCpp(m));
return ::djinni::Bool::fromCpp(r);
......@@ -132,7 +132,7 @@ static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for th
} DJINNI_TRANSLATE_EXCEPTIONS()
}
+ (void)checkEnumMap:(nonnull NSDictionary *)m {
+ (void)checkEnumMap:(nonnull NSDictionary<NSNumber *, NSString *> *)m {
try {
::testsuite::TestHelpers::check_enum_map(::djinni::Map<::djinni::Enum<::testsuite::color, DBColor>, ::djinni::String>::toCpp(m));
} DJINNI_TRANSLATE_EXCEPTIONS()
......
......@@ -37,13 +37,13 @@
+ (BOOL)checkNestedCollection:(nonnull DBNestedCollection *)nc;
+ (nonnull NSDictionary *)getMap;
+ (nonnull NSDictionary<NSString *, NSNumber *> *)getMap;
+ (BOOL)checkMap:(nonnull NSDictionary *)m;
+ (BOOL)checkMap:(nonnull NSDictionary<NSString *, NSNumber *> *)m;
+ (nonnull NSDictionary *)getEmptyMap;
+ (nonnull NSDictionary<NSString *, NSNumber *> *)getEmptyMap;
+ (BOOL)checkEmptyMap:(nonnull NSDictionary *)m;
+ (BOOL)checkEmptyMap:(nonnull NSDictionary<NSString *, NSNumber *> *)m;
+ (nonnull DBMapListRecord *)getMapListRecord;
......@@ -53,7 +53,7 @@
+ (void)checkClientInterfaceNonascii:(nullable id<DBClientInterface>)i;
+ (void)checkEnumMap:(nonnull NSDictionary *)m;
+ (void)checkEnumMap:(nonnull NSDictionary<NSNumber *, NSString *> *)m;
+ (void)checkEnum:(DBColor)c;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment