blob: f756fa3af88ba11453b7a6d909e32eafdbdaa09e [file] [log] [blame]
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_COMMON_MAC_OBJC_METHOD_SWIZZLE_H_
#define CHROME_COMMON_MAC_OBJC_METHOD_SWIZZLE_H_
#import <objc/runtime.h>
// You should think twice every single time you use anything from this
// namespace.
namespace ObjcEvilDoers {
// This is similar to class_getInstanceMethod(), except that it
// returns NULL if |aClass| does not directly implement |aSelector|.
Method GetImplementedInstanceMethod(Class aClass, SEL aSelector);
// Exchanges the implementation of |originalSelector| and
// |alternateSelector| within |aClass|. Both selectors must be
// implemented directly by |aClass|, not inherited. The IMP returned
// is for |originalSelector| (for purposes of forwarding).
IMP SwizzleImplementedInstanceMethods(
Class aClass, const SEL originalSelector, const SEL alternateSelector);
} // namespace ObjcEvilDoers
#endif // CHROME_COMMON_MAC_OBJC_METHOD_SWIZZLE_H_