ObjectiveCAnnotate / Classes / PathProcessor.m

//
//  PathProcessor.m
//
//  Created by Dylan Bruzenak.
//  Released under a BSD-style license. See license.txt
//

#import "PathProcessor.h"
#import "AnnotatedClass.h"
#import "AnnotationManager.h"

@implementation PathProcessor

- (NSString *) pathForImplementationOfHeader: (NSString *) fullHeaderPath
{
	return [[fullHeaderPath stringByDeletingPathExtension] stringByAppendingPathExtension:@"m"];
}

- (BOOL) isHeaderFilePath: (NSString *) filePath
{
	return [[filePath pathExtension] isEqualToString:@"h"];
}

- (NSArray *) annotatedClassesInPath: (NSString *) path
{
	NSFileManager *fileManager = [NSFileManager defaultManager];
	NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtPath:path];
	
	NSMutableArray *annotatedClasses = [NSMutableArray array];
	
	for(NSString *filePath in enumerator)
	{
		if(![self isHeaderFilePath: filePath])
		{
			continue;
		}
		
		NSString *fullHeaderPath = [path stringByAppendingPathComponent:filePath];
		NSString *fullImplementationPath = [self pathForImplementationOfHeader: fullHeaderPath];

		if(![fileManager fileExistsAtPath:fullImplementationPath])
		{
			continue;
		}
		
		AnnotatedClass *annotatedClass = [[[AnnotatedClass alloc] initWithHeaderPath: fullHeaderPath implementationPath: fullImplementationPath] autorelease];
		
		if(annotatedClass.shouldProcessAnnotations)
		{
			[annotatedClasses addObject:annotatedClass];
		}
	}
	
	return annotatedClasses;
}

- (void) processPath: (NSString *) path
{
	NSArray *annotatedClasses = [self annotatedClassesInPath: path];
	
	AnnotationManager *annotationManager = [[[AnnotationManager alloc] init] autorelease];
	
	for(AnnotatedClass *annotatedClass in annotatedClasses)
	{
		[annotatedClass processAnnotationsWithAnnotationManager: annotationManager];
		[annotatedClass writeFiles];
	}
}

@end
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.