Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(218)

Unified Diff: class-dump/src/CDMultiFileVisitor.m

Issue 7793008: Add the 3.3.3 sources for class-dump. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/
Patch Set: Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « class-dump/src/CDMultiFileVisitor.h ('k') | class-dump/src/CDOCCategory.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: class-dump/src/CDMultiFileVisitor.m
===================================================================
--- class-dump/src/CDMultiFileVisitor.m (revision 0)
+++ class-dump/src/CDMultiFileVisitor.m (revision 0)
@@ -0,0 +1,240 @@
+// -*- 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 "CDMultiFileVisitor.h"
+
+#import "NSArray-Extensions.h"
+#import "CDClassDump.h"
+#import "CDClassFrameworkVisitor.h"
+#import "CDSymbolReferences.h"
+#import "CDOCClass.h"
+#import "CDOCProtocol.h"
+#import "CDOCIvar.h"
+#import "CDTypeController.h"
+
+@implementation CDMultiFileVisitor
+
+- (id)init;
+{
+ if ([super init] == nil)
+ return nil;
+
+ outputPath = nil;
+
+ return self;
+}
+
+- (void)dealloc;
+{
+ [outputPath release];
+
+ [super dealloc];
+}
+
+- (NSString *)outputPath;
+{
+ return outputPath;
+}
+
+- (void)setOutputPath:(NSString *)newOutputPath;
+{
+ if (newOutputPath == outputPath)
+ return;
+
+ [outputPath release];
+ outputPath = [newOutputPath retain];
+}
+
+- (void)createOutputPathIfNecessary;
+{
+ if (outputPath != nil) {
+ NSFileManager *fileManager;
+ BOOL isDirectory;
+
+ fileManager = [NSFileManager defaultManager];
+ if ([fileManager fileExistsAtPath:outputPath isDirectory:&isDirectory] == NO) {
+ BOOL result;
+
+ result = [fileManager createDirectoryAtPath:outputPath attributes:nil];
+ if (result == NO) {
+ NSLog(@"Error: Couldn't create output directory: %@", outputPath);
+ return;
+ }
+ } else if (isDirectory == NO) {
+ NSLog(@"Error: File exists at output path: %@", outputPath);
+ return;
+ }
+ }
+}
+
+- (void)buildClassFrameworks;
+{
+ CDClassFrameworkVisitor *visitor;
+
+ visitor = [[CDClassFrameworkVisitor alloc] init];
+ [visitor setClassDump:classDump];
+ [classDump recursivelyVisit:visitor];
+ [symbolReferences setFrameworkNamesByClassName:[visitor frameworkNamesByClassName]];
+ [symbolReferences setFrameworkNamesByProtocolName:[visitor frameworkNamesByProtocolName]];
+ [visitor release];
+}
+
+- (void)generateStructureHeader;
+{
+ NSString *filename;
+ NSString *referenceString;
+
+ [resultString setString:@""];
+ [classDump appendHeaderToString:resultString];
+
+ [symbolReferences removeAllReferences];
+ referenceIndex = [resultString length];
+
+ [[classDump typeController] appendStructuresToString:resultString symbolReferences:symbolReferences];
+
+ referenceString = [symbolReferences referenceString];
+ if (referenceString != nil)
+ [resultString insertString:referenceString atIndex:referenceIndex];
+
+ filename = @"CDStructures.h";
+ if (outputPath != nil)
+ filename = [outputPath stringByAppendingPathComponent:filename];
+
+ [[resultString dataUsingEncoding:NSUTF8StringEncoding] writeToFile:filename atomically:YES];
+}
+
+- (void)willBeginVisiting;
+{
+ [super willBeginVisiting];
+
+ [classDump appendHeaderToString:resultString];
+
+ if ([classDump containsObjectiveCData] || [classDump hasEncryptedFiles]) {
+ [self buildClassFrameworks];
+ [self createOutputPathIfNecessary];
+ [self generateStructureHeader];
+ } else {
+ // TODO (2007-06-14): Make sure this generates no output files in this case.
+ NSLog(@"Warning: This file does not contain any Objective-C runtime information.");
+ }
+}
+
+- (void)willVisitClass:(CDOCClass *)aClass;
+{
+ NSString *str;
+
+ // First, we set up some context...
+ [resultString setString:@""];
+ [classDump appendHeaderToString:resultString];
+
+ [symbolReferences removeAllReferences];
+ str = [symbolReferences importStringForClassName:[aClass superClassName]];
+ if (str != nil) {
+ [resultString appendString:str];
+ [resultString appendString:@"\n"];
+ }
+
+ referenceIndex = [resultString length];
+
+ // And then generate the regular output
+ [super willVisitClass:aClass];
+}
+
+- (void)didVisitClass:(CDOCClass *)aClass;
+{
+ NSString *referenceString;
+ NSString *filename;
+
+ // Generate the regular output
+ [super didVisitClass:aClass];
+
+ // Then insert the imports and write the file.
+ [symbolReferences removeClassName:[aClass name]];
+ [symbolReferences removeClassName:[aClass superClassName]];
+ referenceString = [symbolReferences referenceString];
+ if (referenceString != nil)
+ [resultString insertString:referenceString atIndex:referenceIndex];
+
+ filename = [NSString stringWithFormat:@"%@.h", [aClass name]];
+ if (outputPath != nil)
+ filename = [outputPath stringByAppendingPathComponent:filename];
+
+ [[resultString dataUsingEncoding:NSUTF8StringEncoding] writeToFile:filename atomically:YES];
+}
+
+- (void)willVisitCategory:(CDOCCategory *)aCategory;
+{
+ NSString *str;
+
+ // First, we set up some context...
+ [resultString setString:@""];
+ [classDump appendHeaderToString:resultString];
+
+ [symbolReferences removeAllReferences];
+ str = [symbolReferences importStringForClassName:[aCategory className]];
+ if (str != nil) {
+ [resultString appendString:str];
+ [resultString appendString:@"\n"];
+ }
+ referenceIndex = [resultString length];
+
+ // And then generate the regular output
+ [super willVisitCategory:aCategory];
+}
+
+- (void)didVisitCategory:(CDOCCategory *)aCategory;
+{
+ NSString *referenceString;
+ NSString *filename;
+
+ // Generate the regular output
+ [super didVisitCategory:aCategory];
+
+ // Then insert the imports and write the file.
+ [symbolReferences removeClassName:[aCategory className]];
+ referenceString = [symbolReferences referenceString];
+ if (referenceString != nil)
+ [resultString insertString:referenceString atIndex:referenceIndex];
+
+ filename = [NSString stringWithFormat:@"%@-%@.h", [aCategory className], [aCategory name]];
+ if (outputPath != nil)
+ filename = [outputPath stringByAppendingPathComponent:filename];
+
+ [[resultString dataUsingEncoding:NSUTF8StringEncoding] writeToFile:filename atomically:YES];
+}
+
+- (void)willVisitProtocol:(CDOCProtocol *)aProtocol;
+{
+ [resultString setString:@""];
+ [classDump appendHeaderToString:resultString];
+
+ [symbolReferences removeAllReferences];
+ referenceIndex = [resultString length];
+
+ // And then generate the regular output
+ [super willVisitProtocol:aProtocol];
+}
+
+- (void)didVisitProtocol:(CDOCProtocol *)aProtocol;
+{
+ NSString *referenceString;
+ NSString *filename;
+
+ // Generate the regular output
+ [super didVisitProtocol:aProtocol];
+
+ // Then insert the imports and write the file.
+ referenceString = [symbolReferences referenceString];
+ if (referenceString != nil)
+ [resultString insertString:referenceString atIndex:referenceIndex];
+
+ filename = [NSString stringWithFormat:@"%@-Protocol.h", [aProtocol name]];
+ if (outputPath != nil)
+ filename = [outputPath stringByAppendingPathComponent:filename];
+
+ [[resultString dataUsingEncoding:NSUTF8StringEncoding] writeToFile:filename atomically:YES];
+}
+
+@end
Property changes on: class-dump/src/CDMultiFileVisitor.m
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « class-dump/src/CDMultiFileVisitor.h ('k') | class-dump/src/CDOCCategory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698