diff options
author | 2016-11-02 09:50:13 +0000 | |
---|---|---|
committer | 2016-11-02 09:50:13 +0000 | |
commit | 0fe4df18f61c7a764bc1c5eea50b19d6b1ff9b1c (patch) | |
tree | 33ed192981a10b21c00618c99863577d0717ac37 | |
parent | 9f54896e96a363a5b1ddb2f1b34b58ad4f32ac10 (diff) | |
parent | af3572bc21cf66f970090c852b976095bb028083 (diff) |
Merge "Revert "ART: Generalize FindClassInPathClassLoader""
-rw-r--r-- | runtime/class_linker.cc | 34 | ||||
-rw-r--r-- | runtime/class_linker.h | 16 | ||||
-rw-r--r-- | runtime/native/java_lang_VMClassLoader.cc | 2 | ||||
-rw-r--r-- | runtime/well_known_classes.cc | 2 | ||||
-rw-r--r-- | runtime/well_known_classes.h | 1 |
5 files changed, 21 insertions, 34 deletions
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc index d3d30d4cea..73524af0be 100644 --- a/runtime/class_linker.cc +++ b/runtime/class_linker.cc @@ -2329,12 +2329,12 @@ ClassPathEntry FindInClassPath(const char* descriptor, return ClassPathEntry(nullptr, nullptr); } -bool ClassLinker::FindClassInBaseDexClassLoader(ScopedObjectAccessAlreadyRunnable& soa, - Thread* self, - const char* descriptor, - size_t hash, - Handle<mirror::ClassLoader> class_loader, - ObjPtr<mirror::Class>* result) { +bool ClassLinker::FindClassInPathClassLoader(ScopedObjectAccessAlreadyRunnable& soa, + Thread* self, + const char* descriptor, + size_t hash, + Handle<mirror::ClassLoader> class_loader, + ObjPtr<mirror::Class>* result) { // Termination case: boot class-loader. if (IsBootClassLoader(soa, class_loader.Get())) { // The boot class loader, search the boot class path. @@ -2364,24 +2364,14 @@ bool ClassLinker::FindClassInBaseDexClassLoader(ScopedObjectAccessAlreadyRunnabl // Unsupported class-loader? if (soa.Decode<mirror::Class>(WellKnownClasses::dalvik_system_PathClassLoader) != class_loader->GetClass()) { - // PathClassLoader is the most common case, so it's the one we check first. For secondary dex - // files, we also check DexClassLoader here. - if (soa.Decode<mirror::Class>(WellKnownClasses::dalvik_system_DexClassLoader) != - class_loader->GetClass()) { - *result = nullptr; - return false; - } + *result = nullptr; + return false; } // Handles as RegisterDexFile may allocate dex caches (and cause thread suspension). StackHandleScope<4> hs(self); Handle<mirror::ClassLoader> h_parent(hs.NewHandle(class_loader->GetParent())); - bool recursive_result = FindClassInBaseDexClassLoader(soa, - self, - descriptor, - hash, - h_parent, - result); + bool recursive_result = FindClassInPathClassLoader(soa, self, descriptor, hash, h_parent, result); if (!recursive_result) { // Something wrong up the chain. @@ -2503,14 +2493,14 @@ mirror::Class* ClassLinker::FindClass(Thread* self, } else { ScopedObjectAccessUnchecked soa(self); ObjPtr<mirror::Class> cp_klass; - if (FindClassInBaseDexClassLoader(soa, self, descriptor, hash, class_loader, &cp_klass)) { + if (FindClassInPathClassLoader(soa, self, descriptor, hash, class_loader, &cp_klass)) { // The chain was understood. So the value in cp_klass is either the class we were looking // for, or not found. if (cp_klass != nullptr) { return cp_klass.Ptr(); } - // TODO: We handle the boot classpath loader in FindClassInBaseDexClassLoader. Try to unify - // this and the branch above. TODO: throw the right exception here. + // TODO: We handle the boot classpath loader in FindClassInPathClassLoader. Try to unify this + // and the branch above. TODO: throw the right exception here. // We'll let the Java-side rediscover all this and throw the exception with the right stack // trace. diff --git a/runtime/class_linker.h b/runtime/class_linker.h index 4426056078..3248d0e3d9 100644 --- a/runtime/class_linker.h +++ b/runtime/class_linker.h @@ -794,17 +794,17 @@ class ClassLinker { void FixupStaticTrampolines(ObjPtr<mirror::Class> klass) REQUIRES_SHARED(Locks::mutator_lock_); - // Finds a class in a Path- or DexClassLoader, loading it if necessary without using JNI. Hash + // Finds a class in the path class loader, loading it if necessary without using JNI. Hash // function is supposed to be ComputeModifiedUtf8Hash(descriptor). Returns true if the // class-loader chain could be handled, false otherwise, i.e., a non-supported class-loader // was encountered while walking the parent chain (currently only BootClassLoader and // PathClassLoader are supported). - bool FindClassInBaseDexClassLoader(ScopedObjectAccessAlreadyRunnable& soa, - Thread* self, - const char* descriptor, - size_t hash, - Handle<mirror::ClassLoader> class_loader, - ObjPtr<mirror::Class>* result) + bool FindClassInPathClassLoader(ScopedObjectAccessAlreadyRunnable& soa, + Thread* self, + const char* descriptor, + size_t hash, + Handle<mirror::ClassLoader> class_loader, + ObjPtr<mirror::Class>* result) REQUIRES_SHARED(Locks::mutator_lock_) REQUIRES(!dex_lock_); @@ -1200,7 +1200,7 @@ class ClassLinker { friend struct CompilationHelper; // For Compile in ImageTest. friend class ImageDumper; // for DexLock friend class ImageWriter; // for GetClassRoots - friend class VMClassLoader; // for LookupClass and FindClassInBaseDexClassLoader. + friend class VMClassLoader; // for LookupClass and FindClassInPathClassLoader. friend class JniCompilerTest; // for GetRuntimeQuickGenericJniStub friend class JniInternalTest; // for GetRuntimeQuickGenericJniStub ART_FRIEND_TEST(ClassLinkerTest, RegisterDexFileName); // for DexLock, and RegisterDexFileLocked diff --git a/runtime/native/java_lang_VMClassLoader.cc b/runtime/native/java_lang_VMClassLoader.cc index 284d2d10c5..e5bab36870 100644 --- a/runtime/native/java_lang_VMClassLoader.cc +++ b/runtime/native/java_lang_VMClassLoader.cc @@ -48,7 +48,7 @@ class VMClassLoader { Handle<mirror::ClassLoader> class_loader) REQUIRES_SHARED(Locks::mutator_lock_) { ObjPtr<mirror::Class> result; - if (cl->FindClassInBaseDexClassLoader(soa, self, descriptor, hash, class_loader, &result)) { + if (cl->FindClassInPathClassLoader(soa, self, descriptor, hash, class_loader, &result)) { return result; } return nullptr; diff --git a/runtime/well_known_classes.cc b/runtime/well_known_classes.cc index 2797d8570c..0f4ae521ec 100644 --- a/runtime/well_known_classes.cc +++ b/runtime/well_known_classes.cc @@ -35,7 +35,6 @@ jclass WellKnownClasses::com_android_dex_Dex; jclass WellKnownClasses::dalvik_annotation_optimization_CriticalNative; jclass WellKnownClasses::dalvik_annotation_optimization_FastNative; jclass WellKnownClasses::dalvik_system_BaseDexClassLoader; -jclass WellKnownClasses::dalvik_system_DexClassLoader; jclass WellKnownClasses::dalvik_system_DexFile; jclass WellKnownClasses::dalvik_system_DexPathList; jclass WellKnownClasses::dalvik_system_DexPathList__Element; @@ -267,7 +266,6 @@ void WellKnownClasses::Init(JNIEnv* env) { CacheClass(env, "dalvik/annotation/optimization/CriticalNative"); dalvik_annotation_optimization_FastNative = CacheClass(env, "dalvik/annotation/optimization/FastNative"); dalvik_system_BaseDexClassLoader = CacheClass(env, "dalvik/system/BaseDexClassLoader"); - dalvik_system_DexClassLoader = CacheClass(env, "dalvik/system/DexClassLoader"); dalvik_system_DexFile = CacheClass(env, "dalvik/system/DexFile"); dalvik_system_DexPathList = CacheClass(env, "dalvik/system/DexPathList"); dalvik_system_DexPathList__Element = CacheClass(env, "dalvik/system/DexPathList$Element"); diff --git a/runtime/well_known_classes.h b/runtime/well_known_classes.h index 227996ad99..d07977a493 100644 --- a/runtime/well_known_classes.h +++ b/runtime/well_known_classes.h @@ -48,7 +48,6 @@ struct WellKnownClasses { static jclass dalvik_annotation_optimization_CriticalNative; static jclass dalvik_annotation_optimization_FastNative; static jclass dalvik_system_BaseDexClassLoader; - static jclass dalvik_system_DexClassLoader; static jclass dalvik_system_DexFile; static jclass dalvik_system_DexPathList; static jclass dalvik_system_DexPathList__Element; |