< 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 >