Change some well-known methods to `ArtMethod*`.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Change-Id: I8a92108f8dc8b206f239c1f1a1e35b4472bf294a
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index 8882966..bc0ac6b 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -1141,6 +1141,8 @@
WellKnownClasses::java_lang_Integer_valueOf,
WellKnownClasses::java_lang_Long_valueOf,
WellKnownClasses::java_lang_Short_valueOf,
+ // Ensure `DirectByteBuffer` class is initialized (avoid check at runtime).
+ WellKnownClasses::java_nio_DirectByteBuffer_init,
// Ensure reflection annotation classes are initialized (avoid check at runtime).
WellKnownClasses::libcore_reflect_AnnotationFactory_createAnnotation,
WellKnownClasses::libcore_reflect_AnnotationMember_init,
@@ -1152,6 +1154,8 @@
EnsureRootInitialized(this, self, method->GetDeclaringClass());
}
ArtField* static_fields_of_classes_to_initialize[] = {
+ // Ensure `VMRuntime` is initialized (avoid check at runtime).
+ WellKnownClasses::dalvik_system_VMRuntime_nonSdkApiUsageConsumer,
// Initialize empty arrays needed by `StackOverflowError`.
WellKnownClasses::java_util_Collections_EMPTY_LIST,
WellKnownClasses::libcore_util_EmptyArray_STACK_TRACE_ELEMENT,
diff --git a/runtime/hidden_api.cc b/runtime/hidden_api.cc
index de567f9..ba317c8 100644
--- a/runtime/hidden_api.cc
+++ b/runtime/hidden_api.cc
@@ -366,30 +366,35 @@
if (runtime->IsAotCompiler()) {
return;
}
- JNIEnvExt* env = Thread::Current()->GetJniEnv();
- const std::string& package_name = Runtime::Current()->GetProcessPackageName();
- ScopedLocalRef<jstring> package_str(env, env->NewStringUTF(package_name.c_str()));
- if (env->ExceptionCheck()) {
- env->ExceptionClear();
- LOG(ERROR) << "Unable to allocate string for package name which called hidden api";
- }
+
+ const std::string& package_name = runtime->GetProcessPackageName();
std::ostringstream signature_str;
Dump(signature_str);
- ScopedLocalRef<jstring> signature_jstr(env,
- env->NewStringUTF(signature_str.str().c_str()));
- if (env->ExceptionCheck()) {
- env->ExceptionClear();
+
+ ScopedObjectAccess soa(Thread::Current());
+ StackHandleScope<2u> hs(soa.Self());
+ Handle<mirror::String> package_str = hs.NewHandle(
+ mirror::String::AllocFromModifiedUtf8(soa.Self(), package_name.c_str()));
+ if (soa.Self()->IsExceptionPending()) {
+ soa.Self()->ClearException();
+ LOG(ERROR) << "Unable to allocate string for package name which called hidden api";
+ }
+ Handle<mirror::String> signature_jstr = hs.NewHandle(
+ mirror::String::AllocFromModifiedUtf8(soa.Self(), signature_str.str().c_str()));
+ if (soa.Self()->IsExceptionPending()) {
+ soa.Self()->ClearException();
LOG(ERROR) << "Unable to allocate string for hidden api method signature";
}
- env->CallStaticVoidMethod(WellKnownClasses::dalvik_system_VMRuntime,
- WellKnownClasses::dalvik_system_VMRuntime_hiddenApiUsed,
- sampled_value,
- package_str.get(),
- signature_jstr.get(),
- static_cast<jint>(access_method),
- access_denied);
- if (env->ExceptionCheck()) {
- env->ExceptionClear();
+ WellKnownClasses::dalvik_system_VMRuntime_hiddenApiUsed
+ ->InvokeStatic<'V', 'I', 'L', 'L', 'I', 'Z'>(
+ soa.Self(),
+ static_cast<jint>(sampled_value),
+ package_str.Get(),
+ signature_jstr.Get(),
+ static_cast<jint>(access_method),
+ static_cast<uint8_t>(access_denied ? 1u : 0u));
+ if (soa.Self()->IsExceptionPending()) {
+ soa.Self()->ClearException();
LOG(ERROR) << "Unable to report hidden api usage";
}
#else
@@ -408,11 +413,12 @@
Runtime* runtime = Runtime::Current();
if (!runtime->IsAotCompiler()) {
ScopedObjectAccess soa(Thread::Current());
+ StackHandleScope<2u> hs(soa.Self());
ArtField* consumer_field = WellKnownClasses::dalvik_system_VMRuntime_nonSdkApiUsageConsumer;
- ScopedLocalRef<jobject> consumer_object(soa.Env(),
- soa.AddLocalReference<jobject>(
- consumer_field->GetObject(consumer_field->GetDeclaringClass())));
+ DCHECK(consumer_field->GetDeclaringClass()->IsInitialized());
+ Handle<mirror::Object> consumer_object =
+ hs.NewHandle(consumer_field->GetObject(consumer_field->GetDeclaringClass()));
// If the consumer is non-null, we call back to it to let it know that we
// have encountered an API that's in one of our lists.
@@ -420,14 +426,16 @@
std::ostringstream member_signature_str;
Dump(member_signature_str);
- ScopedLocalRef<jobject> signature_str(
- soa.Env(),
- soa.Env()->NewStringUTF(member_signature_str.str().c_str()));
+ Handle<mirror::String> signature_str = hs.NewHandle(
+ mirror::String::AllocFromModifiedUtf8(soa.Self(), member_signature_str.str().c_str()));
+ // FIXME: Handle OOME. For now, crash immediatelly (do not continue with a pending exception).
+ CHECK(signature_str != nullptr);
// Call through to Consumer.accept(String memberSignature);
- soa.Env()->CallVoidMethod(consumer_object.get(),
- WellKnownClasses::java_util_function_Consumer_accept,
- signature_str.get());
+ ArtMethod* accept_method = consumer_object->GetClass()->FindVirtualMethodForInterface(
+ WellKnownClasses::java_util_function_Consumer_accept, kRuntimePointerSize);
+ accept_method->InvokeInstance<'V', 'L'>(
+ soa.Self(), consumer_object.Get(), signature_str.Get());
}
}
}
diff --git a/runtime/jni/jni_internal.cc b/runtime/jni/jni_internal.cc
index 33b6e04..4d0b7aa 100644
--- a/runtime/jni/jni_internal.cc
+++ b/runtime/jni/jni_internal.cc
@@ -2776,10 +2776,18 @@
jlong address_arg = reinterpret_cast<jlong>(address);
jint capacity_arg = static_cast<jint>(capacity);
- jobject result = env->NewObject(WellKnownClasses::java_nio_DirectByteBuffer,
- WellKnownClasses::java_nio_DirectByteBuffer_init,
- address_arg, capacity_arg);
- return static_cast<JNIEnvExt*>(env)->self_->IsExceptionPending() ? nullptr : result;
+ ScopedObjectAccess soa(env);
+ DCHECK(WellKnownClasses::java_nio_DirectByteBuffer_init->GetDeclaringClass()->IsInitialized());
+ Thread* self = soa.Self();
+ StackHandleScope<1u> hs(self);
+ Handle<mirror::Object> result = hs.NewHandle(
+ WellKnownClasses::java_nio_DirectByteBuffer_init->GetDeclaringClass()->AllocObject(self));
+ DCHECK_EQ(result == nullptr, self->IsExceptionPending());
+ if (result != nullptr) {
+ WellKnownClasses::java_nio_DirectByteBuffer_init->InvokeInstance<'V', 'J', 'I'>(
+ self, result.Get(), address_arg, capacity_arg);
+ }
+ return self->IsExceptionPending() ? nullptr : soa.AddLocalReference<jobject>(result.Get());
}
static void* GetDirectBufferAddress(JNIEnv* env, jobject java_buffer) {
@@ -2790,18 +2798,14 @@
ScopedObjectAccess soa(env);
ObjPtr<mirror::Object> buffer = soa.Decode<mirror::Object>(java_buffer);
- ObjPtr<mirror::Class> java_nio_Buffer =
- soa.Decode<mirror::Class>(WellKnownClasses::java_nio_Buffer);
- DCHECK(java_nio_Buffer != nullptr);
// Return null if |java_buffer| is not a java.nio.Buffer instance.
- if (!buffer->InstanceOf(java_nio_Buffer)) {
+ if (!buffer->InstanceOf(WellKnownClasses::java_nio_Buffer_address->GetDeclaringClass())) {
return nullptr;
}
// Buffer.address is non-null when the |java_buffer| is direct.
- return reinterpret_cast<void*>(
- WellKnownClasses::java_nio_Buffer_address->GetLong(buffer));
+ return reinterpret_cast<void*>(WellKnownClasses::java_nio_Buffer_address->GetLong(buffer));
}
static jlong GetDirectBufferCapacity(JNIEnv* env, jobject java_buffer) {
@@ -2810,13 +2814,9 @@
}
ScopedObjectAccess soa(env);
- StackHandleScope<2u> hs(soa.Self());
+ StackHandleScope<1u> hs(soa.Self());
Handle<mirror::Object> buffer = hs.NewHandle(soa.Decode<mirror::Object>(java_buffer));
- Handle<mirror::Class> java_nio_Buffer =
- hs.NewHandle(soa.Decode<mirror::Class>(WellKnownClasses::java_nio_Buffer));
- DCHECK(java_nio_Buffer != nullptr);
-
- if (!buffer->InstanceOf(java_nio_Buffer.Get())) {
+ if (!buffer->InstanceOf(WellKnownClasses::java_nio_Buffer_capacity->GetDeclaringClass())) {
return -1;
}
@@ -2827,9 +2827,10 @@
//
// NB GetDirectBufferAddress() does not need to call Buffer.isDirect() since it is only
// able return a valid address if the Buffer address field is not-null.
- jboolean direct = env->CallBooleanMethod(java_buffer,
- WellKnownClasses::java_nio_Buffer_isDirect);
- if (!direct) {
+ ArtMethod* is_direct_method = buffer->GetClass()->FindVirtualMethodForVirtual(
+ WellKnownClasses::java_nio_Buffer_isDirect, kRuntimePointerSize);
+ uint8_t direct = is_direct_method->InvokeInstance<'Z'>(soa.Self(), buffer.Get());
+ if (direct == 0u) {
return -1;
}
diff --git a/runtime/runtime_callbacks_test.cc b/runtime/runtime_callbacks_test.cc
index 40194cb..b345641 100644
--- a/runtime/runtime_callbacks_test.cc
+++ b/runtime/runtime_callbacks_test.cc
@@ -516,11 +516,11 @@
{
ScopedObjectAccess soa(self);
cb_.SetInterestingObject(
- soa.Decode<mirror::Class>(WellKnownClasses::java_util_Collections));
+ WellKnownClasses::java_util_Collections_EMPTY_LIST->GetDeclaringClass());
Monitor::Wait(
self,
// Just a random class
- soa.Decode<mirror::Class>(WellKnownClasses::java_util_Collections),
+ WellKnownClasses::java_util_Collections_EMPTY_LIST->GetDeclaringClass(),
/*ms=*/0,
/*ns=*/0,
/*interruptShouldThrow=*/false,
diff --git a/runtime/well_known_classes.cc b/runtime/well_known_classes.cc
index 3008b59..4f2b2ac 100644
--- a/runtime/well_known_classes.cc
+++ b/runtime/well_known_classes.cc
@@ -56,7 +56,6 @@
jclass WellKnownClasses::dalvik_system_EmulatedStackFrame;
jclass WellKnownClasses::dalvik_system_InMemoryDexClassLoader;
jclass WellKnownClasses::dalvik_system_PathClassLoader;
-jclass WellKnownClasses::dalvik_system_VMRuntime;
jclass WellKnownClasses::java_lang_annotation_Annotation__array;
jclass WellKnownClasses::java_lang_BootClassLoader;
jclass WellKnownClasses::java_lang_ClassLoader;
@@ -80,15 +79,10 @@
jclass WellKnownClasses::java_lang_ThreadGroup;
jclass WellKnownClasses::java_lang_Throwable;
jclass WellKnownClasses::java_lang_Void;
-jclass WellKnownClasses::java_nio_Buffer;
-jclass WellKnownClasses::java_nio_ByteBuffer;
-jclass WellKnownClasses::java_nio_DirectByteBuffer;
-jclass WellKnownClasses::java_util_Collections;
-jclass WellKnownClasses::java_util_function_Consumer;
jclass WellKnownClasses::libcore_reflect_AnnotationMember__array;
jmethodID WellKnownClasses::dalvik_system_BaseDexClassLoader_getLdLibraryPath;
-jmethodID WellKnownClasses::dalvik_system_VMRuntime_hiddenApiUsed;
+ArtMethod* WellKnownClasses::dalvik_system_VMRuntime_hiddenApiUsed;
ArtMethod* WellKnownClasses::java_lang_Boolean_valueOf;
ArtMethod* WellKnownClasses::java_lang_Byte_valueOf;
ArtMethod* WellKnownClasses::java_lang_Character_valueOf;
@@ -121,9 +115,9 @@
jmethodID WellKnownClasses::java_lang_Thread_run;
jmethodID WellKnownClasses::java_lang_ThreadGroup_add;
jmethodID WellKnownClasses::java_lang_ThreadGroup_removeThread;
-jmethodID WellKnownClasses::java_nio_Buffer_isDirect;
-jmethodID WellKnownClasses::java_nio_DirectByteBuffer_init;
-jmethodID WellKnownClasses::java_util_function_Consumer_accept;
+ArtMethod* WellKnownClasses::java_nio_Buffer_isDirect;
+ArtMethod* WellKnownClasses::java_nio_DirectByteBuffer_init;
+ArtMethod* WellKnownClasses::java_util_function_Consumer_accept;
ArtMethod* WellKnownClasses::libcore_reflect_AnnotationFactory_createAnnotation;
ArtMethod* WellKnownClasses::libcore_reflect_AnnotationMember_init;
ArtMethod* WellKnownClasses::org_apache_harmony_dalvik_ddmc_DdmServer_broadcast;
@@ -245,9 +239,9 @@
const char* name,
const char* signature,
PointerSize pointer_size) REQUIRES_SHARED(Locks::mutator_lock_) {
- // There are no well known interface methods.
- DCHECK(!klass->IsInterface());
- ArtMethod* method = klass->FindClassMethod(name, signature, pointer_size);
+ ArtMethod* method = klass->IsInterface()
+ ? klass->FindInterfaceMethod(name, signature, pointer_size)
+ : klass->FindClassMethod(name, signature, pointer_size);
if (UNLIKELY(method == nullptr) || UNLIKELY(is_static != method->IsStatic())) {
std::ostringstream os;
klass->DumpClass(os, mirror::Class::kDumpClassFullDetail);
@@ -377,7 +371,6 @@
dalvik_system_EmulatedStackFrame = CacheClass(env, "dalvik/system/EmulatedStackFrame");
dalvik_system_InMemoryDexClassLoader = CacheClass(env, "dalvik/system/InMemoryDexClassLoader");
dalvik_system_PathClassLoader = CacheClass(env, "dalvik/system/PathClassLoader");
- dalvik_system_VMRuntime = CacheClass(env, "dalvik/system/VMRuntime");
java_lang_annotation_Annotation__array = CacheClass(env, "[Ljava/lang/annotation/Annotation;");
java_lang_BootClassLoader = CacheClass(env, "java/lang/BootClassLoader");
@@ -402,11 +395,6 @@
java_lang_ThreadGroup = CacheClass(env, "java/lang/ThreadGroup");
java_lang_Throwable = CacheClass(env, "java/lang/Throwable");
java_lang_Void = CacheClass(env, "java/lang/Void");
- java_nio_Buffer = CacheClass(env, "java/nio/Buffer");
- java_nio_ByteBuffer = CacheClass(env, "java/nio/ByteBuffer");
- java_nio_DirectByteBuffer = CacheClass(env, "java/nio/DirectByteBuffer");
- java_util_Collections = CacheClass(env, "java/util/Collections");
- java_util_function_Consumer = CacheClass(env, "java/util/function/Consumer");
libcore_reflect_AnnotationMember__array = CacheClass(env, "[Llibcore/reflect/AnnotationMember;");
InitFieldsAndMethodsOnly(env);
@@ -438,7 +426,6 @@
CachePrimitiveBoxingMethod(class_linker, self, 'S', "Ljava/lang/Short;");
dalvik_system_BaseDexClassLoader_getLdLibraryPath = CacheMethod(env, dalvik_system_BaseDexClassLoader, false, "getLdLibraryPath", "()Ljava/lang/String;");
- dalvik_system_VMRuntime_hiddenApiUsed = CacheMethod(env, dalvik_system_VMRuntime, true, "hiddenApiUsed", "(ILjava/lang/String;Ljava/lang/String;IZ)V");
java_lang_ClassNotFoundException_init = CacheMethod(env, java_lang_ClassNotFoundException, false, "<init>", "(Ljava/lang/String;Ljava/lang/Throwable;)V");
java_lang_ClassLoader_loadClass = CacheMethod(env, java_lang_ClassLoader, false, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;");
@@ -462,13 +449,22 @@
java_lang_Thread_run = CacheMethod(env, java_lang_Thread, false, "run", "()V");
java_lang_ThreadGroup_add = CacheMethod(env, java_lang_ThreadGroup, false, "add", "(Ljava/lang/Thread;)V");
java_lang_ThreadGroup_removeThread = CacheMethod(env, java_lang_ThreadGroup, false, "threadTerminated", "(Ljava/lang/Thread;)V");
- java_nio_Buffer_isDirect = CacheMethod(env, java_nio_Buffer, false, "isDirect", "()Z");
- java_nio_DirectByteBuffer_init = CacheMethod(env, java_nio_DirectByteBuffer, false, "<init>", "(JI)V");
- java_util_function_Consumer_accept = CacheMethod(env, java_util_function_Consumer, false, "accept", "(Ljava/lang/Object;)V");
- StackHandleScope<6u> hs(self);
+ StackHandleScope<12u> hs(self);
+ Handle<mirror::Class> d_s_vmr =
+ hs.NewHandle(FindSystemClass(class_linker, self, "Ldalvik/system/VMRuntime;"));
Handle<mirror::Class> j_i_fd =
hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/io/FileDescriptor;"));
+ Handle<mirror::Class> j_n_b =
+ hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/nio/Buffer;"));
+ Handle<mirror::Class> j_n_bb =
+ hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/nio/ByteBuffer;"));
+ Handle<mirror::Class> j_n_dbb =
+ hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/nio/DirectByteBuffer;"));
+ Handle<mirror::Class> j_u_c =
+ hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/util/Collections;"));
+ Handle<mirror::Class> j_u_f_c =
+ hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/util/function/Consumer;"));
Handle<mirror::Class> l_r_af =
hs.NewHandle(FindSystemClass(class_linker, self, "Llibcore/reflect/AnnotationFactory;"));
Handle<mirror::Class> l_r_am =
@@ -483,6 +479,13 @@
ScopedAssertNoThreadSuspension sants(__FUNCTION__);
PointerSize pointer_size = class_linker->GetImagePointerSize();
+ dalvik_system_VMRuntime_hiddenApiUsed = CacheMethod(
+ d_s_vmr.Get(),
+ /*is_static=*/ true,
+ "hiddenApiUsed",
+ "(ILjava/lang/String;Ljava/lang/String;IZ)V",
+ pointer_size);
+
ObjPtr<mirror::Class> j_l_Double = java_lang_Double_valueOf->GetDeclaringClass();
java_lang_Double_doubleToRawLongBits =
CacheMethod(j_l_Double, /*is_static=*/ true, "doubleToRawLongBits", "(D)J", pointer_size);
@@ -490,6 +493,14 @@
java_lang_Float_floatToRawIntBits =
CacheMethod(j_l_Float, /*is_static=*/ true, "floatToRawIntBits", "(F)I", pointer_size);
+ java_nio_Buffer_isDirect =
+ CacheMethod(j_n_b.Get(), /*is_static=*/ false, "isDirect", "()Z", pointer_size);
+ java_nio_DirectByteBuffer_init =
+ CacheMethod(j_n_dbb.Get(), /*is_static=*/ false, "<init>", "(JI)V", pointer_size);
+
+ java_util_function_Consumer_accept = CacheMethod(
+ j_u_f_c.Get(), /*is_static=*/ false, "accept", "(Ljava/lang/Object;)V", pointer_size);
+
libcore_reflect_AnnotationFactory_createAnnotation = CacheMethod(
l_r_af.Get(),
/*is_static=*/ true,
@@ -505,12 +516,12 @@
org_apache_harmony_dalvik_ddmc_DdmServer_broadcast =
CacheMethod(o_a_h_d_d_ds.Get(), /*is_static=*/ true, "broadcast", "(I)V", pointer_size);
- org_apache_harmony_dalvik_ddmc_DdmServer_dispatch =
- CacheMethod(o_a_h_d_d_ds.Get(),
- /*is_static=*/ true,
- "dispatch",
- "(I[BII)Lorg/apache/harmony/dalvik/ddmc/Chunk;",
- pointer_size);
+ org_apache_harmony_dalvik_ddmc_DdmServer_dispatch = CacheMethod(
+ o_a_h_d_d_ds.Get(),
+ /*is_static=*/ true,
+ "dispatch",
+ "(I[BII)Lorg/apache/harmony/dalvik/ddmc/Chunk;",
+ pointer_size);
ObjPtr<mirror::Class> d_s_bdcl = soa.Decode<mirror::Class>(dalvik_system_BaseDexClassLoader);
dalvik_system_BaseDexClassLoader_pathList = CacheField(
@@ -531,9 +542,11 @@
dalvik_system_DexPathList__Element_dexFile = CacheField(
d_s_dpl_e, /*is_static=*/ false, "dexFile", "Ldalvik/system/DexFile;");
- ObjPtr<mirror::Class> d_s_vmr = soa.Decode<mirror::Class>(dalvik_system_VMRuntime);
dalvik_system_VMRuntime_nonSdkApiUsageConsumer = CacheField(
- d_s_vmr, /*is_static=*/ true, "nonSdkApiUsageConsumer", "Ljava/util/function/Consumer;");
+ d_s_vmr.Get(),
+ /*is_static=*/ true,
+ "nonSdkApiUsageConsumer",
+ "Ljava/util/function/Consumer;");
java_io_FileDescriptor_descriptor = CacheField(
j_i_fd.Get(), /*is_static=*/ false, "descriptor", "I");
@@ -584,22 +597,20 @@
java_lang_Throwable_suppressedExceptions = CacheField(
j_l_Throwable, /*is_static=*/ false, "suppressedExceptions", "Ljava/util/List;");
- ObjPtr<mirror::Class> j_n_b = soa.Decode<mirror::Class>(java_nio_Buffer);
- java_nio_Buffer_address = CacheField(j_n_b, /*is_static=*/ false, "address", "J");
- java_nio_Buffer_capacity = CacheField(j_n_b, /*is_static=*/ false, "capacity", "I");
+ java_nio_Buffer_address = CacheField(j_n_b.Get(), /*is_static=*/ false, "address", "J");
+ java_nio_Buffer_capacity = CacheField(j_n_b.Get(), /*is_static=*/ false, "capacity", "I");
java_nio_Buffer_elementSizeShift =
- CacheField(j_n_b, /*is_static=*/ false, "_elementSizeShift", "I");
- java_nio_Buffer_limit = CacheField(j_n_b, /*is_static=*/ false, "limit", "I");
- java_nio_Buffer_position = CacheField(j_n_b, /*is_static=*/ false, "position", "I");
+ CacheField(j_n_b.Get(), /*is_static=*/ false, "_elementSizeShift", "I");
+ java_nio_Buffer_limit = CacheField(j_n_b.Get(), /*is_static=*/ false, "limit", "I");
+ java_nio_Buffer_position = CacheField(j_n_b.Get(), /*is_static=*/ false, "position", "I");
- ObjPtr<mirror::Class> j_n_bb = soa.Decode<mirror::Class>(java_nio_ByteBuffer);
- java_nio_ByteBuffer_hb = CacheField(j_n_bb, /*is_static=*/ false, "hb", "[B");
- java_nio_ByteBuffer_isReadOnly = CacheField(j_n_bb, /*is_static=*/ false, "isReadOnly", "Z");
- java_nio_ByteBuffer_offset = CacheField(j_n_bb, /*is_static=*/ false, "offset", "I");
+ java_nio_ByteBuffer_hb = CacheField(j_n_bb.Get(), /*is_static=*/ false, "hb", "[B");
+ java_nio_ByteBuffer_isReadOnly =
+ CacheField(j_n_bb.Get(), /*is_static=*/ false, "isReadOnly", "Z");
+ java_nio_ByteBuffer_offset = CacheField(j_n_bb.Get(), /*is_static=*/ false, "offset", "I");
- ObjPtr<mirror::Class> j_u_c = soa.Decode<mirror::Class>(java_util_Collections);
java_util_Collections_EMPTY_LIST =
- CacheField(j_u_c, /*is_static=*/ true, "EMPTY_LIST", "Ljava/util/List;");
+ CacheField(j_u_c.Get(), /*is_static=*/ true, "EMPTY_LIST", "Ljava/util/List;");
libcore_util_EmptyArray_STACK_TRACE_ELEMENT = CacheField(
l_u_ea.Get(), /*is_static=*/ true, "STACK_TRACE_ELEMENT", "[Ljava/lang/StackTraceElement;");
@@ -655,7 +666,6 @@
dalvik_system_DexPathList__Element = nullptr;
dalvik_system_EmulatedStackFrame = nullptr;
dalvik_system_PathClassLoader = nullptr;
- dalvik_system_VMRuntime = nullptr;
java_lang_annotation_Annotation__array = nullptr;
java_lang_BootClassLoader = nullptr;
java_lang_ClassLoader = nullptr;
@@ -679,11 +689,6 @@
java_lang_ThreadGroup = nullptr;
java_lang_Throwable = nullptr;
java_lang_Void = nullptr;
- java_nio_Buffer = nullptr;
- java_nio_ByteBuffer = nullptr;
- java_nio_DirectByteBuffer = nullptr;
- java_util_Collections = nullptr;
- java_util_function_Consumer = nullptr;
libcore_reflect_AnnotationMember__array = nullptr;
dalvik_system_BaseDexClassLoader_getLdLibraryPath = nullptr;
diff --git a/runtime/well_known_classes.h b/runtime/well_known_classes.h
index ef8997c..14962a8 100644
--- a/runtime/well_known_classes.h
+++ b/runtime/well_known_classes.h
@@ -68,7 +68,6 @@
static jclass dalvik_system_EmulatedStackFrame;
static jclass dalvik_system_InMemoryDexClassLoader;
static jclass dalvik_system_PathClassLoader;
- static jclass dalvik_system_VMRuntime;
static jclass java_lang_annotation_Annotation__array;
static jclass java_lang_BootClassLoader;
static jclass java_lang_ClassLoader;
@@ -92,15 +91,10 @@
static jclass java_lang_ThreadGroup;
static jclass java_lang_Throwable;
static jclass java_lang_Void;
- static jclass java_nio_Buffer;
- static jclass java_nio_ByteBuffer;
- static jclass java_nio_DirectByteBuffer;
- static jclass java_util_Collections;
- static jclass java_util_function_Consumer;
static jclass libcore_reflect_AnnotationMember__array;
static jmethodID dalvik_system_BaseDexClassLoader_getLdLibraryPath;
- static jmethodID dalvik_system_VMRuntime_hiddenApiUsed;
+ static ArtMethod* dalvik_system_VMRuntime_hiddenApiUsed;
static ArtMethod* java_lang_Boolean_valueOf;
static ArtMethod* java_lang_Byte_valueOf;
static ArtMethod* java_lang_Character_valueOf;
@@ -133,9 +127,9 @@
static jmethodID java_lang_Thread_run;
static jmethodID java_lang_ThreadGroup_add;
static jmethodID java_lang_ThreadGroup_removeThread;
- static jmethodID java_nio_Buffer_isDirect;
- static jmethodID java_nio_DirectByteBuffer_init;
- static jmethodID java_util_function_Consumer_accept;
+ static ArtMethod* java_nio_Buffer_isDirect;
+ static ArtMethod* java_nio_DirectByteBuffer_init;
+ static ArtMethod* java_util_function_Consumer_accept;
static ArtMethod* libcore_reflect_AnnotationFactory_createAnnotation;
static ArtMethod* libcore_reflect_AnnotationMember_init;
static ArtMethod* org_apache_harmony_dalvik_ddmc_DdmServer_broadcast;