summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2012-01-24 17:13:54 -0800
committerElliott Hughes <enh@google.com>2012-08-01 12:45:11 -0700
commit3bbe5318c343b1b7c945be717cc55b4ab15874f2 (patch)
treedc01fe006d2ab8d1e149ee6772f615ed73742bba
parent8588cab1581a385445714570c55eced54bdabd97 (diff)
downloadlibcore-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.java2
-rw-r--r--include/ScopedLocalRef.h20
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;
}