Don't consider nullable when comparing types in interface and implementation

This commit is contained in:
rfm 2025-03-27 11:51:44 +00:00
parent c19d77bd0e
commit 0057f3f4e9

View file

@ -49,16 +49,20 @@ concreteType(NSString *t)
{ {
static NSString *gClass = @"GS_GENERIC_CLASS"; static NSString *gClass = @"GS_GENERIC_CLASS";
static NSString *gType = @"GS_GENERIC_TYPE"; static NSString *gType = @"GS_GENERIC_TYPE";
NSMutableString *m = nil;
NSRange r; NSRange r;
r = [t rangeOfString: gClass]; r = [t rangeOfString: gClass];
while (r.length > 0) while (r.length > 0)
{ {
NSMutableString *m = [t mutableCopy];
unsigned end; unsigned end;
unsigned len; unsigned len;
unsigned pos; unsigned pos;
if (t != m)
{
t = m = AUTORELEASE([t mutableCopy]);
}
r = NSMakeRange(0, [gClass length]); r = NSMakeRange(0, [gClass length]);
[m deleteCharactersInRange: r]; [m deleteCharactersInRange: r];
len = [m length]; len = [m length];
@ -106,18 +110,20 @@ concreteType(NSString *t)
*/ */
[m deleteCharactersInRange: NSMakeRange(end, pos - end)]; [m deleteCharactersInRange: NSMakeRange(end, pos - end)];
} }
t = AUTORELEASE(m);
r = [t rangeOfString: gClass]; r = [t rangeOfString: gClass];
} }
r = [t rangeOfString: gType]; r = [t rangeOfString: gType];
while (r.length > 0) while (r.length > 0)
{ {
NSMutableString *m = [t mutableCopy]; unsigned len = [t length];
unsigned len = [m length];
unsigned pos = r.location; unsigned pos = r.location;
BOOL found = NO; BOOL found = NO;
if (t != m)
{
t = m = AUTORELEASE([t mutableCopy]);
}
while (pos < len) while (pos < len)
{ {
unichar c = [m characterAtIndex: pos++]; unichar c = [m characterAtIndex: pos++];
@ -169,18 +175,26 @@ concreteType(NSString *t)
*/ */
[m replaceCharactersInRange: r withString: @"id"]; [m replaceCharactersInRange: r withString: @"id"];
} }
t = AUTORELEASE(m);
r = [t rangeOfString: gType]; r = [t rangeOfString: gType];
} }
if ([t hasPrefix: @"nullable "])
{
if (t != m)
{
t = m = AUTORELEASE([t mutableCopy]);
}
[m replaceCharactersInRange: NSMakeRange(0, 9) withString: @""];
}
return t; return t;
} }
static BOOL static BOOL
equalTypes(NSArray *t1, NSArray *t2) equalTypes(NSArray *t1, NSArray *t2)
{ {
unsigned count = (unsigned)[t1 count]; unsigned count;
count = (unsigned)[t1 count];
if ([t2 count] != count) if ([t2 count] != count)
{ {
return NO; return NO;