Add outlet if it is a property

This commit is contained in:
Gregory John Casamento 2024-12-21 21:47:10 -05:00
parent e778644329
commit b43f7542cb
6 changed files with 55 additions and 37 deletions

View file

@ -1885,12 +1885,15 @@
{ {
NSArray *methods = [cls methods]; NSArray *methods = [cls methods];
NSArray *ivars = [cls ivars]; NSArray *ivars = [cls ivars];
NSArray *properties = [cls properties];
NSString *superClass = [cls superClassName]; NSString *superClass = [cls superClassName];
NSString *className = [cls className]; NSString *className = [cls className];
NSEnumerator *ien = [ivars objectEnumerator]; NSEnumerator *ien = [ivars objectEnumerator];
NSEnumerator *men = [methods objectEnumerator]; NSEnumerator *men = [methods objectEnumerator];
NSEnumerator *pen = [properties objectEnumerator];
OCMethod *method = nil; OCMethod *method = nil;
OCIVar *ivar = nil; OCIVar *ivar = nil;
OCProperty *property = nil;
NSMutableArray *actions = [NSMutableArray array]; NSMutableArray *actions = [NSMutableArray array];
NSMutableArray *outlets = [NSMutableArray array]; NSMutableArray *outlets = [NSMutableArray array];
@ -1911,6 +1914,16 @@
} }
} }
while((property = (OCProperty *)[pen nextObject]) != nil)
{
if([property isOutlet])
{
[outlets addObject: [property name]];
}
}
NSLog(@"outlets = %@", outlets);
if(([self isKnownClass: superClass] || superClass == nil) && if(([self isKnownClass: superClass] || superClass == nil) &&
[cls isCategory] == NO) [cls isCategory] == NO)
{ {

View file

@ -35,6 +35,7 @@ OCHeaderParser.h \
OCIVar.h \ OCIVar.h \
OCIVarDecl.h \ OCIVarDecl.h \
OCMethod.h \ OCMethod.h \
OCProperty.h \
ParserFunctions.h ParserFunctions.h
# #
@ -47,6 +48,7 @@ OCHeaderParser.m \
OCIVar.m \ OCIVar.m \
OCIVarDecl.m \ OCIVarDecl.m \
OCMethod.m \ OCMethod.m \
OCProperty.m \
ParserFunctions.m ParserFunctions.m
# #

View file

@ -41,6 +41,7 @@ FOUNDATION_EXPORT const unsigned char GormObjCHeaderParserVersionString[];
#include <GormObjCHeaderParser/OCIVar.h> #include <GormObjCHeaderParser/OCIVar.h>
#include <GormObjCHeaderParser/OCIVarDecl.h> #include <GormObjCHeaderParser/OCIVarDecl.h>
#include <GormObjCHeaderParser/OCMethod.h> #include <GormObjCHeaderParser/OCMethod.h>
#include <GormObjCHeaderParser/OCProperty.h>
#include <GormObjCHeaderParser/ParserFunctions.h> #include <GormObjCHeaderParser/ParserFunctions.h>
#endif #endif

View file

@ -31,15 +31,16 @@
@interface OCClass : NSObject @interface OCClass : NSObject
{ {
NSMutableArray *ivars; NSMutableArray *_ivars;
NSMutableArray *methods; NSMutableArray *_methods;
NSMutableArray *protocols; NSMutableArray *_protocols;
NSMutableArray *properties; NSMutableArray *_properties;
NSString *className; NSString *_className;
NSString *superClassName; NSString *_superClassName;
NSString *classString; NSString *_classString;
BOOL isCategory; BOOL _isCategory;
} }
- (id) initWithString: (NSString *)string; - (id) initWithString: (NSString *)string;
- (NSArray *) methods; - (NSArray *) methods;
- (void) addMethod: (NSString *)name isAction: (BOOL)flag; - (void) addMethod: (NSString *)name isAction: (BOOL)flag;
@ -52,9 +53,9 @@
- (BOOL) isCategory; - (BOOL) isCategory;
- (void) setIsCategory: (BOOL)flag; - (void) setIsCategory: (BOOL)flag;
- (NSArray *) properties; - (NSArray *) properties;
- (void) addProperty: (NSString *)name isOutlet: (BOOL)flag;
- (void) parse; - (void) parse;
@end @end
#endif #endif

View file

@ -24,12 +24,13 @@
#include <Foundation/Foundation.h> #include <Foundation/Foundation.h>
#include <GormObjCHeaderParser/OCClass.h> #include "GormObjCHeaderParser/OCClass.h"
#include <GormObjCHeaderParser/OCMethod.h> #include "GormObjCHeaderParser/OCMethod.h"
#include <GormObjCHeaderParser/OCIVar.h> #include "GormObjCHeaderParser/OCProperty.h"
#include <GormObjCHeaderParser/OCIVarDecl.h> #include "GormObjCHeaderParser/OCIVar.h"
#include <GormObjCHeaderParser/NSScanner+OCHeaderParser.h> #include "GormObjCHeaderParser/OCIVarDecl.h"
#include <GormObjCHeaderParser/ParserFunctions.h> #include "GormObjCHeaderParser/NSScanner+OCHeaderParser.h"
#include "GormObjCHeaderParser/ParserFunctions.h"
@implementation OCClass @implementation OCClass
- (id) initWithString: (NSString *)string - (id) initWithString: (NSString *)string
@ -105,12 +106,12 @@
- (BOOL) isCategory - (BOOL) isCategory
{ {
return isCategory; return _isCategory;
} }
- (void) setIsCategory: (BOOL)flag - (void) setIsCategory: (BOOL)flag
{ {
isCategory = flag; _isCategory = flag;
} }
- (NSArray *) properties - (NSArray *) properties
@ -118,16 +119,6 @@
return _properties; return _properties;
} }
- (void) addProperty: (NSString *)name isOutlet: (BOOL)flag
{
}
// Properties can be declared anywhere within the file, so it's necessary
// to parse them out separately.
- (void) _propertiesScan
{
}
- (void) _strip - (void) _strip
{ {
NSScanner *stripScanner = [NSScanner scannerWithString: _classString]; NSScanner *stripScanner = [NSScanner scannerWithString: _classString];
@ -155,7 +146,6 @@
NSString *interfaceLine = nil; NSString *interfaceLine = nil;
NSString *methodsString = nil; NSString *methodsString = nil;
NSString *ivarsString = nil; NSString *ivarsString = nil;
NSString *propertyString = nil;
NSCharacterSet *wsnl = [NSCharacterSet whitespaceAndNewlineCharacterSet]; NSCharacterSet *wsnl = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSCharacterSet *pmcs = [NSCharacterSet characterSetWithCharactersInString: @"+-"]; NSCharacterSet *pmcs = [NSCharacterSet characterSetWithCharactersInString: @"+-"];
@ -201,14 +191,13 @@
// check to see if it's a category on an existing interface... // check to see if it's a category on an existing interface...
if (lookAhead(interfaceLine,@"(")) if (lookAhead(interfaceLine,@"("))
{ {
isCategory = YES; _isCategory = YES;
} }
} }
if (isCategory == NO) if (_isCategory == NO)
{ {
NSScanner *ivarScan = nil; NSScanner *ivarScan = nil;
NSScanner *propertyScan = nil;
// put the ivars into a a string... // put the ivars into a a string...
[scanner scanUpToAndIncludingString: @"{" intoString: NULL]; [scanner scanUpToAndIncludingString: @"{" intoString: NULL];
@ -232,9 +221,6 @@
} }
} }
} }
else // yes, it's a category, but properties can be in categories...
{
}
// put the methods into a string... // put the methods into a string...
if (ivarsString != nil) if (ivarsString != nil)
@ -247,12 +233,28 @@
[scanner scanUpToAndIncludingString: interfaceLine intoString: NULL]; [scanner scanUpToAndIncludingString: interfaceLine intoString: NULL];
[scanner scanUpToString: @"@end" intoString: &methodsString]; [scanner scanUpToString: @"@end" intoString: &methodsString];
} }
if (_classString != nil)
{
NSScanner *propertiesScan = [NSScanner scannerWithString: _classString];
while ([propertiesScan isAtEnd] == NO)
{
NSString *propertiesLine = nil;
OCProperty *property = nil;
[propertiesScan scanUpToString: @";" intoString: &propertiesLine];
[propertiesScan scanString: @";" intoString: NULL];
property = AUTORELEASE([[OCProperty alloc] initWithString: propertiesLine]);
[property parse];
[_properties addObject: property];
}
}
// scan each method... // scan each method...
if (methodsString != nil) if (methodsString != nil)
{ {
NSScanner *methodScan = [NSScanner scannerWithString: methodsString]; NSScanner *methodScan = [NSScanner scannerWithString: methodsString];
while(![methodScan isAtEnd]) while ([methodScan isAtEnd] == NO)
{ {
NSString *methodLine = nil; NSString *methodLine = nil;
OCMethod *method = nil; OCMethod *method = nil;
@ -262,7 +264,7 @@
method = AUTORELEASE([[OCMethod alloc] initWithString: methodLine]); method = AUTORELEASE([[OCMethod alloc] initWithString: methodLine]);
[method parse]; [method parse];
[_methods addObject: method]; [_methods addObject: method];
} }
} }
} }
@end @end

View file

@ -159,6 +159,5 @@
[ivar parse]; [ivar parse];
[ivars addObject: ivar]; [ivars addObject: ivar];
} }
} }
@end @end