| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // Copyright 2020 Google LLC
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- #import "FirebasePerformance/Sources/Instrumentation/Network/FPRNetworkInstrumentHelpers.h"
- #import "FirebasePerformance/Sources/Instrumentation/FPRClassInstrumentor.h"
- #import "FirebasePerformance/Sources/Instrumentation/FPRSelectorInstrumentor.h"
- FOUNDATION_EXTERN_INLINE
- void ThrowExceptionBecauseSelectorNotFoundOnClass(SEL selector, Class aClass) {
- [NSException raise:NSInternalInconsistencyException
- format:@"Selector %@ not found on class %@", NSStringFromSelector(selector),
- NSStringFromClass(aClass)];
- }
- FOUNDATION_EXTERN_INLINE
- void ThrowExceptionBecauseSelectorInstrumentorHasBeenDeallocated(SEL selector, Class aClass) {
- [NSException raise:NSInternalInconsistencyException
- format:@"Selector instrumentor has been deallocated: %@|%@",
- NSStringFromSelector(selector), NSStringFromClass(aClass)];
- }
- FOUNDATION_EXTERN_INLINE
- void ThrowExceptionBecauseInstrumentHasBeenDeallocated(SEL selector, Class aClass) {
- [NSException raise:NSInternalInconsistencyException
- format:@"The instrument has been deallocated: %@|%@", NSStringFromSelector(selector),
- NSStringFromClass(aClass)];
- }
- /** Returns an FPRSelectorInstrumentor given a SEL and FPRClassInstrumentor. This is a convenience
- * function.
- *
- * @param selector The selector to instrument.
- * @param instrumentor The class instrumentor to generate the selector instrumentor from.
- * @param isClassSelector YES if the selector is a class selector, NO otherwise.
- * @return An FPRSelectorInstrumentor instance if the selector is on the class.
- * @throws An exception if the selector is NOT found on the class.
- */
- FOUNDATION_EXTERN_INLINE
- FPRSelectorInstrumentor *SelectorInstrumentor(SEL selector,
- FPRClassInstrumentor *instrumentor,
- BOOL isClassSelector) {
- FPRSelectorInstrumentor *selectorInstrumentor =
- isClassSelector ? [instrumentor instrumentorForClassSelector:selector]
- : [instrumentor instrumentorForInstanceSelector:selector];
- if (!selectorInstrumentor) {
- ThrowExceptionBecauseSelectorNotFoundOnClass(selector, instrumentor.instrumentedClass);
- }
- return selectorInstrumentor;
- }
|