forked from OSchip/llvm-project
[analyzer] Don't issue alarm in ObjCSuperCallChecker for the super class itself.
The ObjCSuperCallChecker issues alarms for various Objective-C APIs that require a subclass to call to its superclass's version of a method when overriding it. So, for example, it raises an alarm when the -viewDidLoad method in a subclass of UIViewController does not call [super viewDidLoad]. This patch fixes a false alarm where the analyzer erroneously required the implementation of the superclass itself (e.g., UIViewController) to call super. rdar://problem/18416944 Differential Revision: http://reviews.llvm.org/D11842 llvm-svn: 244386
This commit is contained in:
parent
68ba18f575
commit
de2cc01cd4
|
@ -88,7 +88,7 @@ private:
|
|||
/// \param[out] SuperclassName On return, the found superclass name.
|
||||
bool ObjCSuperCallChecker::isCheckableClass(const ObjCImplementationDecl *D,
|
||||
StringRef &SuperclassName) const {
|
||||
const ObjCInterfaceDecl *ID = D->getClassInterface();
|
||||
const ObjCInterfaceDecl *ID = D->getClassInterface()->getSuperClass();
|
||||
for ( ; ID ; ID = ID->getSuperClass())
|
||||
{
|
||||
SuperclassName = ID->getIdentifier()->getName();
|
||||
|
|
|
@ -30,7 +30,7 @@ typedef enum UIViewAnimationOptions {
|
|||
- (void)didReceiveMemoryWarning;
|
||||
- (void)removeFromParentViewController;
|
||||
- (void)transitionFromViewController:(UIViewController *)fromViewController
|
||||
toViewController:(UIViewController *)toViewController
|
||||
toViewController:(UIViewController *)toViewController
|
||||
duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options
|
||||
animations:(void (^)(void))animations
|
||||
completion:(void (^)(BOOL finished))completion;
|
||||
|
@ -69,6 +69,25 @@ typedef enum UIViewAnimationOptions {
|
|||
- (void)encodeRestorableStateWithCoder:(NSCoder *)coder {}
|
||||
@end
|
||||
|
||||
// Do not warn for the implementation in the superclass itself.
|
||||
@implementation UIViewController
|
||||
- (void)addChildViewController:(UIViewController *)childController {}
|
||||
- (void)viewDidAppear:(BOOL)animated {}
|
||||
- (void)viewDidDisappear:(BOOL)animated {}
|
||||
- (void)viewDidUnload {}
|
||||
- (void)viewDidLoad {}
|
||||
- (void)viewWillUnload {}
|
||||
- (void)viewWillAppear:(BOOL)animated {}
|
||||
- (void)viewWillDisappear:(BOOL)animated {}
|
||||
- (void)didReceiveMemoryWarning {}
|
||||
- (void)removeFromParentViewController {}
|
||||
- (void)transitionFromViewController:(UIViewController *)fromViewController
|
||||
toViewController:(UIViewController *)toViewController
|
||||
duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options
|
||||
animations:(void (^)(void))animations
|
||||
completion:(void (^)(BOOL finished))completion {}
|
||||
@end
|
||||
|
||||
// Warn if UIViewController is our superclass and we do not call super
|
||||
@interface TestB : UIViewController {}
|
||||
@end
|
||||
|
|
Loading…
Reference in New Issue