Skip to content

Commit

Permalink
Re-fixed appsquickly#516. (perform-after-all-injection can't have aru…
Browse files Browse the repository at this point in the history
…gments. Otherwise it lead recourse and stack overflow)
  • Loading branch information
alexgarbarev committed Jul 8, 2016
1 parent 136fec0 commit 30e7cd5
Show file tree
Hide file tree
Showing 8 changed files with 160 additions and 146 deletions.
274 changes: 137 additions & 137 deletions .idea/Typhoon.iml

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
*/
@property (nonatomic, readonly) TyphoonMethod *afterInjections;

@property (nonatomic, readonly) SEL afterAllInjections;

- (instancetype)initWithClass:(Class)clazz key:(NSString *)key;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,7 @@

- (void)doInjectionEventsOn:(id)instance withArgs:(TyphoonRuntimeArguments *)args factory:(TyphoonComponentFactory *)factory;


- (void)doAfterInjectionsOn:(id)instance withArgs:(TyphoonRuntimeArguments *)args
factory:(TyphoonComponentFactory *)factory;
- (void)doAfterAllInjectionsOn:(id)instance;

- (id)targetForInitializerWithFactory:(TyphoonComponentFactory *)factory args:(TyphoonRuntimeArguments *)args;

Expand Down
11 changes: 8 additions & 3 deletions Source/Definition/Internal/TyphoonDefinition+InstanceBuilder.m
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,20 @@ - (void)doInjectionEventsOn:(id)instance withArgs:(TyphoonRuntimeArguments *)arg
for (TyphoonMethod *method in self.injectedMethods) {
[self doMethodInjection:method onInstance:instance args:args factory:factory];
}
}

- (void)doAfterInjectionsOn:(id)instance withArgs:(TyphoonRuntimeArguments *)args factory:(TyphoonComponentFactory *)factory
{
if (self.afterInjections) {
[self doMethodInjection:self.afterInjections onInstance:instance args:args factory:factory];
}
}

- (void)doAfterAllInjectionsOn:(id)instance
{
if (self.afterAllInjections && [instance respondsToSelector:self.afterAllInjections]) {
void(*afterInjectionsMethod)(id, SEL) = (void ( *)(id, SEL)) [instance methodForSelector:self.afterAllInjections];
afterInjectionsMethod(instance, self.afterAllInjections);
}
}

- (id)targetForInitializerWithFactory:(TyphoonComponentFactory *)factory args:(TyphoonRuntimeArguments *)args
{
return self.type;
Expand Down
5 changes: 5 additions & 0 deletions Source/Definition/TyphoonDefinition.h
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,11 @@ definition.factory = [self sqliteManager];
- (void)performAfterInjections:(SEL)sel;
- (void)performAfterInjections:(SEL)sel parameters:(void (^)(TyphoonMethod *params))parameterBlock;

/*
* Custom callback that is invoked after all injections on built graph occurs.
*/
- (void)performAfterAllInjections:(SEL)sel;

#pragma mark Making injections from definition

/**
Expand Down
5 changes: 5 additions & 0 deletions Source/Definition/TyphoonDefinition.m
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,11 @@ - (void)performAfterInjections:(SEL)sel parameters:(void (^)(TyphoonMethod *para
#endif
}

- (void)performAfterAllInjections:(SEL)sel
{
_afterAllInjections = sel;
}

//-------------------------------------------------------------------------------------------
#pragma mark: - TyphoonDefinition+Infrastructure methods
//-------------------------------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ - (void)doInjectionEventsOn:(id)instance withDefinition:(TyphoonDefinition *)def
[definition doInjectionEventsOn:instance withArgs:args factory:self];

[_stack notifyOnceWhenStackEmptyUsingBlock:^{
[definition doAfterInjectionsOn:instance withArgs:args factory:self];
[definition doAfterAllInjectionsOn:instance];

[self injectAssemblyOnInstanceIfTyphoonAware:instance];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ - (id)propertyInjectionB
{
return [TyphoonDefinition withClass:[PrototypePropertyInjected class] configuration:^(TyphoonDefinition *definition) {
[definition injectProperty:@selector(propertyA) with:[self propertyInjectionA]];
[definition performAfterInjections:@selector(checkThatPropertyAHasPropertyBandC)];
[definition performAfterAllInjections:@selector(checkThatPropertyAHasPropertyBandC)];
definition.autoInjectionVisibility = TyphoonAutoInjectVisibilityNone;
}];
}
Expand All @@ -187,7 +187,7 @@ - (id)propertyInjectionC
{
return [TyphoonDefinition withClass:[PrototypePropertyInjected class] configuration:^(TyphoonDefinition *definition) {
[definition injectProperty:@selector(propertyA) with:[self propertyInjectionA]];
[definition performAfterInjections:@selector(checkThatPropertyAHasPropertyBandC)];
[definition performAfterAllInjections:@selector(checkThatPropertyAHasPropertyBandC)];
definition.autoInjectionVisibility = TyphoonAutoInjectVisibilityNone;
}];
}
Expand Down

0 comments on commit 30e7cd5

Please sign in to comment.