// RUN: %clang_cc1 -analyzer-checker=core -verify %s -Wno-incomplete-implementation typedef signed char BOOL; typedef int NSInteger; typedef unsigned int NSUInteger; typedef struct _NSZone NSZone; @class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; @protocol NSObject - (BOOL)isEqual:(id)object; @end @protocol NSCopying - (id)copyWithZone:(NSZone *)zone; @end @protocol NSMutableCopying - (id)mutableCopyWithZone:(NSZone *)zone; @end @protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder; @end @interface NSObject <NSObject> { } @end extern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone); @interface NSValue : NSObject <NSCopying, NSCoding> - (void)getValue:(void *)value; @end @class NSString, NSData, NSMutableData, NSMutableDictionary, NSMutableArray; typedef struct { } NSFastEnumerationState; @protocol NSFastEnumeration - (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len; @end @class NSString; typedef struct _NSRange { } NSRange; @interface NSValue (NSValueRangeExtensions) + (NSValue *)valueWithRange:(NSRange)range; - (id)objectAtIndex:(NSUInteger)index; @end typedef unsigned short unichar; @interface NSString : NSObject <NSCopying, NSMutableCopying, NSCoding> - (NSUInteger)length; @end @class NSArray, NSDictionary, NSString, NSError; @interface NSSet : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration> - (NSUInteger)count; @end extern NSString *NSAccessibilityRoleDescription(NSString *role, NSString *subrole) ; @interface NSResponder : NSObject <NSCoding> { } @end @protocol NSAnimatablePropertyContainer - (id)animator; @end extern NSString *NSAnimationTriggerOrderIn ; @interface NSView : NSResponder <NSAnimatablePropertyContainer> { } @end @class NSAttributedString, NSEvent, NSFont, NSFormatter, NSImage, NSMenu, NSText, NSView; @interface NSWindowController : NSResponder <NSCoding> { } @end @class NSArray, NSFont, NSTabViewItem; @interface NSTabView : NSView { } - (NSArray *)tabViewItems; - (NSString *)label; @end typedef enum { PBXNoItemChanged = 0x00, PBXProjectItemChanged = 0x01, PBXReferenceChanged = 0x02, PBXGroupChanged = 0x04, PBXTargetChanged = 0x08, PBXBuildPhaseChanged = 0x10, PBXBuildFileChanged = 0x20, PBXBreakpointChanged = 0x40, } PBXArchiveMask; @interface PBXModule : NSWindowController { } @end typedef enum { PBXFindMatchContains, PBXFindMatchStartsWith, PBXFindMatchWholeWords, PBXFindMatchEndsWith } PBXFindMatchStyle; @protocol PBXSelectableText - (NSString *)selectedString; @end @protocol PBXFindableText <PBXSelectableText> - (BOOL)findText:(NSString *)string ignoreCase:(BOOL)ignoreCase matchStyle:(PBXFindMatchStyle)matchStyle backwards:(BOOL)backwards wrap:(BOOL)wrap; @end @class PBXProjectDocument, PBXProject, PBXAttributedStatusView; @interface PBXProjectModule : PBXModule <PBXFindableText> { } @end @class PBXBookmark; @protocol PBXSelectionTarget - (NSObject <PBXSelectionTarget> *) performAction:(id)action withSelection:(NSArray *)selection; // expected-note {{method 'performAction:withSelection:' declared here}} @end @class XCPropertyDictionary, XCPropertyCondition, XCPropertyConditionSet, XCMutablePropertyConditionSet; extern NSMutableArray *XCFindPossibleKeyModules(PBXModule *module, BOOL useExposedModulesOnly); @interface NSString (StringUtilities) - (NSString *) trimToLength:(NSInteger)length preserveRange:(NSRange)range; - (id) objectOfType:(Class)type matchingFunction:(BOOL (void *, void *))comparator usingData:(void *)data; @end @class XCControlView; @protocol XCDockViewHeader - (NSImage *) headerImage; @end @class XCDockableTabModule; @interface XCExtendedTabView : NSTabView <XCDockViewHeader> { } @end @class PBXProjectDocument, PBXFileReference, PBXModule, XCWindowTool; @interface XCPerspectiveModule : PBXProjectModule <PBXSelectionTarget> { XCExtendedTabView *_perspectivesTabView; } - (PBXModule *) moduleForTab:(NSTabViewItem *)item; @end @implementation XCPerspectiveModule // expected-warning {{method 'performAction:withSelection:' in protocol 'PBXSelectionTarget' not implemented}}} + (void) openForProjectDocument:(PBXProjectDocument *)projectDocument { } - (PBXModule *) type:(Class)type inPerspective:(id)perspectiveIdentifer matchingFunction:(BOOL (void *, void *))comparator usingData:(void *)data { NSArray *allItems = [_perspectivesTabView tabViewItems]; NSInteger i, c = [allItems count]; for (i = 0; i < c; i++) { NSTabViewItem *item = [allItems objectAtIndex:i]; if ([[item label] isEqual:perspectiveIdentifer]) { PBXProjectModule *pModule = (PBXProjectModule *)[self moduleForTab:item]; PBXModule *obj = [XCFindPossibleKeyModules(pModule, (BOOL)0) objectOfType:type matchingFunction:comparator usingData:data]; } } return 0; } - (BOOL)buffer:(char *)buf containsAnyPrompts:(char *[])prompts { prompts++; return (BOOL)0; } @end