diff options
author | Elliott Hughes <enh@google.com> | 2012-01-24 17:13:54 -0800 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2012-08-01 12:45:11 -0700 |
commit | 3bbe5318c343b1b7c945be717cc55b4ab15874f2 (patch) | |
tree | dc01fe006d2ab8d1e149ee6772f615ed73742bba | |
parent | 8588cab1581a385445714570c55eced54bdabd97 (diff) | |
download | libcore-3bbe5318c343b1b7c945be717cc55b4ab15874f2.tar.gz libcore-3bbe5318c343b1b7c945be717cc55b4ab15874f2.tar.bz2 libcore-3bbe5318c343b1b7c945be717cc55b4ab15874f2.zip |
Improve the BaseDexClassLoader detail message, and make ScopedLocalRef more unique_ptr-like.
(cherry-pick of 1c459db4ea31c1f284353bc71bfd2dbc97ca53d7.)
Conflicts:
include/ScopedLocalRef.h
Change-Id: Id01cb907406cc93f6b0f6ddaa8e7fb3714d18c53
-rw-r--r-- | dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java | 2 | ||||
-rw-r--r-- | include/ScopedLocalRef.h | 20 |
2 files changed, 14 insertions, 8 deletions
diff --git a/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java b/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java index ab24f0b84..5782fd988 100644 --- a/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java +++ b/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java @@ -58,7 +58,7 @@ public class BaseDexClassLoader extends ClassLoader { Class clazz = pathList.findClass(name); if (clazz == null) { - throw new ClassNotFoundException(name); + throw new ClassNotFoundException("Didn't find class \"" + name + "\" on path: " + originalPath); } return clazz; diff --git a/include/ScopedLocalRef.h b/include/ScopedLocalRef.h index 84ee11a95..e239b9e52 100644 --- a/include/ScopedLocalRef.h +++ b/include/ScopedLocalRef.h @@ -23,22 +23,28 @@ template<typename T> class ScopedLocalRef { public: - ScopedLocalRef(JNIEnv* env, T localRef) - : mEnv(env), mLocalRef(localRef) - { + ScopedLocalRef(JNIEnv* env, T localRef) : mEnv(env), mLocalRef(localRef) { } ~ScopedLocalRef() { reset(); } - void reset() { - if (mLocalRef != NULL) { - mEnv->DeleteLocalRef(mLocalRef); - mLocalRef = NULL; + void reset(T ptr = NULL) { + if (ptr != mLocalRef) { + if (mLocalRef != NULL) { + mEnv->DeleteLocalRef(mLocalRef); + } + mLocalRef = ptr; } } + T release() __attribute__((warn_unused_result)) { + T localRef = mLocalRef; + mLocalRef = NULL; + return localRef; + } + T get() const { return mLocalRef; } |