diff options
author | 2022-12-01 16:17:47 +0000 | |
---|---|---|
committer | 2022-12-02 15:00:55 +0000 | |
commit | 7b97aebac851b345c7733d56ffe0fedf66010dbb (patch) | |
tree | b1be8f0d36642d4d27e3e73dd63f24ba67ed7352 /runtime/native/java_lang_VMClassLoader.cc | |
parent | 4c25ffc893541a4c3d5f6c077914633ca637406a (diff) |
Remove class root duplicates from well known classes.
And get well known exception classes as declaring classes
of their constructors.
Also change function `ThreadForEnv()` to `Thread::ForEnv()`
and use it where appropriate, mostly in code added recently
while cleaning up well-known methods.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Change-Id: I2ededa429863a6cddbcbb879a223277fd6245557
Diffstat (limited to 'runtime/native/java_lang_VMClassLoader.cc')
-rw-r--r-- | runtime/native/java_lang_VMClassLoader.cc | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/runtime/native/java_lang_VMClassLoader.cc b/runtime/native/java_lang_VMClassLoader.cc index b327e51849..b9c72b82e7 100644 --- a/runtime/native/java_lang_VMClassLoader.cc +++ b/runtime/native/java_lang_VMClassLoader.cc @@ -35,7 +35,8 @@ #include "obj_ptr.h" #include "scoped_fast_native_object_access-inl.h" #include "string_array_utils.h" -#include "well_known_classes.h" +#include "thread-inl.h" +#include "well_known_classes-inl.h" namespace art { @@ -96,12 +97,9 @@ static jclass VMClassLoader_findLoadedClass(JNIEnv* env, jclass, jobject javaLoa if (c != nullptr && c->IsErroneous()) { cl->ThrowEarlierClassFailure(c); Thread* self = soa.Self(); - ObjPtr<mirror::Class> iae_class = - self->DecodeJObject(WellKnownClasses::java_lang_IllegalAccessError)->AsClass(); - ObjPtr<mirror::Class> ncdfe_class = - self->DecodeJObject(WellKnownClasses::java_lang_NoClassDefFoundError)->AsClass(); - ObjPtr<mirror::Class> exception = self->GetException()->GetClass(); - if (exception == iae_class || exception == ncdfe_class) { + ObjPtr<mirror::Class> exception_class = self->GetException()->GetClass(); + if (exception_class == WellKnownClasses::java_lang_IllegalAccessError || + exception_class == WellKnownClasses::java_lang_NoClassDefFoundError) { self->ThrowNewWrappedException("Ljava/lang/ClassNotFoundException;", c->PrettyDescriptor().c_str()); } @@ -159,7 +157,7 @@ static jobjectArray VMClassLoader_getBootClassPathEntries(JNIEnv* env, jclass) { return is_base_dex(dex_file); }; auto get_location = [](const DexFile* dex_file) { return dex_file->GetLocation(); }; - ScopedObjectAccess soa(down_cast<JNIEnvExt*>(env)->GetSelf()); + ScopedObjectAccess soa(Thread::ForEnv(env)); return soa.AddLocalReference<jobjectArray>(CreateStringArray( soa.Self(), jar_count, |