From 7b97aebac851b345c7733d56ffe0fedf66010dbb Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Thu, 1 Dec 2022 16:17:47 +0000 Subject: 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 --- runtime/native/java_lang_VMClassLoader.cc | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'runtime/native/java_lang_VMClassLoader.cc') 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 iae_class = - self->DecodeJObject(WellKnownClasses::java_lang_IllegalAccessError)->AsClass(); - ObjPtr ncdfe_class = - self->DecodeJObject(WellKnownClasses::java_lang_NoClassDefFoundError)->AsClass(); - ObjPtr exception = self->GetException()->GetClass(); - if (exception == iae_class || exception == ncdfe_class) { + ObjPtr 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(env)->GetSelf()); + ScopedObjectAccess soa(Thread::ForEnv(env)); return soa.AddLocalReference(CreateStringArray( soa.Self(), jar_count, -- cgit v1.2.3-59-g8ed1b