mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-26 23:05:00 +08:00
Increased warning levels to -Wall -Wextra, and fixed Xcode 7 beta issues
Summary: @public I've increased the warning levels in the OSS frameworks, which caught a bunch of minor issues. I also fixed some new errors in Xcode 7 relating to designated initializers and TLS security. Test Plan: * Test the sample apps and make sure they still work. * Run tests.
This commit is contained in:
@@ -101,7 +101,7 @@ RCT_EXPORT_METHOD(alertWithArgs:(NSDictionary *)args
|
||||
}
|
||||
|
||||
[_alerts addObject:alertView];
|
||||
[_alertCallbacks addObject:callback ?: ^(id unused) {}];
|
||||
[_alertCallbacks addObject:callback ?: ^(__unused id unused) {}];
|
||||
[_alertButtonKeys addObject:buttonKeys];
|
||||
|
||||
[alertView show];
|
||||
|
||||
@@ -139,7 +139,7 @@ RCT_IMPORT_METHOD(RCTJSTimers, callTimers)
|
||||
_paused = NO;
|
||||
}
|
||||
|
||||
- (void)didUpdateFrame:(RCTFrameUpdate *)update
|
||||
- (void)didUpdateFrame:(__unused RCTFrameUpdate *)update
|
||||
{
|
||||
NSMutableArray *timersToCall = [[NSMutableArray alloc] init];
|
||||
for (RCTTimer *timer in _timers.allObjects) {
|
||||
|
||||
@@ -225,7 +225,7 @@ static NSString *RCTViewNameForModuleName(NSString *moduleName)
|
||||
}
|
||||
|
||||
// TODO: only send name once instead of a dictionary of name and type keyed by name
|
||||
static NSDictionary *RCTViewConfigForModule(Class managerClass, NSString *viewName)
|
||||
static NSDictionary *RCTViewConfigForModule(Class managerClass)
|
||||
{
|
||||
unsigned int count = 0;
|
||||
Method *methods = class_copyMethodList(object_getClass(managerClass), &count);
|
||||
@@ -308,11 +308,12 @@ static NSDictionary *RCTViewConfigForModule(Class managerClass, NSString *viewNa
|
||||
// Get view managers from bridge
|
||||
NSMutableDictionary *viewManagers = [[NSMutableDictionary alloc] init];
|
||||
NSMutableDictionary *viewConfigs = [[NSMutableDictionary alloc] init];
|
||||
[_bridge.modules enumerateKeysAndObjectsUsingBlock:^(NSString *moduleName, RCTViewManager *manager, BOOL *stop) {
|
||||
[_bridge.modules enumerateKeysAndObjectsUsingBlock:
|
||||
^(NSString *moduleName, RCTViewManager *manager, __unused BOOL *stop) {
|
||||
if ([manager isKindOfClass:[RCTViewManager class]]) {
|
||||
NSString *viewName = RCTViewNameForModuleName(moduleName);
|
||||
viewManagers[viewName] = manager;
|
||||
viewConfigs[viewName] = RCTViewConfigForModule([manager class], viewName);
|
||||
viewConfigs[viewName] = RCTViewConfigForModule([manager class]);
|
||||
}
|
||||
}];
|
||||
|
||||
@@ -325,7 +326,7 @@ static NSDictionary *RCTViewConfigForModule(Class managerClass, NSString *viewNa
|
||||
return _shadowQueue;
|
||||
}
|
||||
|
||||
- (void)registerRootView:(UIView *)rootView;
|
||||
- (void)registerRootView:(UIView *)rootView
|
||||
{
|
||||
RCTAssertMainThread();
|
||||
|
||||
@@ -501,9 +502,9 @@ static NSDictionary *RCTViewConfigForModule(Class managerClass, NSString *viewNa
|
||||
}
|
||||
|
||||
// Perform layout (possibly animated)
|
||||
return ^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||
return ^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||
RCTResponseSenderBlock callback = self->_layoutAnimation.callback;
|
||||
__block NSInteger completionsCalled = 0;
|
||||
__block NSUInteger completionsCalled = 0;
|
||||
for (NSUInteger ii = 0; ii < frames.count; ii++) {
|
||||
NSNumber *reactTag = frameReactTags[ii];
|
||||
UIView *view = viewRegistry[reactTag];
|
||||
@@ -515,7 +516,7 @@ static NSDictionary *RCTViewConfigForModule(Class managerClass, NSString *viewNa
|
||||
BOOL shouldAnimateCreation = isNew && ![parentsAreNew[ii] boolValue];
|
||||
RCTAnimation *createAnimation = shouldAnimateCreation ? _layoutAnimation.createAnimation : nil;
|
||||
|
||||
void (^completion)(BOOL finished) = ^(BOOL finished) {
|
||||
void (^completion)(BOOL) = ^(BOOL finished) {
|
||||
completionsCalled++;
|
||||
if (event != (id)kCFNull) {
|
||||
[self.bridge.eventDispatcher sendInputEventWithName:@"topLayout" body:event];
|
||||
@@ -578,7 +579,7 @@ static NSDictionary *RCTViewConfigForModule(Class managerClass, NSString *viewNa
|
||||
NSMutableSet *applierBlocks = [NSMutableSet setWithCapacity:1];
|
||||
[topView collectUpdatedProperties:applierBlocks parentProperties:@{}];
|
||||
|
||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||
for (RCTApplierBlock block in applierBlocks) {
|
||||
block(viewRegistry);
|
||||
}
|
||||
@@ -594,9 +595,9 @@ RCT_EXPORT_METHOD(removeSubviewsFromContainerWithID:(NSNumber *)containerID)
|
||||
id<RCTViewNodeProtocol> container = _shadowViewRegistry[containerID];
|
||||
RCTAssert(container != nil, @"container view (for ID %@) not found", containerID);
|
||||
|
||||
NSUInteger subviewsCount = [[container reactSubviews] count];
|
||||
NSUInteger subviewsCount = [container reactSubviews].count;
|
||||
NSMutableArray *indices = [[NSMutableArray alloc] initWithCapacity:subviewsCount];
|
||||
for (NSInteger childIndex = 0; childIndex < subviewsCount; childIndex++) {
|
||||
for (NSUInteger childIndex = 0; childIndex < subviewsCount; childIndex++) {
|
||||
[indices addObject:@(childIndex)];
|
||||
}
|
||||
|
||||
@@ -619,20 +620,21 @@ RCT_EXPORT_METHOD(removeSubviewsFromContainerWithID:(NSNumber *)containerID)
|
||||
{
|
||||
// If there are no indices to move or the container has no subviews don't bother
|
||||
// We support parents with nil subviews so long as they're all nil so this allows for this behavior
|
||||
if ([atIndices count] == 0 || [[container reactSubviews] count] == 0) {
|
||||
if (atIndices.count == 0 || [container reactSubviews].count == 0) {
|
||||
return nil;
|
||||
}
|
||||
// Construction of removed children must be done "up front", before indices are disturbed by removals.
|
||||
NSMutableArray *removedChildren = [NSMutableArray arrayWithCapacity:atIndices.count];
|
||||
RCTAssert(container != nil, @"container view (for ID %@) not found", container);
|
||||
for (NSInteger i = 0; i < [atIndices count]; i++) {
|
||||
NSInteger index = [atIndices[i] integerValue];
|
||||
if (index < [[container reactSubviews] count]) {
|
||||
for (NSNumber *indexNumber in atIndices) {
|
||||
NSUInteger index = indexNumber.unsignedIntegerValue;
|
||||
if (index < [container reactSubviews].count) {
|
||||
[removedChildren addObject:[container reactSubviews][index]];
|
||||
}
|
||||
}
|
||||
if (removedChildren.count != atIndices.count) {
|
||||
RCTLogMustFix(@"removedChildren count (%tu) was not what we expected (%tu)", removedChildren.count, atIndices.count);
|
||||
RCTLogMustFix(@"removedChildren count (%tu) was not what we expected (%tu)",
|
||||
removedChildren.count, atIndices.count);
|
||||
}
|
||||
return removedChildren;
|
||||
}
|
||||
@@ -778,7 +780,7 @@ static BOOL RCTCallPropertySetter(NSString *key, SEL setter, id value, id view,
|
||||
static void RCTSetViewProps(NSDictionary *props, UIView *view,
|
||||
UIView *defaultView, RCTViewManager *manager)
|
||||
{
|
||||
[props enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) {
|
||||
[props enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, __unused BOOL *stop) {
|
||||
|
||||
SEL setter = NSSelectorFromString([NSString stringWithFormat:@"set_%@:forView:withDefaultView:", key]);
|
||||
RCTCallPropertySetter(key, setter, obj, view, defaultView, manager);
|
||||
@@ -789,7 +791,7 @@ static void RCTSetViewProps(NSDictionary *props, UIView *view,
|
||||
static void RCTSetShadowViewProps(NSDictionary *props, RCTShadowView *shadowView,
|
||||
RCTShadowView *defaultView, RCTViewManager *manager)
|
||||
{
|
||||
[props enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) {
|
||||
[props enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, __unused BOOL *stop) {
|
||||
|
||||
SEL setter = NSSelectorFromString([NSString stringWithFormat:@"set_%@:forShadowView:withDefaultView:", key]);
|
||||
RCTCallPropertySetter(key, setter, obj, shadowView, defaultView, manager);
|
||||
@@ -877,7 +879,7 @@ RCT_EXPORT_METHOD(updateView:(NSNumber *)reactTag
|
||||
RCTSetShadowViewProps(props, shadowView, _defaultShadowViews[viewName], viewManager);
|
||||
|
||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||
UIView *view = uiManager->_viewRegistry[reactTag];
|
||||
UIView *view = viewRegistry[reactTag];
|
||||
RCTSetViewProps(props, view, uiManager->_defaultViews[viewName], viewManager);
|
||||
}];
|
||||
}
|
||||
@@ -885,7 +887,7 @@ RCT_EXPORT_METHOD(updateView:(NSNumber *)reactTag
|
||||
RCT_EXPORT_METHOD(focus:(NSNumber *)reactTag)
|
||||
{
|
||||
if (!reactTag) return;
|
||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||
UIView *newResponder = viewRegistry[reactTag];
|
||||
[newResponder reactWillMakeFirstResponder];
|
||||
[newResponder becomeFirstResponder];
|
||||
@@ -896,7 +898,7 @@ RCT_EXPORT_METHOD(focus:(NSNumber *)reactTag)
|
||||
RCT_EXPORT_METHOD(blur:(NSNumber *)reactTag)
|
||||
{
|
||||
if (!reactTag) return;
|
||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
||||
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
||||
UIView *currentResponder = viewRegistry[reactTag];
|
||||
[currentResponder resignFirstResponder];
|
||||
}];
|
||||
@@ -908,7 +910,7 @@ RCT_EXPORT_METHOD(findSubviewIn:(NSNumber *)reactTag atPoint:(CGPoint)point call
|
||||
return;
|
||||
}
|
||||
|
||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||
UIView *view = viewRegistry[reactTag];
|
||||
UIView *target = [view hitTest:point withEvent:nil];
|
||||
CGRect frame = [target convertRect:target.bounds toView:view];
|
||||
@@ -940,7 +942,7 @@ RCT_EXPORT_METHOD(findSubviewIn:(NSNumber *)reactTag atPoint:(CGPoint)point call
|
||||
// Set up next layout animation
|
||||
if (_nextLayoutAnimation) {
|
||||
RCTLayoutAnimation *layoutAnimation = _nextLayoutAnimation;
|
||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||
[self addUIBlock:^(RCTUIManager *uiManager, __unused RCTSparseArray *viewRegistry) {
|
||||
uiManager->_layoutAnimation = layoutAnimation;
|
||||
}];
|
||||
}
|
||||
@@ -954,7 +956,7 @@ RCT_EXPORT_METHOD(findSubviewIn:(NSNumber *)reactTag atPoint:(CGPoint)point call
|
||||
|
||||
// Clear layout animations
|
||||
if (_nextLayoutAnimation) {
|
||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||
[self addUIBlock:^(RCTUIManager *uiManager, __unused RCTSparseArray *viewRegistry) {
|
||||
uiManager->_layoutAnimation = nil;
|
||||
}];
|
||||
_nextLayoutAnimation = nil;
|
||||
@@ -996,7 +998,7 @@ RCT_EXPORT_METHOD(measure:(NSNumber *)reactTag
|
||||
return;
|
||||
}
|
||||
|
||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||
UIView *view = viewRegistry[reactTag];
|
||||
if (!view) {
|
||||
RCTLogError(@"measure cannot find view with tag #%@", reactTag);
|
||||
@@ -1063,7 +1065,7 @@ static void RCTMeasureLayout(RCTShadowView *view,
|
||||
*/
|
||||
RCT_EXPORT_METHOD(measureLayout:(NSNumber *)reactTag
|
||||
relativeTo:(NSNumber *)ancestorReactTag
|
||||
errorCallback:(RCTResponseSenderBlock)errorCallback
|
||||
errorCallback:(__unused RCTResponseSenderBlock)errorCallback
|
||||
callback:(RCTResponseSenderBlock)callback)
|
||||
{
|
||||
RCTShadowView *shadowView = _shadowViewRegistry[reactTag];
|
||||
@@ -1079,7 +1081,7 @@ RCT_EXPORT_METHOD(measureLayout:(NSNumber *)reactTag
|
||||
* height).
|
||||
*/
|
||||
RCT_EXPORT_METHOD(measureLayoutRelativeToParent:(NSNumber *)reactTag
|
||||
errorCallback:(RCTResponseSenderBlock)errorCallback
|
||||
errorCallback:(__unused RCTResponseSenderBlock)errorCallback
|
||||
callback:(RCTResponseSenderBlock)callback)
|
||||
{
|
||||
RCTShadowView *shadowView = _shadowViewRegistry[reactTag];
|
||||
@@ -1095,7 +1097,7 @@ RCT_EXPORT_METHOD(measureLayoutRelativeToParent:(NSNumber *)reactTag
|
||||
*/
|
||||
RCT_EXPORT_METHOD(measureViewsInRect:(CGRect)rect
|
||||
parentView:(NSNumber *)reactTag
|
||||
errorCallback:(RCTResponseSenderBlock)errorCallback
|
||||
errorCallback:(__unused RCTResponseSenderBlock)errorCallback
|
||||
callback:(RCTResponseSenderBlock)callback)
|
||||
{
|
||||
RCTShadowView *shadowView = _shadowViewRegistry[reactTag];
|
||||
@@ -1107,7 +1109,8 @@ RCT_EXPORT_METHOD(measureViewsInRect:(CGRect)rect
|
||||
NSMutableArray *results = [[NSMutableArray alloc] initWithCapacity:[childShadowViews count]];
|
||||
|
||||
|
||||
[childShadowViews enumerateObjectsUsingBlock:^(RCTShadowView *childShadowView, NSUInteger idx, BOOL *stop) {
|
||||
[childShadowViews enumerateObjectsUsingBlock:
|
||||
^(RCTShadowView *childShadowView, NSUInteger idx, __unused BOOL *stop) {
|
||||
CGRect childLayout = [childShadowView measureLayoutRelativeToAncestor:shadowView];
|
||||
if (CGRectIsNull(childLayout)) {
|
||||
RCTLogError(@"View %@ (tag #%@) is not a decendant of %@ (tag #%@)",
|
||||
@@ -1167,7 +1170,7 @@ RCT_EXPORT_METHOD(scrollTo:(NSNumber *)reactTag
|
||||
withOffsetX:(CGFloat)offsetX
|
||||
offsetY:(CGFloat)offsetY)
|
||||
{
|
||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
||||
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
||||
UIView *view = viewRegistry[reactTag];
|
||||
if ([view conformsToProtocol:@protocol(RCTScrollableProtocol)]) {
|
||||
[(id<RCTScrollableProtocol>)view scrollToOffset:(CGPoint){offsetX, offsetY} animated:YES];
|
||||
@@ -1182,7 +1185,7 @@ RCT_EXPORT_METHOD(scrollWithoutAnimationTo:(NSNumber *)reactTag
|
||||
offsetX:(CGFloat)offsetX
|
||||
offsetY:(CGFloat)offsetY)
|
||||
{
|
||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
||||
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
||||
UIView *view = viewRegistry[reactTag];
|
||||
if ([view conformsToProtocol:@protocol(RCTScrollableProtocol)]) {
|
||||
[(id<RCTScrollableProtocol>)view scrollToOffset:(CGPoint){offsetX, offsetY} animated:NO];
|
||||
@@ -1195,7 +1198,7 @@ RCT_EXPORT_METHOD(scrollWithoutAnimationTo:(NSNumber *)reactTag
|
||||
RCT_EXPORT_METHOD(zoomToRect:(NSNumber *)reactTag
|
||||
withRect:(CGRect)rect)
|
||||
{
|
||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
||||
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry){
|
||||
UIView *view = viewRegistry[reactTag];
|
||||
if ([view conformsToProtocol:@protocol(RCTScrollableProtocol)]) {
|
||||
[(id<RCTScrollableProtocol>)view zoomToRect:rect animated:YES];
|
||||
@@ -1211,7 +1214,7 @@ RCT_EXPORT_METHOD(zoomToRect:(NSNumber *)reactTag
|
||||
*/
|
||||
RCT_EXPORT_METHOD(setJSResponder:(NSNumber *)reactTag)
|
||||
{
|
||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||
[self addUIBlock:^(__unused RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||
_jsResponder = viewRegistry[reactTag];
|
||||
if (!_jsResponder) {
|
||||
RCTLogError(@"Invalid view set to be the JS responder - tag %zd", reactTag);
|
||||
@@ -1221,7 +1224,7 @@ RCT_EXPORT_METHOD(setJSResponder:(NSNumber *)reactTag)
|
||||
|
||||
RCT_EXPORT_METHOD(clearJSResponder)
|
||||
{
|
||||
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
|
||||
[self addUIBlock:^(__unused RCTUIManager *uiManager, __unused RCTSparseArray *viewRegistry) {
|
||||
_jsResponder = nil;
|
||||
}];
|
||||
}
|
||||
@@ -1326,7 +1329,7 @@ RCT_EXPORT_METHOD(clearJSResponder)
|
||||
},
|
||||
} mutableCopy];
|
||||
|
||||
[_viewManagers enumerateKeysAndObjectsUsingBlock:^(NSString *name, RCTViewManager *manager, BOOL *stop) {
|
||||
for (RCTViewManager *manager in _viewManagers) {
|
||||
if (RCTClassOverridesInstanceMethod([manager class], @selector(customBubblingEventTypes))) {
|
||||
NSDictionary *eventTypes = [manager customBubblingEventTypes];
|
||||
for (NSString *eventName in eventTypes) {
|
||||
@@ -1335,7 +1338,7 @@ RCT_EXPORT_METHOD(clearJSResponder)
|
||||
}
|
||||
[customBubblingEventTypesConfigs addEntriesFromDictionary:eventTypes];
|
||||
}
|
||||
}];
|
||||
};
|
||||
|
||||
return customBubblingEventTypesConfigs;
|
||||
}
|
||||
@@ -1387,7 +1390,7 @@ RCT_EXPORT_METHOD(clearJSResponder)
|
||||
},
|
||||
} mutableCopy];
|
||||
|
||||
[_viewManagers enumerateKeysAndObjectsUsingBlock:^(NSString *name, RCTViewManager *manager, BOOL *stop) {
|
||||
for (RCTViewManager *manager in _viewManagers) {
|
||||
if (RCTClassOverridesInstanceMethod([manager class], @selector(customDirectEventTypes))) {
|
||||
NSDictionary *eventTypes = [manager customDirectEventTypes];
|
||||
for (NSString *eventName in eventTypes) {
|
||||
@@ -1395,7 +1398,7 @@ RCT_EXPORT_METHOD(clearJSResponder)
|
||||
}
|
||||
[customDirectEventTypes addEntriesFromDictionary:eventTypes];
|
||||
}
|
||||
}];
|
||||
};
|
||||
|
||||
return customDirectEventTypes;
|
||||
}
|
||||
@@ -1418,8 +1421,11 @@ RCT_EXPORT_METHOD(clearJSResponder)
|
||||
},
|
||||
} mutableCopy];
|
||||
|
||||
[_viewManagers enumerateKeysAndObjectsUsingBlock:^(NSString *name, RCTViewManager *manager, BOOL *stop) {
|
||||
NSMutableDictionary *constantsNamespace = [NSMutableDictionary dictionaryWithDictionary:allJSConstants[name]];
|
||||
[_viewManagers enumerateKeysAndObjectsUsingBlock:
|
||||
^(NSString *name, RCTViewManager *manager, __unused BOOL *stop) {
|
||||
|
||||
NSMutableDictionary *constantsNamespace =
|
||||
[NSMutableDictionary dictionaryWithDictionary:allJSConstants[name]];
|
||||
|
||||
// Add custom constants
|
||||
// TODO: should these be inherited?
|
||||
@@ -1440,7 +1446,7 @@ RCT_EXPORT_METHOD(clearJSResponder)
|
||||
|
||||
RCT_EXPORT_METHOD(configureNextLayoutAnimation:(NSDictionary *)config
|
||||
withCallback:(RCTResponseSenderBlock)callback
|
||||
errorCallback:(RCTResponseSenderBlock)errorCallback)
|
||||
errorCallback:(__unused RCTResponseSenderBlock)errorCallback)
|
||||
{
|
||||
if (_nextLayoutAnimation) {
|
||||
RCTLogWarn(@"Warning: Overriding previous layout animation with new one before the first began:\n%@ -> %@.", _nextLayoutAnimation, config);
|
||||
|
||||
Reference in New Issue
Block a user