Index: class-dump/src/CDSymbolReferences.m |
=================================================================== |
--- class-dump/src/CDSymbolReferences.m (revision 0) |
+++ class-dump/src/CDSymbolReferences.m (revision 0) |
@@ -0,0 +1,172 @@ |
+// -*- mode: ObjC -*- |
+ |
+// This file is part of class-dump, a utility for examining the Objective-C segment of Mach-O files. |
+// Copyright (C) 1997-1998, 2000-2001, 2004-2010 Steve Nygard. |
+ |
+#import "CDSymbolReferences.h" |
+ |
+@implementation CDSymbolReferences |
+ |
+- (id)init; |
+{ |
+ if ([super init] == nil) |
+ return nil; |
+ |
+ frameworkNamesByClassName = nil; |
+ frameworkNamesByProtocolName = nil; |
+ |
+ classes = [[NSMutableSet alloc] init]; |
+ protocols = [[NSMutableSet alloc] init]; |
+ |
+ return self; |
+} |
+ |
+- (void)dealloc; |
+{ |
+ [frameworkNamesByClassName release]; |
+ [frameworkNamesByProtocolName release]; |
+ |
+ [classes release]; |
+ [protocols release]; |
+ |
+ [super dealloc]; |
+} |
+ |
+- (void)setFrameworkNamesByClassName:(NSDictionary *)newValue; |
+{ |
+ if (newValue == frameworkNamesByClassName) |
+ return; |
+ |
+ [frameworkNamesByClassName release]; |
+ frameworkNamesByClassName = [newValue retain]; |
+} |
+ |
+- (void)setFrameworkNamesByProtocolName:(NSDictionary *)newValue; |
+{ |
+ if (newValue == frameworkNamesByProtocolName) |
+ return; |
+ |
+ [frameworkNamesByProtocolName release]; |
+ frameworkNamesByProtocolName = [newValue retain]; |
+} |
+ |
+- (NSString *)frameworkForClassName:(NSString *)aClassName; |
+{ |
+ return [frameworkNamesByClassName objectForKey:aClassName]; |
+} |
+ |
+- (NSString *)frameworkForProtocolName:(NSString *)aProtocolName; |
+{ |
+ return [frameworkNamesByProtocolName objectForKey:aProtocolName]; |
+} |
+ |
+- (NSArray *)classes; |
+{ |
+ return [[classes allObjects] sortedArrayUsingSelector:@selector(compare:)]; |
+} |
+ |
+- (void)addClassName:(NSString *)aClassName; |
+{ |
+ [classes addObject:aClassName]; |
+} |
+ |
+- (void)removeClassName:(NSString *)aClassName; |
+{ |
+ if (aClassName != nil) |
+ [classes removeObject:aClassName]; |
+} |
+ |
+- (NSArray *)protocols; |
+{ |
+ return [[protocols allObjects] sortedArrayUsingSelector:@selector(compare:)]; |
+} |
+ |
+- (void)addProtocolName:(NSString *)aProtocolName; |
+{ |
+ [protocols addObject:aProtocolName]; |
+} |
+ |
+- (void)addProtocolNamesFromArray:(NSArray *)protocolNames; |
+{ |
+ [protocols addObjectsFromArray:protocolNames]; |
+} |
+ |
+- (NSString *)description; |
+{ |
+ return [NSString stringWithFormat:@"<%@:%p> frameworkNamesByClassName: %@, frameworkNamesByProtocolName: %@, classes: %@, protocols: %@", |
+ NSStringFromClass([self class]), self, |
+ frameworkNamesByClassName, frameworkNamesByProtocolName, |
+ [self classes], [self protocols]]; |
+} |
+ |
+- (void)_appendToString:(NSMutableString *)resultString; |
+{ |
+ NSArray *names; |
+ |
+ names = [self protocols]; |
+ for (NSString *name in names) { |
+ NSString *str; |
+ |
+ str = [self importStringForProtocolName:name]; |
+ if (str != nil) |
+ [resultString appendString:str]; |
+ } |
+ if ([names count] > 0) |
+ [resultString appendString:@"\n"]; |
+ |
+ names = [self classes]; |
+ if ([names count] > 0) { |
+ [resultString appendFormat:@"@class %@;\n\n", [names componentsJoinedByString:@", "]]; |
+ } |
+} |
+ |
+- (NSString *)referenceString; |
+{ |
+ NSMutableString *referenceString; |
+ |
+ referenceString = [[[NSMutableString alloc] init] autorelease]; |
+ [self _appendToString:referenceString]; |
+ |
+ if ([referenceString length] == 0) |
+ return nil; |
+ |
+ return referenceString; |
+} |
+ |
+- (void)removeAllReferences; |
+{ |
+ [classes removeAllObjects]; |
+ [protocols removeAllObjects]; |
+} |
+ |
+- (NSString *)importStringForClassName:(NSString *)aClassName; |
+{ |
+ if (aClassName != nil) { |
+ NSString *framework; |
+ |
+ framework = [self frameworkForClassName:aClassName]; |
+ if (framework == nil) |
+ return [NSString stringWithFormat:@"#import \"%@.h\"\n", aClassName]; |
+ else |
+ return [NSString stringWithFormat:@"#import <%@/%@.h>\n", framework, aClassName]; |
+ } |
+ |
+ return nil; |
+} |
+ |
+- (NSString *)importStringForProtocolName:(NSString *)aProtocolName; |
+{ |
+ if (aProtocolName != nil) { |
+ NSString *framework; |
+ |
+ framework = [self frameworkForClassName:aProtocolName]; |
+ if (framework == nil) |
+ return [NSString stringWithFormat:@"#import \"%@-Protocol.h\"\n", aProtocolName]; |
+ else |
+ return [NSString stringWithFormat:@"#import <%@/%@-Protocol.h>\n", framework, aProtocolName]; |
+ } |
+ |
+ return nil; |
+} |
+ |
+@end |
Property changes on: class-dump/src/CDSymbolReferences.m |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |