template <VerifyObjectFlags kVerifyFlags,
ReadBarrierOption kReadBarrierOption> staticvoid CheckNoReferenceField(ObjPtr<mirror::Class> klass)
REQUIRES_SHARED(art::Locks::mutator_lock_) { if (!kIsDebugBuild) { return;
}
CHECK(!klass->IsClassClass<kVerifyFlags>());
CHECK((!klass->IsObjectArrayClass<kVerifyFlags, kReadBarrierOption>())); // String still has instance fields for reflection purposes but these don't exist in // actual string instances. if (!klass->IsStringClass<kVerifyFlags>()) {
size_t total_reference_instance_fields = 0;
ObjPtr<Class> super_class = klass; do {
total_reference_instance_fields +=
super_class->NumReferenceInstanceFields<kVerifyFlags>();
super_class = super_class->GetSuperClass<kVerifyFlags, kReadBarrierOption>();
} while (super_class != nullptr); // The only reference field should be the object's class.
CHECK_EQ(total_reference_instance_fields, 1u);
}
}
VisitInstanceFieldsReferences<kVerifyFlags, kReadBarrierOption>(klass, visitor); // Record with no references will return from previous if block. if ((class_flags & kClassFlagNormal) != 0) {
CheckNormalClass<kVerifyFlags>(klass);
DCHECK(klass->IsInstantiableNonArray()) << klass->PrettyDescriptor(); return;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.