1eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes/* 2eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes * Copyright (C) 2012 The Android Open Source Project 3eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes * 4eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes * Licensed under the Apache License, Version 2.0 (the "License"); 5eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes * you may not use this file except in compliance with the License. 6eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes * You may obtain a copy of the License at 7eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes * 8eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 9eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes * 10eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes * Unless required by applicable law or agreed to in writing, software 11eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 12eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes * See the License for the specific language governing permissions and 14eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes * limitations under the License. 15eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes */ 16eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes 17eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes#include "well_known_classes.h" 18eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes 19eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes#include <stdlib.h> 20eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes 21c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers#include <sstream> 22c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers 2307ed66b5ae659c452cbe1ab20c3dbf1d6f546461Elliott Hughes#include "base/logging.h" 242dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers#include "mirror/class.h" 25e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier#include "mirror/throwable.h" 26eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes#include "ScopedLocalRef.h" 273c821c67e28ee1ec7bea2b3b644f5aed303f19f3Brian Carlstrom#include "scoped_thread_state_change.h" 28a3d2718d1fac53210b2a311b1728409d6c8e7b9dBrian Carlstrom#include "thread-inl.h" 29eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes 30eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughesnamespace art { 31eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes 32eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughesjclass WellKnownClasses::com_android_dex_Dex; 336bcae8fa93684af581d16400f360541d39e5b5e6Mathieu Chartierjclass WellKnownClasses::dalvik_system_DexFile; 346bcae8fa93684af581d16400f360541d39e5b5e6Mathieu Chartierjclass WellKnownClasses::dalvik_system_DexPathList; 35c8ccf68b805c92674545f63e0341ba47e8d9701cAndreas Gampejclass WellKnownClasses::dalvik_system_DexPathList__Element; 3600f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogersjclass WellKnownClasses::dalvik_system_PathClassLoader; 37b5de3bb65556950d5cce1dea3ea6d80adcc5051dMathieu Chartierjclass WellKnownClasses::dalvik_system_VMRuntime; 3813e748b28c5f2bd1e83674d2ca899ff61ae5c0a1Jeff Haojclass WellKnownClasses::java_lang_annotation_Annotation__array; 396bcae8fa93684af581d16400f360541d39e5b5e6Mathieu Chartierjclass WellKnownClasses::java_lang_BootClassLoader; 40eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughesjclass WellKnownClasses::java_lang_ClassLoader; 41eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughesjclass WellKnownClasses::java_lang_ClassNotFoundException; 42eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughesjclass WellKnownClasses::java_lang_Daemons; 43eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughesjclass WellKnownClasses::java_lang_Error; 447c8aa8357196781c811a73d2eb66aaaa1681ce36Jeff Haojclass WellKnownClasses::java_lang_ExceptionInInitializerError; 457c8aa8357196781c811a73d2eb66aaaa1681ce36Jeff Haojclass WellKnownClasses::java_lang_IllegalAccessError; 467c8aa8357196781c811a73d2eb66aaaa1681ce36Jeff Haojclass WellKnownClasses::java_lang_NoClassDefFoundError; 47af6e67a4816d2593586115b89faa659225363246Ian Rogersjclass WellKnownClasses::java_lang_Object; 48a61894d88fabe45677f491c9f6bde30059a49026Mathieu Chartierjclass WellKnownClasses::java_lang_OutOfMemoryError; 4966f19258f9728d4ffe026074d8fd429d639802faMathieu Chartierjclass WellKnownClasses::java_lang_reflect_AbstractMethod; 50ea46f950e7a51585db293cd7f047de190a482414Brian Carlstromjclass WellKnownClasses::java_lang_reflect_Constructor; 51ea46f950e7a51585db293cd7f047de190a482414Brian Carlstromjclass WellKnownClasses::java_lang_reflect_Field; 52ea46f950e7a51585db293cd7f047de190a482414Brian Carlstromjclass WellKnownClasses::java_lang_reflect_Method; 53eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughesjclass WellKnownClasses::java_lang_reflect_Proxy; 54a4f94740f9d66b21f4bcd3a225c434aa29cfa323Elliott Hughesjclass WellKnownClasses::java_lang_RuntimeException; 55120f1c74a9768e958377b6c97897511b27ae58c8Ian Rogersjclass WellKnownClasses::java_lang_StackOverflowError; 56dd157d732b557a854b3689faf8a24170fb47c270Ian Rogersjclass WellKnownClasses::java_lang_String; 57848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Haojclass WellKnownClasses::java_lang_StringFactory; 58987ccff48fe2c0645756e1089608e4b6b7e9f7bfMathieu Chartierjclass WellKnownClasses::java_lang_System; 59eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughesjclass WellKnownClasses::java_lang_Thread; 60c8ccf68b805c92674545f63e0341ba47e8d9701cAndreas Gampejclass WellKnownClasses::java_lang_Thread__UncaughtExceptionHandler; 61af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott Hughesjclass WellKnownClasses::java_lang_ThreadGroup; 62a4f94740f9d66b21f4bcd3a225c434aa29cfa323Elliott Hughesjclass WellKnownClasses::java_lang_Throwable; 63aecb5f3fd5dcd78bc3e74993acc40fed815b6b8bElliott Hughesjclass WellKnownClasses::java_nio_DirectByteBuffer; 64e49e195c4bc2f20df0289c0bbb46f56839308ddeSebastien Hertzjclass WellKnownClasses::java_util_ArrayList; 657ea6f79bbddd69d5db86a8656a31aaaf64ae2582Andreas Gampejclass WellKnownClasses::java_util_Collections; 6613e748b28c5f2bd1e83674d2ca899ff61ae5c0a1Jeff Haojclass WellKnownClasses::libcore_reflect_AnnotationFactory; 6713e748b28c5f2bd1e83674d2ca899ff61ae5c0a1Jeff Haojclass WellKnownClasses::libcore_reflect_AnnotationMember; 687ea6f79bbddd69d5db86a8656a31aaaf64ae2582Andreas Gampejclass WellKnownClasses::libcore_util_EmptyArray; 69eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughesjclass WellKnownClasses::org_apache_harmony_dalvik_ddmc_Chunk; 70eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughesjclass WellKnownClasses::org_apache_harmony_dalvik_ddmc_DdmServer; 71eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes 72eac766769e3114a078c188ea26776a81f0edb3cfElliott HughesjmethodID WellKnownClasses::com_android_dex_Dex_create; 73b5de3bb65556950d5cce1dea3ea6d80adcc5051dMathieu ChartierjmethodID WellKnownClasses::dalvik_system_VMRuntime_runFinalization; 7400f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan RogersjmethodID WellKnownClasses::java_lang_Boolean_valueOf; 7500f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan RogersjmethodID WellKnownClasses::java_lang_Byte_valueOf; 7600f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan RogersjmethodID WellKnownClasses::java_lang_Character_valueOf; 77a4f94740f9d66b21f4bcd3a225c434aa29cfa323Elliott HughesjmethodID WellKnownClasses::java_lang_ClassLoader_loadClass; 7800f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan RogersjmethodID WellKnownClasses::java_lang_ClassNotFoundException_init; 79eac766769e3114a078c188ea26776a81f0edb3cfElliott HughesjmethodID WellKnownClasses::java_lang_Daemons_requestHeapTrim; 80eac766769e3114a078c188ea26776a81f0edb3cfElliott HughesjmethodID WellKnownClasses::java_lang_Daemons_start; 81cef50f0487929f72183623bc2a5819cf3a63bff6Mathieu ChartierjmethodID WellKnownClasses::java_lang_Daemons_stop; 8200f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan RogersjmethodID WellKnownClasses::java_lang_Double_valueOf; 8300f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan RogersjmethodID WellKnownClasses::java_lang_Float_valueOf; 8400f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan RogersjmethodID WellKnownClasses::java_lang_Integer_valueOf; 8500f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan RogersjmethodID WellKnownClasses::java_lang_Long_valueOf; 86a4f94740f9d66b21f4bcd3a225c434aa29cfa323Elliott HughesjmethodID WellKnownClasses::java_lang_ref_FinalizerReference_add; 87a4f94740f9d66b21f4bcd3a225c434aa29cfa323Elliott HughesjmethodID WellKnownClasses::java_lang_ref_ReferenceQueue_add; 88ea46f950e7a51585db293cd7f047de190a482414Brian CarlstromjmethodID WellKnownClasses::java_lang_reflect_Proxy_invoke; 89ef28b14268ed0f9db0c7bbd571aa514354a360bdIan RogersjmethodID WellKnownClasses::java_lang_Runtime_nativeLoad; 9000f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan RogersjmethodID WellKnownClasses::java_lang_Short_valueOf; 91848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_String_init; 92848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_String_init_B; 93848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_String_init_BI; 94848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_String_init_BII; 95848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_String_init_BIII; 96848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_String_init_BIIString; 97848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_String_init_BString; 98848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_String_init_BIICharset; 99848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_String_init_BCharset; 100848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_String_init_C; 101848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_String_init_CII; 102848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_String_init_IIC; 103848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_String_init_String; 104848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_String_init_StringBuffer; 105848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_String_init_III; 106848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_String_init_StringBuilder; 107848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_StringFactory_newEmptyString; 108848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_StringFactory_newStringFromBytes_B; 109848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_StringFactory_newStringFromBytes_BI; 110848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_StringFactory_newStringFromBytes_BII; 111848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_StringFactory_newStringFromBytes_BIII; 112848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_StringFactory_newStringFromBytes_BIIString; 113848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_StringFactory_newStringFromBytes_BString; 114848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_StringFactory_newStringFromBytes_BIICharset; 115848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_StringFactory_newStringFromBytes_BCharset; 116848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_StringFactory_newStringFromChars_C; 117848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_StringFactory_newStringFromChars_CII; 118848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_StringFactory_newStringFromChars_IIC; 119848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_StringFactory_newStringFromString; 120848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_StringFactory_newStringFromStringBuffer; 121848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_StringFactory_newStringFromCodePoints; 122848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::java_lang_StringFactory_newStringFromStringBuilder; 1232cebb24bfc3247d3e9be138a3350106737455918Mathieu ChartierjmethodID WellKnownClasses::java_lang_System_runFinalization = nullptr; 124eac766769e3114a078c188ea26776a81f0edb3cfElliott HughesjmethodID WellKnownClasses::java_lang_Thread_init; 125af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott HughesjmethodID WellKnownClasses::java_lang_Thread_run; 126c8ccf68b805c92674545f63e0341ba47e8d9701cAndreas GampejmethodID WellKnownClasses::java_lang_Thread__UncaughtExceptionHandler_uncaughtException; 127af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott HughesjmethodID WellKnownClasses::java_lang_ThreadGroup_removeThread; 128aecb5f3fd5dcd78bc3e74993acc40fed815b6b8bElliott HughesjmethodID WellKnownClasses::java_nio_DirectByteBuffer_init; 12913e748b28c5f2bd1e83674d2ca899ff61ae5c0a1Jeff HaojmethodID WellKnownClasses::libcore_reflect_AnnotationFactory_createAnnotation; 13013e748b28c5f2bd1e83674d2ca899ff61ae5c0a1Jeff HaojmethodID WellKnownClasses::libcore_reflect_AnnotationMember_init; 131eac766769e3114a078c188ea26776a81f0edb3cfElliott HughesjmethodID WellKnownClasses::org_apache_harmony_dalvik_ddmc_DdmServer_broadcast; 132eac766769e3114a078c188ea26776a81f0edb3cfElliott HughesjmethodID WellKnownClasses::org_apache_harmony_dalvik_ddmc_DdmServer_dispatch; 133eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes 1346bcae8fa93684af581d16400f360541d39e5b5e6Mathieu ChartierjfieldID WellKnownClasses::dalvik_system_DexFile_cookie; 135fbc31087932a65e036a153afab3049dc5298656aMathieu ChartierjfieldID WellKnownClasses::dalvik_system_DexFile_fileName; 1366bcae8fa93684af581d16400f360541d39e5b5e6Mathieu ChartierjfieldID WellKnownClasses::dalvik_system_PathClassLoader_pathList; 1376bcae8fa93684af581d16400f360541d39e5b5e6Mathieu ChartierjfieldID WellKnownClasses::dalvik_system_DexPathList_dexElements; 138c8ccf68b805c92674545f63e0341ba47e8d9701cAndreas GampejfieldID WellKnownClasses::dalvik_system_DexPathList__Element_dexFile; 139af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott HughesjfieldID WellKnownClasses::java_lang_Thread_daemon; 140af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott HughesjfieldID WellKnownClasses::java_lang_Thread_group; 141af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott HughesjfieldID WellKnownClasses::java_lang_Thread_lock; 142af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott HughesjfieldID WellKnownClasses::java_lang_Thread_name; 143af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott HughesjfieldID WellKnownClasses::java_lang_Thread_priority; 144af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott HughesjfieldID WellKnownClasses::java_lang_Thread_uncaughtHandler; 1453c50a4b4ba6d7d9369ee9a0bd6d30bf4c9c79bb0Anwar GhuloumjfieldID WellKnownClasses::java_lang_Thread_nativePeer; 146e49e195c4bc2f20df0289c0bbb46f56839308ddeSebastien HertzjfieldID WellKnownClasses::java_lang_ThreadGroup_groups; 147464595f53abe4370ee6f589eb472e2036e39bce7Przemyslaw SzczepaniakjfieldID WellKnownClasses::java_lang_ThreadGroup_ngroups; 148af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott HughesjfieldID WellKnownClasses::java_lang_ThreadGroup_mainThreadGroup; 149af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott HughesjfieldID WellKnownClasses::java_lang_ThreadGroup_name; 150e49e195c4bc2f20df0289c0bbb46f56839308ddeSebastien HertzjfieldID WellKnownClasses::java_lang_ThreadGroup_parent; 151af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott HughesjfieldID WellKnownClasses::java_lang_ThreadGroup_systemThreadGroup; 1523437531f515d84609fa43baaec32a0d1cc0e3fe0Brian CarlstromjfieldID WellKnownClasses::java_lang_Throwable_cause; 1533437531f515d84609fa43baaec32a0d1cc0e3fe0Brian CarlstromjfieldID WellKnownClasses::java_lang_Throwable_detailMessage; 1543437531f515d84609fa43baaec32a0d1cc0e3fe0Brian CarlstromjfieldID WellKnownClasses::java_lang_Throwable_stackTrace; 1553437531f515d84609fa43baaec32a0d1cc0e3fe0Brian CarlstromjfieldID WellKnownClasses::java_lang_Throwable_stackState; 1563437531f515d84609fa43baaec32a0d1cc0e3fe0Brian CarlstromjfieldID WellKnownClasses::java_lang_Throwable_suppressedExceptions; 157ea46f950e7a51585db293cd7f047de190a482414Brian CarlstromjfieldID WellKnownClasses::java_lang_reflect_AbstractMethod_artMethod; 158eac766769e3114a078c188ea26776a81f0edb3cfElliott HughesjfieldID WellKnownClasses::java_lang_reflect_Proxy_h; 159aecb5f3fd5dcd78bc3e74993acc40fed815b6b8bElliott HughesjfieldID WellKnownClasses::java_nio_DirectByteBuffer_capacity; 160aecb5f3fd5dcd78bc3e74993acc40fed815b6b8bElliott HughesjfieldID WellKnownClasses::java_nio_DirectByteBuffer_effectiveDirectAddress; 161e49e195c4bc2f20df0289c0bbb46f56839308ddeSebastien HertzjfieldID WellKnownClasses::java_util_ArrayList_array; 162e49e195c4bc2f20df0289c0bbb46f56839308ddeSebastien HertzjfieldID WellKnownClasses::java_util_ArrayList_size; 1633437531f515d84609fa43baaec32a0d1cc0e3fe0Brian CarlstromjfieldID WellKnownClasses::java_util_Collections_EMPTY_LIST; 1643437531f515d84609fa43baaec32a0d1cc0e3fe0Brian CarlstromjfieldID WellKnownClasses::libcore_util_EmptyArray_STACK_TRACE_ELEMENT; 165eac766769e3114a078c188ea26776a81f0edb3cfElliott HughesjfieldID WellKnownClasses::org_apache_harmony_dalvik_ddmc_Chunk_data; 166eac766769e3114a078c188ea26776a81f0edb3cfElliott HughesjfieldID WellKnownClasses::org_apache_harmony_dalvik_ddmc_Chunk_length; 167eac766769e3114a078c188ea26776a81f0edb3cfElliott HughesjfieldID WellKnownClasses::org_apache_harmony_dalvik_ddmc_Chunk_offset; 168eac766769e3114a078c188ea26776a81f0edb3cfElliott HughesjfieldID WellKnownClasses::org_apache_harmony_dalvik_ddmc_Chunk_type; 169eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes 170eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughesstatic jclass CacheClass(JNIEnv* env, const char* jni_class_name) { 171eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes ScopedLocalRef<jclass> c(env, env->FindClass(jni_class_name)); 1722cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier if (c.get() == nullptr) { 173eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes LOG(FATAL) << "Couldn't find class: " << jni_class_name; 174eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes } 175eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes return reinterpret_cast<jclass>(env->NewGlobalRef(c.get())); 176eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes} 177eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes 1783c821c67e28ee1ec7bea2b3b644f5aed303f19f3Brian Carlstromstatic jfieldID CacheField(JNIEnv* env, jclass c, bool is_static, 1793c821c67e28ee1ec7bea2b3b644f5aed303f19f3Brian Carlstrom const char* name, const char* signature) { 180e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier jfieldID fid = is_static ? env->GetStaticFieldID(c, name, signature) : 181e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier env->GetFieldID(c, name, signature); 1822cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier if (fid == nullptr) { 1833c821c67e28ee1ec7bea2b3b644f5aed303f19f3Brian Carlstrom ScopedObjectAccess soa(env); 184e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier if (soa.Self()->IsExceptionPending()) { 185e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier LOG(INTERNAL_FATAL) << soa.Self()->GetException()->Dump() << '\n'; 186e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier } 1873c821c67e28ee1ec7bea2b3b644f5aed303f19f3Brian Carlstrom std::ostringstream os; 1883c821c67e28ee1ec7bea2b3b644f5aed303f19f3Brian Carlstrom WellKnownClasses::ToClass(c)->DumpClass(os, mirror::Class::kDumpClassFullDetail); 1893c821c67e28ee1ec7bea2b3b644f5aed303f19f3Brian Carlstrom LOG(FATAL) << "Couldn't find field \"" << name << "\" with signature \"" << signature << "\": " 1903c821c67e28ee1ec7bea2b3b644f5aed303f19f3Brian Carlstrom << os.str(); 191eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes } 192eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes return fid; 193eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes} 194eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes 1953c821c67e28ee1ec7bea2b3b644f5aed303f19f3Brian CarlstromjmethodID CacheMethod(JNIEnv* env, jclass c, bool is_static, 1963c821c67e28ee1ec7bea2b3b644f5aed303f19f3Brian Carlstrom const char* name, const char* signature) { 197e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier jmethodID mid = is_static ? env->GetStaticMethodID(c, name, signature) : 198e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier env->GetMethodID(c, name, signature); 1992cebb24bfc3247d3e9be138a3350106737455918Mathieu Chartier if (mid == nullptr) { 2003c821c67e28ee1ec7bea2b3b644f5aed303f19f3Brian Carlstrom ScopedObjectAccess soa(env); 201e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier if (soa.Self()->IsExceptionPending()) { 202e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier LOG(INTERNAL_FATAL) << soa.Self()->GetException()->Dump() << '\n'; 203e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier } 2043c821c67e28ee1ec7bea2b3b644f5aed303f19f3Brian Carlstrom std::ostringstream os; 2053c821c67e28ee1ec7bea2b3b644f5aed303f19f3Brian Carlstrom WellKnownClasses::ToClass(c)->DumpClass(os, mirror::Class::kDumpClassFullDetail); 2063c821c67e28ee1ec7bea2b3b644f5aed303f19f3Brian Carlstrom LOG(FATAL) << "Couldn't find method \"" << name << "\" with signature \"" << signature << "\": " 2073c821c67e28ee1ec7bea2b3b644f5aed303f19f3Brian Carlstrom << os.str(); 208eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes } 209eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes return mid; 210eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes} 211eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes 21200f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogersstatic jmethodID CachePrimitiveBoxingMethod(JNIEnv* env, char prim_name, const char* boxed_name) { 21300f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers ScopedLocalRef<jclass> boxed_class(env, env->FindClass(boxed_name)); 21400f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers return CacheMethod(env, boxed_class.get(), true, "valueOf", 21500f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers StringPrintf("(%c)L%s;", prim_name, boxed_name).c_str()); 21600f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers} 21700f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers 218ea46f950e7a51585db293cd7f047de190a482414Brian Carlstromvoid WellKnownClasses::Init(JNIEnv* env) { 219eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes com_android_dex_Dex = CacheClass(env, "com/android/dex/Dex"); 2206bcae8fa93684af581d16400f360541d39e5b5e6Mathieu Chartier dalvik_system_DexFile = CacheClass(env, "dalvik/system/DexFile"); 2216bcae8fa93684af581d16400f360541d39e5b5e6Mathieu Chartier dalvik_system_DexPathList = CacheClass(env, "dalvik/system/DexPathList"); 222c8ccf68b805c92674545f63e0341ba47e8d9701cAndreas Gampe dalvik_system_DexPathList__Element = CacheClass(env, "dalvik/system/DexPathList$Element"); 22300f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers dalvik_system_PathClassLoader = CacheClass(env, "dalvik/system/PathClassLoader"); 224b5de3bb65556950d5cce1dea3ea6d80adcc5051dMathieu Chartier dalvik_system_VMRuntime = CacheClass(env, "dalvik/system/VMRuntime"); 225b5de3bb65556950d5cce1dea3ea6d80adcc5051dMathieu Chartier 22613e748b28c5f2bd1e83674d2ca899ff61ae5c0a1Jeff Hao java_lang_annotation_Annotation__array = CacheClass(env, "[Ljava/lang/annotation/Annotation;"); 2276bcae8fa93684af581d16400f360541d39e5b5e6Mathieu Chartier java_lang_BootClassLoader = CacheClass(env, "java/lang/BootClassLoader"); 228eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes java_lang_ClassLoader = CacheClass(env, "java/lang/ClassLoader"); 229eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes java_lang_ClassNotFoundException = CacheClass(env, "java/lang/ClassNotFoundException"); 230eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes java_lang_Daemons = CacheClass(env, "java/lang/Daemons"); 231af6e67a4816d2593586115b89faa659225363246Ian Rogers java_lang_Object = CacheClass(env, "java/lang/Object"); 232a61894d88fabe45677f491c9f6bde30059a49026Mathieu Chartier java_lang_OutOfMemoryError = CacheClass(env, "java/lang/OutOfMemoryError"); 233eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes java_lang_Error = CacheClass(env, "java/lang/Error"); 2347c8aa8357196781c811a73d2eb66aaaa1681ce36Jeff Hao java_lang_ExceptionInInitializerError = CacheClass(env, "java/lang/ExceptionInInitializerError"); 2357c8aa8357196781c811a73d2eb66aaaa1681ce36Jeff Hao java_lang_IllegalAccessError = CacheClass(env, "java/lang/IllegalAccessError"); 2367c8aa8357196781c811a73d2eb66aaaa1681ce36Jeff Hao java_lang_NoClassDefFoundError = CacheClass(env, "java/lang/NoClassDefFoundError"); 23766f19258f9728d4ffe026074d8fd429d639802faMathieu Chartier java_lang_reflect_AbstractMethod = CacheClass(env, "java/lang/reflect/AbstractMethod"); 238ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom java_lang_reflect_Constructor = CacheClass(env, "java/lang/reflect/Constructor"); 239ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom java_lang_reflect_Field = CacheClass(env, "java/lang/reflect/Field"); 240ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom java_lang_reflect_Method = CacheClass(env, "java/lang/reflect/Method"); 241eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes java_lang_reflect_Proxy = CacheClass(env, "java/lang/reflect/Proxy"); 242a4f94740f9d66b21f4bcd3a225c434aa29cfa323Elliott Hughes java_lang_RuntimeException = CacheClass(env, "java/lang/RuntimeException"); 243120f1c74a9768e958377b6c97897511b27ae58c8Ian Rogers java_lang_StackOverflowError = CacheClass(env, "java/lang/StackOverflowError"); 244dd157d732b557a854b3689faf8a24170fb47c270Ian Rogers java_lang_String = CacheClass(env, "java/lang/String"); 245848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory = CacheClass(env, "java/lang/StringFactory"); 246987ccff48fe2c0645756e1089608e4b6b7e9f7bfMathieu Chartier java_lang_System = CacheClass(env, "java/lang/System"); 247eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes java_lang_Thread = CacheClass(env, "java/lang/Thread"); 248c8ccf68b805c92674545f63e0341ba47e8d9701cAndreas Gampe java_lang_Thread__UncaughtExceptionHandler = CacheClass(env, 249c8ccf68b805c92674545f63e0341ba47e8d9701cAndreas Gampe "java/lang/Thread$UncaughtExceptionHandler"); 250af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott Hughes java_lang_ThreadGroup = CacheClass(env, "java/lang/ThreadGroup"); 251a4f94740f9d66b21f4bcd3a225c434aa29cfa323Elliott Hughes java_lang_Throwable = CacheClass(env, "java/lang/Throwable"); 252aecb5f3fd5dcd78bc3e74993acc40fed815b6b8bElliott Hughes java_nio_DirectByteBuffer = CacheClass(env, "java/nio/DirectByteBuffer"); 253e49e195c4bc2f20df0289c0bbb46f56839308ddeSebastien Hertz java_util_ArrayList = CacheClass(env, "java/util/ArrayList"); 2547ea6f79bbddd69d5db86a8656a31aaaf64ae2582Andreas Gampe java_util_Collections = CacheClass(env, "java/util/Collections"); 25513e748b28c5f2bd1e83674d2ca899ff61ae5c0a1Jeff Hao libcore_reflect_AnnotationFactory = CacheClass(env, "libcore/reflect/AnnotationFactory"); 25613e748b28c5f2bd1e83674d2ca899ff61ae5c0a1Jeff Hao libcore_reflect_AnnotationMember = CacheClass(env, "libcore/reflect/AnnotationMember"); 2577ea6f79bbddd69d5db86a8656a31aaaf64ae2582Andreas Gampe libcore_util_EmptyArray = CacheClass(env, "libcore/util/EmptyArray"); 258eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes org_apache_harmony_dalvik_ddmc_Chunk = CacheClass(env, "org/apache/harmony/dalvik/ddmc/Chunk"); 259eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes org_apache_harmony_dalvik_ddmc_DdmServer = CacheClass(env, "org/apache/harmony/dalvik/ddmc/DdmServer"); 260eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes 261b5de3bb65556950d5cce1dea3ea6d80adcc5051dMathieu Chartier dalvik_system_VMRuntime_runFinalization = CacheMethod(env, dalvik_system_VMRuntime, true, "runFinalization", "(J)V"); 262eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes com_android_dex_Dex_create = CacheMethod(env, com_android_dex_Dex, true, "create", "(Ljava/nio/ByteBuffer;)Lcom/android/dex/Dex;"); 263eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes java_lang_ClassNotFoundException_init = CacheMethod(env, java_lang_ClassNotFoundException, false, "<init>", "(Ljava/lang/String;Ljava/lang/Throwable;)V"); 264a4f94740f9d66b21f4bcd3a225c434aa29cfa323Elliott Hughes java_lang_ClassLoader_loadClass = CacheMethod(env, java_lang_ClassLoader, false, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); 2657664f5cd118b355a5fe0c7536cb48ac991ed2b62Mathieu Chartier 266eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes java_lang_Daemons_requestHeapTrim = CacheMethod(env, java_lang_Daemons, true, "requestHeapTrim", "()V"); 267eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes java_lang_Daemons_start = CacheMethod(env, java_lang_Daemons, true, "start", "()V"); 268cef50f0487929f72183623bc2a5819cf3a63bff6Mathieu Chartier java_lang_Daemons_stop = CacheMethod(env, java_lang_Daemons, true, "stop", "()V"); 269a4f94740f9d66b21f4bcd3a225c434aa29cfa323Elliott Hughes 270a4f94740f9d66b21f4bcd3a225c434aa29cfa323Elliott Hughes ScopedLocalRef<jclass> java_lang_ref_FinalizerReference(env, env->FindClass("java/lang/ref/FinalizerReference")); 271a4f94740f9d66b21f4bcd3a225c434aa29cfa323Elliott Hughes java_lang_ref_FinalizerReference_add = CacheMethod(env, java_lang_ref_FinalizerReference.get(), true, "add", "(Ljava/lang/Object;)V"); 272a4f94740f9d66b21f4bcd3a225c434aa29cfa323Elliott Hughes ScopedLocalRef<jclass> java_lang_ref_ReferenceQueue(env, env->FindClass("java/lang/ref/ReferenceQueue")); 273a4f94740f9d66b21f4bcd3a225c434aa29cfa323Elliott Hughes java_lang_ref_ReferenceQueue_add = CacheMethod(env, java_lang_ref_ReferenceQueue.get(), true, "add", "(Ljava/lang/ref/Reference;)V"); 274a4f94740f9d66b21f4bcd3a225c434aa29cfa323Elliott Hughes 275fc58af45e342ba9e18bbdf597f205a58ec731658Mathieu Chartier java_lang_reflect_Proxy_invoke = CacheMethod(env, java_lang_reflect_Proxy, true, "invoke", "(Ljava/lang/reflect/Proxy;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;"); 276eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes java_lang_Thread_init = CacheMethod(env, java_lang_Thread, false, "<init>", "(Ljava/lang/ThreadGroup;Ljava/lang/String;IZ)V"); 277af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott Hughes java_lang_Thread_run = CacheMethod(env, java_lang_Thread, false, "run", "()V"); 278c8ccf68b805c92674545f63e0341ba47e8d9701cAndreas Gampe java_lang_Thread__UncaughtExceptionHandler_uncaughtException = CacheMethod(env, java_lang_Thread__UncaughtExceptionHandler, false, "uncaughtException", "(Ljava/lang/Thread;Ljava/lang/Throwable;)V"); 279e6cd3b53e54c4e5ea817561904e98397dd903a61Piotr Jastrzebski java_lang_ThreadGroup_removeThread = CacheMethod(env, java_lang_ThreadGroup, false, "threadTerminated", "(Ljava/lang/Thread;)V"); 280b56812165dd3a2e6eb8b85c810943b3d7bd9bfc4Elliott Hughes java_nio_DirectByteBuffer_init = CacheMethod(env, java_nio_DirectByteBuffer, false, "<init>", "(JI)V"); 28113e748b28c5f2bd1e83674d2ca899ff61ae5c0a1Jeff Hao libcore_reflect_AnnotationFactory_createAnnotation = CacheMethod(env, libcore_reflect_AnnotationFactory, true, "createAnnotation", "(Ljava/lang/Class;[Llibcore/reflect/AnnotationMember;)Ljava/lang/annotation/Annotation;"); 28213e748b28c5f2bd1e83674d2ca899ff61ae5c0a1Jeff Hao libcore_reflect_AnnotationMember_init = CacheMethod(env, libcore_reflect_AnnotationMember, false, "<init>", "(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/reflect/Method;)V"); 283eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes org_apache_harmony_dalvik_ddmc_DdmServer_broadcast = CacheMethod(env, org_apache_harmony_dalvik_ddmc_DdmServer, true, "broadcast", "(I)V"); 284eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes org_apache_harmony_dalvik_ddmc_DdmServer_dispatch = CacheMethod(env, org_apache_harmony_dalvik_ddmc_DdmServer, true, "dispatch", "(I[BII)Lorg/apache/harmony/dalvik/ddmc/Chunk;"); 285eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes 286848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_String_init = CacheMethod(env, java_lang_String, false, "<init>", "()V"); 287848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_String_init_B = CacheMethod(env, java_lang_String, false, "<init>", "([B)V"); 288848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_String_init_BI = CacheMethod(env, java_lang_String, false, "<init>", "([BI)V"); 289848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_String_init_BII = CacheMethod(env, java_lang_String, false, "<init>", "([BII)V"); 290848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_String_init_BIII = CacheMethod(env, java_lang_String, false, "<init>", "([BIII)V"); 291848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_String_init_BIIString = CacheMethod(env, java_lang_String, false, "<init>", 292848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao "([BIILjava/lang/String;)V"); 293848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_String_init_BString = CacheMethod(env, java_lang_String, false, "<init>", 294848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao "([BLjava/lang/String;)V"); 295848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_String_init_BIICharset = CacheMethod(env, java_lang_String, false, "<init>", 296848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao "([BIILjava/nio/charset/Charset;)V"); 297848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_String_init_BCharset = CacheMethod(env, java_lang_String, false, "<init>", 298848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao "([BLjava/nio/charset/Charset;)V"); 299848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_String_init_C = CacheMethod(env, java_lang_String, false, "<init>", "([C)V"); 300848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_String_init_CII = CacheMethod(env, java_lang_String, false, "<init>", "([CII)V"); 301848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_String_init_IIC = CacheMethod(env, java_lang_String, false, "<init>", "(II[C)V"); 302848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_String_init_String = CacheMethod(env, java_lang_String, false, "<init>", 303848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao "(Ljava/lang/String;)V"); 304848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_String_init_StringBuffer = CacheMethod(env, java_lang_String, false, "<init>", 305848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao "(Ljava/lang/StringBuffer;)V"); 306848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_String_init_III = CacheMethod(env, java_lang_String, false, "<init>", "([III)V"); 307848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_String_init_StringBuilder = CacheMethod(env, java_lang_String, false, "<init>", 308848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao "(Ljava/lang/StringBuilder;)V"); 309848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory_newEmptyString = CacheMethod(env, java_lang_StringFactory, true, 310848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao "newEmptyString", "()Ljava/lang/String;"); 311848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory_newStringFromBytes_B = CacheMethod(env, java_lang_StringFactory, true, 312848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao "newStringFromBytes", "([B)Ljava/lang/String;"); 313848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory_newStringFromBytes_BI = CacheMethod(env, java_lang_StringFactory, true, 314848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao "newStringFromBytes", "([BI)Ljava/lang/String;"); 315848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory_newStringFromBytes_BII = CacheMethod(env, java_lang_StringFactory, true, 316848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao "newStringFromBytes", "([BII)Ljava/lang/String;"); 317848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory_newStringFromBytes_BIII = CacheMethod(env, java_lang_StringFactory, true, 318848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao "newStringFromBytes", "([BIII)Ljava/lang/String;"); 319848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory_newStringFromBytes_BIIString = CacheMethod(env, java_lang_StringFactory, 320848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao true, "newStringFromBytes", "([BIILjava/lang/String;)Ljava/lang/String;"); 321848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory_newStringFromBytes_BString = CacheMethod(env, java_lang_StringFactory, 322848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao true, "newStringFromBytes", "([BLjava/lang/String;)Ljava/lang/String;"); 323848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory_newStringFromBytes_BIICharset = CacheMethod(env, java_lang_StringFactory, 324848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao true, "newStringFromBytes", "([BIILjava/nio/charset/Charset;)Ljava/lang/String;"); 325848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory_newStringFromBytes_BCharset = CacheMethod(env, java_lang_StringFactory, 326848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao true, "newStringFromBytes", "([BLjava/nio/charset/Charset;)Ljava/lang/String;"); 327848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory_newStringFromChars_C = CacheMethod(env, java_lang_StringFactory, true, 328848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao "newStringFromChars", "([C)Ljava/lang/String;"); 329848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory_newStringFromChars_CII = CacheMethod(env, java_lang_StringFactory, true, 330848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao "newStringFromChars", "([CII)Ljava/lang/String;"); 331848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory_newStringFromChars_IIC = CacheMethod(env, java_lang_StringFactory, true, 332848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao "newStringFromChars", "(II[C)Ljava/lang/String;"); 333848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory_newStringFromString = CacheMethod(env, java_lang_StringFactory, true, 334848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao "newStringFromString", "(Ljava/lang/String;)Ljava/lang/String;"); 335848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory_newStringFromStringBuffer = CacheMethod(env, java_lang_StringFactory, 336848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao true, "newStringFromStringBuffer", "(Ljava/lang/StringBuffer;)Ljava/lang/String;"); 337848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory_newStringFromCodePoints = CacheMethod(env, java_lang_StringFactory, 338848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao true, "newStringFromCodePoints", "([III)Ljava/lang/String;"); 339848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao java_lang_StringFactory_newStringFromStringBuilder = CacheMethod(env, java_lang_StringFactory, 340848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao true, "newStringFromStringBuilder", "(Ljava/lang/StringBuilder;)Ljava/lang/String;"); 341848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao 342324b9bb2f48be39e20077c1d7da45cf3dc47fe06Andreas Gampe dalvik_system_DexFile_cookie = CacheField(env, dalvik_system_DexFile, false, "mCookie", "Ljava/lang/Object;"); 343fbc31087932a65e036a153afab3049dc5298656aMathieu Chartier dalvik_system_DexFile_fileName = CacheField(env, dalvik_system_DexFile, false, "mFileName", "Ljava/lang/String;"); 3446bcae8fa93684af581d16400f360541d39e5b5e6Mathieu Chartier dalvik_system_PathClassLoader_pathList = CacheField(env, dalvik_system_PathClassLoader, false, "pathList", "Ldalvik/system/DexPathList;"); 3456bcae8fa93684af581d16400f360541d39e5b5e6Mathieu Chartier dalvik_system_DexPathList_dexElements = CacheField(env, dalvik_system_DexPathList, false, "dexElements", "[Ldalvik/system/DexPathList$Element;"); 346c8ccf68b805c92674545f63e0341ba47e8d9701cAndreas Gampe dalvik_system_DexPathList__Element_dexFile = CacheField(env, dalvik_system_DexPathList__Element, false, "dexFile", "Ldalvik/system/DexFile;"); 347af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott Hughes java_lang_Thread_daemon = CacheField(env, java_lang_Thread, false, "daemon", "Z"); 348af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott Hughes java_lang_Thread_group = CacheField(env, java_lang_Thread, false, "group", "Ljava/lang/ThreadGroup;"); 349c5dc2ff2d1beb3ff84f93d2c7ebe07c46b76956aElliott Hughes java_lang_Thread_lock = CacheField(env, java_lang_Thread, false, "lock", "Ljava/lang/Object;"); 350af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott Hughes java_lang_Thread_name = CacheField(env, java_lang_Thread, false, "name", "Ljava/lang/String;"); 351af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott Hughes java_lang_Thread_priority = CacheField(env, java_lang_Thread, false, "priority", "I"); 352e6cd3b53e54c4e5ea817561904e98397dd903a61Piotr Jastrzebski java_lang_Thread_uncaughtHandler = CacheField(env, java_lang_Thread, false, "uncaughtExceptionHandler", "Ljava/lang/Thread$UncaughtExceptionHandler;"); 353ef7d42fca18c16fbaf103822ad16f23246e2905dIan Rogers java_lang_Thread_nativePeer = CacheField(env, java_lang_Thread, false, "nativePeer", "J"); 354d1ef4362bf799f9f5d50e5edef8433664b503051Narayan Kamath java_lang_ThreadGroup_groups = CacheField(env, java_lang_ThreadGroup, false, "groups", "[Ljava/lang/ThreadGroup;"); 355464595f53abe4370ee6f589eb472e2036e39bce7Przemyslaw Szczepaniak java_lang_ThreadGroup_ngroups = CacheField(env, java_lang_ThreadGroup, false, "ngroups", "I"); 356af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott Hughes java_lang_ThreadGroup_mainThreadGroup = CacheField(env, java_lang_ThreadGroup, true, "mainThreadGroup", "Ljava/lang/ThreadGroup;"); 357af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott Hughes java_lang_ThreadGroup_name = CacheField(env, java_lang_ThreadGroup, false, "name", "Ljava/lang/String;"); 358e49e195c4bc2f20df0289c0bbb46f56839308ddeSebastien Hertz java_lang_ThreadGroup_parent = CacheField(env, java_lang_ThreadGroup, false, "parent", "Ljava/lang/ThreadGroup;"); 359af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott Hughes java_lang_ThreadGroup_systemThreadGroup = CacheField(env, java_lang_ThreadGroup, true, "systemThreadGroup", "Ljava/lang/ThreadGroup;"); 3603437531f515d84609fa43baaec32a0d1cc0e3fe0Brian Carlstrom java_lang_Throwable_cause = CacheField(env, java_lang_Throwable, false, "cause", "Ljava/lang/Throwable;"); 3613437531f515d84609fa43baaec32a0d1cc0e3fe0Brian Carlstrom java_lang_Throwable_detailMessage = CacheField(env, java_lang_Throwable, false, "detailMessage", "Ljava/lang/String;"); 3623437531f515d84609fa43baaec32a0d1cc0e3fe0Brian Carlstrom java_lang_Throwable_stackTrace = CacheField(env, java_lang_Throwable, false, "stackTrace", "[Ljava/lang/StackTraceElement;"); 363c16a50f4837d6204c0cf6c71129492cb4b86784dPiotr Jastrzebski java_lang_Throwable_stackState = CacheField(env, java_lang_Throwable, false, "backtrace", "Ljava/lang/Object;"); 3643437531f515d84609fa43baaec32a0d1cc0e3fe0Brian Carlstrom java_lang_Throwable_suppressedExceptions = CacheField(env, java_lang_Throwable, false, "suppressedExceptions", "Ljava/util/List;"); 365e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier java_lang_reflect_AbstractMethod_artMethod = CacheField(env, java_lang_reflect_AbstractMethod, false, "artMethod", "J"); 366af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott Hughes java_lang_reflect_Proxy_h = CacheField(env, java_lang_reflect_Proxy, false, "h", "Ljava/lang/reflect/InvocationHandler;"); 367aecb5f3fd5dcd78bc3e74993acc40fed815b6b8bElliott Hughes java_nio_DirectByteBuffer_capacity = CacheField(env, java_nio_DirectByteBuffer, false, "capacity", "I"); 3688c145b99fd47dca629b815ea7d76a17b7d50f742Piotr Jastrzebski java_nio_DirectByteBuffer_effectiveDirectAddress = CacheField(env, java_nio_DirectByteBuffer, false, "address", "J"); 369d1ef4362bf799f9f5d50e5edef8433664b503051Narayan Kamath java_util_ArrayList_array = CacheField(env, java_util_ArrayList, false, "elementData", "[Ljava/lang/Object;"); 370e49e195c4bc2f20df0289c0bbb46f56839308ddeSebastien Hertz java_util_ArrayList_size = CacheField(env, java_util_ArrayList, false, "size", "I"); 3713437531f515d84609fa43baaec32a0d1cc0e3fe0Brian Carlstrom java_util_Collections_EMPTY_LIST = CacheField(env, java_util_Collections, true, "EMPTY_LIST", "Ljava/util/List;"); 3723437531f515d84609fa43baaec32a0d1cc0e3fe0Brian Carlstrom libcore_util_EmptyArray_STACK_TRACE_ELEMENT = CacheField(env, libcore_util_EmptyArray, true, "STACK_TRACE_ELEMENT", "[Ljava/lang/StackTraceElement;"); 373b30e0c644d1f15cf7f048ce733131e7ac70772aeSebastien Hertz org_apache_harmony_dalvik_ddmc_Chunk_data = CacheField(env, org_apache_harmony_dalvik_ddmc_Chunk, false, "data", "[B"); 374af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott Hughes org_apache_harmony_dalvik_ddmc_Chunk_length = CacheField(env, org_apache_harmony_dalvik_ddmc_Chunk, false, "length", "I"); 375af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott Hughes org_apache_harmony_dalvik_ddmc_Chunk_offset = CacheField(env, org_apache_harmony_dalvik_ddmc_Chunk, false, "offset", "I"); 376af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott Hughes org_apache_harmony_dalvik_ddmc_Chunk_type = CacheField(env, org_apache_harmony_dalvik_ddmc_Chunk, false, "type", "I"); 37700f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers 37800f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers java_lang_Boolean_valueOf = CachePrimitiveBoxingMethod(env, 'Z', "java/lang/Boolean"); 37900f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers java_lang_Byte_valueOf = CachePrimitiveBoxingMethod(env, 'B', "java/lang/Byte"); 38000f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers java_lang_Character_valueOf = CachePrimitiveBoxingMethod(env, 'C', "java/lang/Character"); 38100f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers java_lang_Double_valueOf = CachePrimitiveBoxingMethod(env, 'D', "java/lang/Double"); 38200f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers java_lang_Float_valueOf = CachePrimitiveBoxingMethod(env, 'F', "java/lang/Float"); 38300f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers java_lang_Integer_valueOf = CachePrimitiveBoxingMethod(env, 'I', "java/lang/Integer"); 38400f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers java_lang_Long_valueOf = CachePrimitiveBoxingMethod(env, 'J', "java/lang/Long"); 38500f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers java_lang_Short_valueOf = CachePrimitiveBoxingMethod(env, 'S', "java/lang/Short"); 386848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao 387848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao Thread::Current()->InitStringEntryPoints(); 388af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott Hughes} 389af8d15a3267343dec135cc6df1db740c0a5c7b52Elliott Hughes 390ef28b14268ed0f9db0c7bbd571aa514354a360bdIan Rogersvoid WellKnownClasses::LateInit(JNIEnv* env) { 391ef28b14268ed0f9db0c7bbd571aa514354a360bdIan Rogers ScopedLocalRef<jclass> java_lang_Runtime(env, env->FindClass("java/lang/Runtime")); 39244409d33e05cd2f73d69e0a98daa5c9e2fe38089Dmitriy Ivanov java_lang_Runtime_nativeLoad = 39344409d33e05cd2f73d69e0a98daa5c9e2fe38089Dmitriy Ivanov CacheMethod(env, java_lang_Runtime.get(), true, "nativeLoad", 394c286a7fcd8a446c086127bf03fd07f904e017336Dimitry Ivanov "(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;)" 39544409d33e05cd2f73d69e0a98daa5c9e2fe38089Dmitriy Ivanov "Ljava/lang/String;"); 396ef28b14268ed0f9db0c7bbd571aa514354a360bdIan Rogers} 397ef28b14268ed0f9db0c7bbd571aa514354a360bdIan Rogers 3982dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogersmirror::Class* WellKnownClasses::ToClass(jclass global_jclass) { 3992dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers return reinterpret_cast<mirror::Class*>(Thread::Current()->DecodeJObject(global_jclass)); 400eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes} 401eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes 402848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff HaojmethodID WellKnownClasses::StringInitToStringFactoryMethodID(jmethodID string_init) { 403848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao // TODO: Prioritize ordering. 404848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao if (string_init == java_lang_String_init) { 405848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return java_lang_StringFactory_newEmptyString; 406848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao } else if (string_init == java_lang_String_init_B) { 407848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return java_lang_StringFactory_newStringFromBytes_B; 408848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao } else if (string_init == java_lang_String_init_BI) { 409848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return java_lang_StringFactory_newStringFromBytes_BI; 410848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao } else if (string_init == java_lang_String_init_BII) { 411848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return java_lang_StringFactory_newStringFromBytes_BII; 412848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao } else if (string_init == java_lang_String_init_BIII) { 413848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return java_lang_StringFactory_newStringFromBytes_BIII; 414848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao } else if (string_init == java_lang_String_init_BIIString) { 415848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return java_lang_StringFactory_newStringFromBytes_BIIString; 416848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao } else if (string_init == java_lang_String_init_BString) { 417848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return java_lang_StringFactory_newStringFromBytes_BString; 418848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao } else if (string_init == java_lang_String_init_BIICharset) { 419848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return java_lang_StringFactory_newStringFromBytes_BIICharset; 420848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao } else if (string_init == java_lang_String_init_BCharset) { 421848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return java_lang_StringFactory_newStringFromBytes_BCharset; 422848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao } else if (string_init == java_lang_String_init_C) { 423848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return java_lang_StringFactory_newStringFromChars_C; 424848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao } else if (string_init == java_lang_String_init_CII) { 425848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return java_lang_StringFactory_newStringFromChars_CII; 426848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao } else if (string_init == java_lang_String_init_IIC) { 427848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return java_lang_StringFactory_newStringFromChars_IIC; 428848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao } else if (string_init == java_lang_String_init_String) { 429848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return java_lang_StringFactory_newStringFromString; 430848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao } else if (string_init == java_lang_String_init_StringBuffer) { 431848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return java_lang_StringFactory_newStringFromStringBuffer; 432848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao } else if (string_init == java_lang_String_init_III) { 433848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return java_lang_StringFactory_newStringFromCodePoints; 434848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao } else if (string_init == java_lang_String_init_StringBuilder) { 435848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return java_lang_StringFactory_newStringFromStringBuilder; 436848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao } 437848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao LOG(FATAL) << "Could not find StringFactory method for String.<init>"; 438848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao return nullptr; 439848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao} 440848f70a3d73833fc1bf3032a9ff6812e429661d9Jeff Hao 441eac766769e3114a078c188ea26776a81f0edb3cfElliott Hughes} // namespace art 442