< prev index next >
src/hotspot/share/oops/instanceKlass.cpp
Print this page
@@ -1121,11 +1121,20 @@
// Step 8
// Initialize classes of flattenable fields
{
for (AllFieldStream fs(this); !fs.done(); fs.next()) {
if (fs.is_flattenable()) {
- InstanceKlass* field_klass = InstanceKlass::cast(this->get_value_field_klass(fs.index()));
+ Klass* klass = this->get_value_field_klass_or_null(fs.index());
+ if (klass == NULL) {
+ klass = SystemDictionary::resolve_or_fail(fs.signature()->fundamental_name(THREAD), Handle(THREAD, class_loader()),
+ Handle(THREAD, protection_domain()), true, CHECK);
+ this->set_value_field_klass(fs.index(), InstanceKlass::cast(klass));
+ }
+ if (!klass->is_value()) {
+ THROW(vmSymbols::java_lang_IncompatibleClassChangeError());
+ }
+ InstanceKlass* field_klass = InstanceKlass::cast(klass);
field_klass->initialize(CHECK);
}
}
}
< prev index next >