/*
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
#import <Foundation/Foundation.h>

@protocol A<NSObject>
@end

@protocol B<A>
@end

@protocol C<B>
@end

@protocol D<NSObject>
@end

@interface Foo : NSObject
+ (instancetype)newWithA:(id<A>)A; // A is a known "bad" protocol, so fire here
+ (instancetype)newWithB:(id<B>)B; // B inherits from A, so this line also fires
+ (instancetype)newWithC:(id<C>)C; // C eventually inherits from A; also fires
+ (instancetype)newWithCs:(NSArray<id<C>>*)Cs; // Collections should also fire
+ (void)newWithD:(id<D>)D; // D doesn't inherit from A; don't fire
@end