xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/objc/dealloc-in-category.m (revision 89a1d03e2b379e325daa5249411e414bbd995b5e)
1*89a1d03eSRichard// RUN: %check_clang_tidy %s objc-dealloc-in-category %t
2*89a1d03eSRichard
3*89a1d03eSRichard@interface NSObject
4*89a1d03eSRichard// Used to quash warning about missing base class.
5*89a1d03eSRichard- (void)dealloc;
6*89a1d03eSRichard@end
7*89a1d03eSRichard
8*89a1d03eSRichard@interface Foo : NSObject
9*89a1d03eSRichard@end
10*89a1d03eSRichard
11*89a1d03eSRichard@implementation Foo
12*89a1d03eSRichard- (void)dealloc {
13*89a1d03eSRichard  // No warning should be generated here.
14*89a1d03eSRichard}
15*89a1d03eSRichard@end
16*89a1d03eSRichard
17*89a1d03eSRichard@interface Bar : NSObject
18*89a1d03eSRichard@end
19*89a1d03eSRichard
20*89a1d03eSRichard@interface Bar (BarCategory)
21*89a1d03eSRichard@end
22*89a1d03eSRichard
23*89a1d03eSRichard@implementation Bar (BarCategory)
24*89a1d03eSRichard+ (void)dealloc {
25*89a1d03eSRichard  // Should not trigger on class methods.
26*89a1d03eSRichard}
27*89a1d03eSRichard
28*89a1d03eSRichard- (void)dealloc {
29*89a1d03eSRichard  // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: category 'BarCategory' should not implement -dealloc [objc-dealloc-in-category]
30*89a1d03eSRichard}
31*89a1d03eSRichard@end
32*89a1d03eSRichard
33*89a1d03eSRichard@interface Baz : NSObject
34*89a1d03eSRichard@end
35*89a1d03eSRichard
36*89a1d03eSRichard@implementation Baz
37*89a1d03eSRichard- (void)dealloc {
38*89a1d03eSRichard  // Should not trigger on implementation in the class itself, even with
39*89a1d03eSRichard  // it declared in the category (below).
40*89a1d03eSRichard}
41*89a1d03eSRichard@end
42*89a1d03eSRichard
43*89a1d03eSRichard@interface Baz (BazCategory)
44*89a1d03eSRichard// A declaration in a category @interface does not by itself provide an
45*89a1d03eSRichard// overriding implementation, and should not generate a warning.
46*89a1d03eSRichard- (void)dealloc;
47*89a1d03eSRichard@end
48