Remove some unnecessary items from WellKnownClasses.
Replace a few uses with alternatives, namely
mirror::{Constructor,Method,Field}::StaticClass().
Alternatively, we could use class roots in the ClassLinker.
And clear dalvik_system_VMRuntime_nonSdkApiUsageConsumer
in WellKnownClasses::Clear().
Test: testrunner.py --host
Bug: 74943277
Change-Id: I7561db76cd62d376c22efd4386dffd83ec74aa66
diff --git a/runtime/check_jni.cc b/runtime/check_jni.cc
index 900ce0e..c625a97 100644
--- a/runtime/check_jni.cc
+++ b/runtime/check_jni.cc
@@ -37,6 +37,8 @@
#include "java_vm_ext.h"
#include "jni_internal.h"
#include "mirror/class-inl.h"
+#include "mirror/field.h"
+#include "mirror/method.h"
#include "mirror/object-inl.h"
#include "mirror/object_array-inl.h"
#include "mirror/string-inl.h"
@@ -599,9 +601,8 @@
AbortF("expected non-null method");
return false;
}
- mirror::Class* c = method->GetClass();
- if (soa.Decode<mirror::Class>(WellKnownClasses::java_lang_reflect_Method) != c &&
- soa.Decode<mirror::Class>(WellKnownClasses::java_lang_reflect_Constructor) != c) {
+ ObjPtr<mirror::Class> c = method->GetClass();
+ if (mirror::Method::StaticClass() != c && mirror::Constructor::StaticClass() != c) {
AbortF("expected java.lang.reflect.Method or "
"java.lang.reflect.Constructor but got object of type %s: %p",
method->PrettyTypeOf().c_str(), jmethod);
@@ -630,8 +631,8 @@
AbortF("expected non-null java.lang.reflect.Field");
return false;
}
- mirror::Class* c = field->GetClass();
- if (soa.Decode<mirror::Class>(WellKnownClasses::java_lang_reflect_Field) != c) {
+ ObjPtr<mirror::Class> c = field->GetClass();
+ if (mirror::Field::StaticClass() != c) {
AbortF("expected java.lang.reflect.Field but got object of type %s: %p",
field->PrettyTypeOf().c_str(), jfield);
return false;
diff --git a/runtime/native/java_lang_Class.cc b/runtime/native/java_lang_Class.cc
index a8b203b..82300fe 100644
--- a/runtime/native/java_lang_Class.cc
+++ b/runtime/native/java_lang_Class.cc
@@ -683,8 +683,7 @@
}
ObjPtr<mirror::Object> method = annotations::GetEnclosingMethod(klass);
if (method != nullptr) {
- if (soa.Decode<mirror::Class>(WellKnownClasses::java_lang_reflect_Constructor) ==
- method->GetClass()) {
+ if (mirror::Constructor::StaticClass() == method->GetClass()) {
return soa.AddLocalReference<jobject>(method);
}
}
@@ -700,8 +699,7 @@
}
ObjPtr<mirror::Object> method = annotations::GetEnclosingMethod(klass);
if (method != nullptr) {
- if (soa.Decode<mirror::Class>(WellKnownClasses::java_lang_reflect_Method) ==
- method->GetClass()) {
+ if (mirror::Method::StaticClass() == method->GetClass()) {
return soa.AddLocalReference<jobject>(method);
}
}
diff --git a/runtime/well_known_classes.cc b/runtime/well_known_classes.cc
index 742e713..f5d112c 100644
--- a/runtime/well_known_classes.cc
+++ b/runtime/well_known_classes.cc
@@ -58,10 +58,6 @@
jclass WellKnownClasses::java_lang_NoClassDefFoundError;
jclass WellKnownClasses::java_lang_Object;
jclass WellKnownClasses::java_lang_OutOfMemoryError;
-jclass WellKnownClasses::java_lang_reflect_Constructor;
-jclass WellKnownClasses::java_lang_reflect_Executable;
-jclass WellKnownClasses::java_lang_reflect_Field;
-jclass WellKnownClasses::java_lang_reflect_Method;
jclass WellKnownClasses::java_lang_reflect_Parameter;
jclass WellKnownClasses::java_lang_reflect_Parameter__array;
jclass WellKnownClasses::java_lang_reflect_Proxy;
@@ -145,7 +141,6 @@
jfieldID WellKnownClasses::java_lang_Throwable_stackTrace;
jfieldID WellKnownClasses::java_lang_Throwable_stackState;
jfieldID WellKnownClasses::java_lang_Throwable_suppressedExceptions;
-jfieldID WellKnownClasses::java_lang_reflect_Executable_artMethod;
jfieldID WellKnownClasses::java_lang_reflect_Proxy_h;
jfieldID WellKnownClasses::java_nio_ByteBuffer_address;
jfieldID WellKnownClasses::java_nio_ByteBuffer_hb;
@@ -333,10 +328,6 @@
java_lang_invoke_MethodHandle = CacheClass(env, "java/lang/invoke/MethodHandle");
java_lang_invoke_VarHandle = CacheClass(env, "java/lang/invoke/VarHandle");
java_lang_NoClassDefFoundError = CacheClass(env, "java/lang/NoClassDefFoundError");
- java_lang_reflect_Constructor = CacheClass(env, "java/lang/reflect/Constructor");
- java_lang_reflect_Executable = CacheClass(env, "java/lang/reflect/Executable");
- java_lang_reflect_Field = CacheClass(env, "java/lang/reflect/Field");
- java_lang_reflect_Method = CacheClass(env, "java/lang/reflect/Method");
java_lang_reflect_Parameter = CacheClass(env, "java/lang/reflect/Parameter");
java_lang_reflect_Parameter__array = CacheClass(env, "[Ljava/lang/reflect/Parameter;");
java_lang_reflect_Proxy = CacheClass(env, "java/lang/reflect/Proxy");
@@ -412,7 +403,6 @@
java_lang_Throwable_stackTrace = CacheField(env, java_lang_Throwable, false, "stackTrace", "[Ljava/lang/StackTraceElement;");
java_lang_Throwable_stackState = CacheField(env, java_lang_Throwable, false, "backtrace", "Ljava/lang/Object;");
java_lang_Throwable_suppressedExceptions = CacheField(env, java_lang_Throwable, false, "suppressedExceptions", "Ljava/util/List;");
- java_lang_reflect_Executable_artMethod = CacheField(env, java_lang_reflect_Executable, false, "artMethod", "J");
java_nio_ByteBuffer_address = CacheField(env, java_nio_ByteBuffer, false, "address", "J");
java_nio_ByteBuffer_hb = CacheField(env, java_nio_ByteBuffer, false, "hb", "[B");
java_nio_ByteBuffer_isReadOnly = CacheField(env, java_nio_ByteBuffer, false, "isReadOnly", "Z");
@@ -484,10 +474,6 @@
java_lang_NoClassDefFoundError = nullptr;
java_lang_Object = nullptr;
java_lang_OutOfMemoryError = nullptr;
- java_lang_reflect_Constructor = nullptr;
- java_lang_reflect_Executable = nullptr;
- java_lang_reflect_Field = nullptr;
- java_lang_reflect_Method = nullptr;
java_lang_reflect_Parameter = nullptr;
java_lang_reflect_Parameter__array = nullptr;
java_lang_reflect_Proxy = nullptr;
@@ -551,7 +537,7 @@
dalvik_system_DexFile_fileName = nullptr;
dalvik_system_DexPathList_dexElements = nullptr;
dalvik_system_DexPathList__Element_dexFile = nullptr;
- java_lang_reflect_Executable_artMethod = nullptr;
+ dalvik_system_VMRuntime_nonSdkApiUsageConsumer = nullptr;
java_lang_reflect_Proxy_h = nullptr;
java_lang_Thread_daemon = nullptr;
java_lang_Thread_group = nullptr;
diff --git a/runtime/well_known_classes.h b/runtime/well_known_classes.h
index 7b1a294..25c07b2 100644
--- a/runtime/well_known_classes.h
+++ b/runtime/well_known_classes.h
@@ -68,10 +68,6 @@
static jclass java_lang_NoClassDefFoundError;
static jclass java_lang_Object;
static jclass java_lang_OutOfMemoryError;
- static jclass java_lang_reflect_Constructor;
- static jclass java_lang_reflect_Executable;
- static jclass java_lang_reflect_Field;
- static jclass java_lang_reflect_Method;
static jclass java_lang_reflect_Parameter;
static jclass java_lang_reflect_Parameter__array;
static jclass java_lang_reflect_Proxy;
@@ -138,7 +134,6 @@
static jfieldID dalvik_system_DexPathList_dexElements;
static jfieldID dalvik_system_DexPathList__Element_dexFile;
static jfieldID dalvik_system_VMRuntime_nonSdkApiUsageConsumer;
- static jfieldID java_lang_reflect_Executable_artMethod;
static jfieldID java_lang_reflect_Proxy_h;
static jfieldID java_lang_Thread_daemon;
static jfieldID java_lang_Thread_group;