/* APPLE LOCAL file mainline */
/* Test if prior method lookup at method @implementation time is not
   overly aggressive, leading to methods being found in other classes.  */
/* Author: Ziemowit Laski <zlaski@apple.com>.  */
/* { dg-do compile } */

/* APPLE LOCAL radar 4894756 */
#include "../objc/execute/Object2.h"

@class NSString;

@protocol NSMenuItem
+ (void)setUsesUserKeyEquivalents:(BOOL)flag;
+ (BOOL)usesUserKeyEquivalents;
@end

@interface NSMenuItem : Object <NSMenuItem> {
    @private
    id _menu;
}
@end

@interface NSResponder : Object <NSMenuItem>
{
    id _nextResponder;
}
@end

@interface Object(NSMenuValidation)
- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem;
@end

@interface NSResponder (NSStandardKeyBindingMethods)
- (void)insertText:(id)insertString;
- (void)doCommandBySelector:(SEL)aSelector;
@end

@interface NSView : NSResponder
{
    id _superview;
    id _subviews;
}
@end

@interface SKTGraphicView : NSView {
    @private
    float _gridSpacing;
}
@end

@implementation SKTGraphicView
- (BOOL)validateMenuItem:(NSMenuItem *)item {
  return (BOOL)1;
}
- (void)insertText:(NSString *)str {
}
@end
