Skip to content

Commit

Permalink
Implemented data structure for handling links to classes from categor…
Browse files Browse the repository at this point in the history
…ies.
  • Loading branch information
tomaz committed Dec 10, 2012
1 parent 9fe1cd5 commit 07dd791
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 13 deletions.
24 changes: 22 additions & 2 deletions AppledocTests/Store/CategoryInfoTests.mm
Expand Up @@ -19,6 +19,26 @@ static void runWithCategoryInfo(void(^handler)(CategoryInfo *info)) {

TEST_BEGIN(CategoryInfoTests)

describe(@"lazy properties:", ^{
it(@"should initialize objects on first access", ^{
runWithCategoryInfo(^(CategoryInfo *info) {
// execute & verify
info.categoryClass should be_instance_of([ObjectLinkInfo class]);
});
});
});

describe(@"convenience properties:", ^{
it(@"should return name of super class", ^{
runWithCategoryInfo(^(CategoryInfo *info) {
// setup
info.categoryClass.nameOfObject = @"SomeClass";
// execute & verify
info.nameOfClass should equal(@"SomeClass");
});
});
});

describe(@"category or extension helpers:", ^{
it(@"should work if name of category is nil", ^{
runWithCategoryInfo(^(CategoryInfo *info) {
Expand Down Expand Up @@ -55,7 +75,7 @@ static void runWithCategoryInfo(void(^handler)(CategoryInfo *info)) {
it(@"should handle extension", ^{
runWithCategoryInfo(^(CategoryInfo *info) {
// setup
info.nameOfClass = @"MyClass";
info.categoryClass.nameOfObject = @"MyClass";
// execute & verify
info.uniqueObjectID should equal(@"MyClass()");
info.objectCrossRefPathTemplate should equal(@"$CATEGORIES/MyClass.$EXT");
Expand All @@ -65,7 +85,7 @@ static void runWithCategoryInfo(void(^handler)(CategoryInfo *info)) {
it(@"should handle category", ^{
runWithCategoryInfo(^(CategoryInfo *info) {
// setup
info.nameOfClass = @"MyClass";
info.categoryClass.nameOfObject = @"MyClass";
info.nameOfCategory = @"MyCategory";
// execute & verify
info.uniqueObjectID should equal(@"MyClass(MyCategory)");
Expand Down
4 changes: 2 additions & 2 deletions AppledocTests/Store/StoreTests.mm
Expand Up @@ -1196,7 +1196,7 @@ static void runWithStore(void(^handler)(Store *store)) {
beforeEach(^{
runWithStore(^(Store *store) {
CategoryInfo *categoryInfo = [[CategoryInfo alloc] init];
categoryInfo.nameOfClass = @"MyClass";
categoryInfo.categoryClass.nameOfObject = @"MyClass";
categoryInfo.nameOfCategory = @"";
[[SpecHelper specHelper] sharedExampleContext][@"store"] = store;
[[SpecHelper specHelper] sharedExampleContext][@"object"] = categoryInfo;
Expand All @@ -1211,7 +1211,7 @@ static void runWithStore(void(^handler)(Store *store)) {
beforeEach(^{
runWithStore(^(Store *store) {
CategoryInfo *categoryInfo = [[CategoryInfo alloc] init];
categoryInfo.nameOfClass = @"MyClass";
categoryInfo.categoryClass.nameOfObject = @"MyClass";
categoryInfo.nameOfCategory = @"MyCategory";
[[SpecHelper specHelper] sharedExampleContext][@"store"] = store;
[[SpecHelper specHelper] sharedExampleContext][@"object"] = categoryInfo;
Expand Down
12 changes: 6 additions & 6 deletions appledoc.xcodeproj/project.pbxproj
Expand Up @@ -263,8 +263,8 @@
7336652415457A2E000F7AFF /* ConstantInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = ConstantInfo.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
7336652815457BF7000F7AFF /* ConstantInfoTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ConstantInfoTests.mm; sourceTree = "<group>"; };
733A93101671ED9800734F0A /* LinkKnownObjectsTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkKnownObjectsTask.h; sourceTree = "<group>"; };
733A93111671ED9800734F0A /* LinkKnownObjectsTask.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LinkKnownObjectsTask.m; sourceTree = "<group>"; };
733A93151671EF0600734F0A /* LinkKnownObjectsTaskTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LinkKnownObjectsTaskTests.mm; sourceTree = "<group>"; };
733A93111671ED9800734F0A /* LinkKnownObjectsTask.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = LinkKnownObjectsTask.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
733A93151671EF0600734F0A /* LinkKnownObjectsTaskTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 0; path = LinkKnownObjectsTaskTests.mm; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
733E445C153D516E0039010F /* MethodInfoTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MethodInfoTests.mm; sourceTree = "<group>"; };
734425121517631F00B6EC33 /* ParserTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ParserTests.mm; sourceTree = "<group>"; };
734425141517645A00B6EC33 /* AppledocTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppledocTask.h; sourceTree = "<group>"; };
Expand Down Expand Up @@ -293,10 +293,10 @@
73817C7516417CB1009B0A85 /* CommentNamedSectionInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommentNamedSectionInfo.m; sourceTree = "<group>"; };
7381A66C1536C05F00BF9BDD /* InterfaceInfoBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InterfaceInfoBase.h; sourceTree = "<group>"; };
7381A66D1536C05F00BF9BDD /* InterfaceInfoBase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = InterfaceInfoBase.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
7381A6711536C35000BF9BDD /* ClassInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClassInfo.h; sourceTree = "<group>"; };
7381A6711536C35000BF9BDD /* ClassInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = ClassInfo.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
7381A6721536C35000BF9BDD /* ClassInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = ClassInfo.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
7381A67B1536D04E00BF9BDD /* StoreTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = StoreTests.mm; sourceTree = "<group>"; };
7381A67E1536D62400BF9BDD /* CategoryInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CategoryInfo.h; sourceTree = "<group>"; };
7381A67B1536D04E00BF9BDD /* StoreTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 0; path = StoreTests.mm; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
7381A67E1536D62400BF9BDD /* CategoryInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CategoryInfo.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
7381A67F1536D62400BF9BDD /* CategoryInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CategoryInfo.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
7381A6861536E2F000BF9BDD /* ProtocolInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProtocolInfo.h; sourceTree = "<group>"; };
7381A6871536E2F000BF9BDD /* ProtocolInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProtocolInfo.m; sourceTree = "<group>"; };
Expand Down Expand Up @@ -380,7 +380,7 @@
73ED9445150E9FEC0032FD07 /* Logging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Logging.m; sourceTree = "<group>"; };
73ED944C150F3CF40032FD07 /* Objects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Objects.h; sourceTree = "<group>"; };
73F59072154148C10078DA60 /* MethodStateMultipleDefinitions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MethodStateMultipleDefinitions.h; sourceTree = "<group>"; };
73F5C87015480DFF005BE2D6 /* CategoryInfoTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CategoryInfoTests.mm; sourceTree = "<group>"; };
73F5C87015480DFF005BE2D6 /* CategoryInfoTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 0; path = CategoryInfoTests.mm; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
73F600EE1539E8BB00C4F668 /* ObjectInfoBaseTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ObjectInfoBaseTests.mm; sourceTree = "<group>"; };
73F989AB1518A9BC0068697C /* ObjectiveCInterfaceState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjectiveCInterfaceState.h; sourceTree = "<group>"; };
73F989AC1518A9BC0068697C /* ObjectiveCInterfaceState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjectiveCInterfaceState.m; sourceTree = "<group>"; };
Expand Down
5 changes: 4 additions & 1 deletion appledoc/Store/CategoryInfo.h
Expand Up @@ -6,13 +6,16 @@
// Copyright (c) 2012 Tomaz Kragelj. All rights reserved.
//

@class ObjectLinkInfo;

#import "InterfaceInfoBase.h"

/** Holds information about class categories and extensions.
*/
@interface CategoryInfo : InterfaceInfoBase

@property (nonatomic, copy) NSString *nameOfClass;
@property (nonatomic, strong) ObjectLinkInfo *categoryClass;
@property (nonatomic, readonly) NSString *nameOfClass;
@property (nonatomic, copy) NSString *nameOfCategory;

@property (nonatomic, readonly) BOOL isCategory;
Expand Down
15 changes: 15 additions & 0 deletions appledoc/Store/CategoryInfo.m
Expand Up @@ -7,10 +7,25 @@
//

#import "Objects.h"
#import "ObjectLinkInfo.h"
#import "CategoryInfo.h"

@implementation CategoryInfo

- (NSString *)nameOfClass {
if (!_categoryClass) return nil;
return self.categoryClass.nameOfObject;
}

- (ObjectLinkInfo *)categoryClass {
if (_categoryClass) return _categoryClass;
LogDebug(@"Initializing %@ class link due to first access...");
_categoryClass = [[ObjectLinkInfo alloc] init];
return _categoryClass;
}

#pragma mark - Category identification

- (NSString *)uniqueObjectID {
return [NSString stringWithFormat:@"%@(%@)", self.nameOfClass, self.isCategory ? self.nameOfCategory : @""];
}
Expand Down
4 changes: 2 additions & 2 deletions appledoc/Store/Store.m
Expand Up @@ -212,7 +212,7 @@ - (void)beginExtensionForClassWithName:(NSString *)name {
LogVerbose(@"Starting class extenstion for class %@...", name);
CategoryInfo *info = [[CategoryInfo alloc] initWithRegistrar:self];
info.sourceToken = self.currentSourceInfo;
info.nameOfClass = name;
info.categoryClass.nameOfObject = name;
info.nameOfCategory = nil;
[self.storeExtensions addObject:info];
[self pushRegistrationObject:info];
Expand All @@ -222,7 +222,7 @@ - (void)beginCategoryWithName:(NSString *)category forClassWithName:(NSString *)
LogVerbose(@"Starting category %@ for class %@...", category, name);
CategoryInfo *info = [[CategoryInfo alloc] initWithRegistrar:self];
info.sourceToken = self.currentSourceInfo;
info.nameOfClass = name;
info.categoryClass.nameOfObject = name;
info.nameOfCategory = category;
[self.storeCategories addObject:info];
[self pushRegistrationObject:info];
Expand Down

0 comments on commit 07dd791

Please sign in to comment.