summaryrefslogtreecommitdiff
path: root/runtime/native/java_lang_Class.cc
diff options
context:
space:
mode:
author Victor Chang <vichang@google.com> 2023-03-21 17:00:46 +0000
committer Victor Chang <vichang@google.com> 2023-03-27 08:59:07 +0000
commit4efc53d64dd5a04fcb9203bee756ae462c6da9f9 (patch)
tree2d07b8b73d81664213dec5d36acb58a99be8d171 /runtime/native/java_lang_Class.cc
parent456ea95d710b05659a87b5f348f523493a7718c6 (diff)
Set Record flag during class linking
It's needed for adding new record-specific behavior in ART. For example, fields are still immutable and un-modifiable via java.lang.reflect.Field#set*() API. See http://b/272698028 Bug: 272698028 Test: atest CtsLibcoreTestCases:RecordTest Change-Id: I6805fc4a8b8966b913eaba9f7c4dfdd1ab5886c4
Diffstat (limited to 'runtime/native/java_lang_Class.cc')
-rw-r--r--runtime/native/java_lang_Class.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/runtime/native/java_lang_Class.cc b/runtime/native/java_lang_Class.cc
index 593a454d37..7cd1dc081f 100644
--- a/runtime/native/java_lang_Class.cc
+++ b/runtime/native/java_lang_Class.cc
@@ -732,6 +732,13 @@ static jboolean Class_isAnonymousClass(JNIEnv* env, jobject javaThis) {
return class_name == nullptr;
}
+static jboolean Class_isRecord0(JNIEnv* env, jobject javaThis) {
+ ScopedFastNativeObjectAccess soa(env);
+ StackHandleScope<1> hs(soa.Self());
+ Handle<mirror::Class> klass(hs.NewHandle(DecodeClass(soa, javaThis)));
+ return klass->IsRecordClass();
+}
+
static jboolean Class_isDeclaredAnnotationPresent(JNIEnv* env, jobject javaThis,
jclass annotationType) {
ScopedFastNativeObjectAccess soa(env);
@@ -954,6 +961,7 @@ static JNINativeMethod gMethods[] = {
FAST_NATIVE_METHOD(Class, getSignatureAnnotation, "()[Ljava/lang/String;"),
FAST_NATIVE_METHOD(Class, isAnonymousClass, "()Z"),
FAST_NATIVE_METHOD(Class, isDeclaredAnnotationPresent, "(Ljava/lang/Class;)Z"),
+ FAST_NATIVE_METHOD(Class, isRecord0, "()Z"),
FAST_NATIVE_METHOD(Class, newInstance, "()Ljava/lang/Object;"),
};