Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2779)

Unified Diff: base/android/jni_android.cc

Issue 10996063: Android: adds Get(Static)MethodIDOrNULL. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Nyquist comments / joth's template Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/android/jni_android.h ('k') | base/android/jni_generator/jni_generator.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/android/jni_android.cc
diff --git a/base/android/jni_android.cc b/base/android/jni_android.cc
index d3b4e79058381652baf17f512ce57c2c8b2fb0fe..eb85c5741a64c396a79a89bdca2085c9b51bb6d9 100644
--- a/base/android/jni_android.cc
+++ b/base/android/jni_android.cc
@@ -96,6 +96,36 @@ std::string GetJavaExceptionInfo(JNIEnv* env, jthrowable java_throwable) {
return ConvertJavaStringToUTF8(exception_string);
}
+
+enum MethodType {
+ METHODTYPE_STATIC,
+ METHODTYPE_NORMAL,
+};
+
+enum ExceptionCheck {
+ EXCEPTIONCHECK_YES,
+ EXCEPTIONCHECK_NO,
+};
+
+template<MethodType method_type, ExceptionCheck exception_check>
+jmethodID GetMethodIDInternal(JNIEnv* env,
+ jclass clazz,
+ const char* method_name,
+ const char* jni_signature) {
+ jmethodID method_id = method_type == METHODTYPE_STATIC ?
+ env->GetStaticMethodID(clazz, method_name, jni_signature) :
+ env->GetMethodID(clazz, method_name, jni_signature);
+ if (exception_check == EXCEPTIONCHECK_YES) {
+ CHECK(method_id || base::android::ClearException(env)) <<
joth 2012/10/02 17:12:56 every where else in this file we have CHECK(some
bulach 2012/10/02 17:25:40 sounds reasonable. done.
+ "Failed to find " <<
+ (method_type == METHODTYPE_STATIC ? "static " : "") <<
+ "method " << method_name << " " << jni_signature;
+ } else if (base::android::HasException(env)) {
+ env->ExceptionClear();
+ }
+ return method_id;
+}
+
} // namespace
namespace base {
@@ -165,11 +195,16 @@ jmethodID GetMethodID(JNIEnv* env,
jclass clazz,
const char* method_name,
const char* jni_signature) {
- jmethodID method_id =
- env->GetMethodID(clazz, method_name, jni_signature);
- CHECK(method_id && !ClearException(env)) << "Failed to find method " <<
- method_name << " " << jni_signature;
- return method_id;
+ return GetMethodIDInternal<METHODTYPE_NORMAL, EXCEPTIONCHECK_YES>(
+ env, clazz, method_name, jni_signature);
+}
+
+jmethodID GetMethodIDOrNull(JNIEnv* env,
+ jclass clazz,
+ const char* method_name,
+ const char* jni_signature) {
+ return GetMethodIDInternal<METHODTYPE_NORMAL, EXCEPTIONCHECK_NO>(
+ env, clazz, method_name, jni_signature);
}
jmethodID GetStaticMethodID(JNIEnv* env,
@@ -184,11 +219,16 @@ jmethodID GetStaticMethodID(JNIEnv* env,
jclass clazz,
const char* method_name,
const char* jni_signature) {
- jmethodID method_id =
- env->GetStaticMethodID(clazz, method_name, jni_signature);
- CHECK(method_id && !ClearException(env)) << "Failed to find static method " <<
- method_name << " " << jni_signature;
- return method_id;
+ return GetMethodIDInternal<METHODTYPE_STATIC, EXCEPTIONCHECK_YES>(
+ env, clazz, method_name, jni_signature);
+}
+
+jmethodID GetStaticMethodIDOrNull(JNIEnv* env,
+ jclass clazz,
+ const char* method_name,
+ const char* jni_signature) {
+ return GetMethodIDInternal<METHODTYPE_STATIC, EXCEPTIONCHECK_NO>(
+ env, clazz, method_name, jni_signature);
}
bool HasMethod(JNIEnv* env,
« no previous file with comments | « base/android/jni_android.h ('k') | base/android/jni_generator/jni_generator.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698