|  | /* | 
|  | * Copyright (C) 2017 The Android Open Source Project | 
|  | * | 
|  | * 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. | 
|  | */ | 
|  |  | 
|  | #ifndef ART_RUNTIME_NATIVE_NATIVE_UTIL_H_ | 
|  | #define ART_RUNTIME_NATIVE_NATIVE_UTIL_H_ | 
|  |  | 
|  | #include <jni.h> | 
|  |  | 
|  | #include "android-base/logging.h" | 
|  | #include "base/macros.h" | 
|  | #include "nativehelper/scoped_local_ref.h" | 
|  |  | 
|  | namespace art { | 
|  |  | 
|  | ALWAYS_INLINE inline void RegisterNativeMethodsInternal(JNIEnv* env, | 
|  | const char* jni_class_name, | 
|  | const JNINativeMethod* methods, | 
|  | jint method_count) { | 
|  | ScopedLocalRef<jclass> c(env, env->FindClass(jni_class_name)); | 
|  | if (c.get() == nullptr) { | 
|  | LOG(FATAL) << "Couldn't find class: " << jni_class_name; | 
|  | } | 
|  | jint jni_result = env->RegisterNatives(c.get(), methods, method_count); | 
|  | CHECK_EQ(JNI_OK, jni_result); | 
|  | } | 
|  |  | 
|  | #define REGISTER_NATIVE_METHODS(jni_class_name) \ | 
|  | RegisterNativeMethodsInternal(env, (jni_class_name), gMethods, arraysize(gMethods)) | 
|  |  | 
|  | }  // namespace art | 
|  |  | 
|  | #endif  // ART_RUNTIME_NATIVE_NATIVE_UTIL_H_ |