@@ -92,6 +92,7 @@ pub(super) fn create_data_type_classfile_for_class(
9292 implements_interfaces : Vec < String > ,
9393 module : & oomir:: Module ,
9494 subclasses : Vec < String > ,
95+ nest_host : Option < String > ,
9596) -> jvm:: Result < Vec < u8 > > {
9697 let mut cp = ConstantPool :: default ( ) ;
9798
@@ -246,7 +247,7 @@ pub(super) fn create_data_type_classfile_for_class(
246247 }
247248
248249 // --- Add InnerClasses Attribute (for nested/member classes) ---
249- if !subclasses. is_empty ( ) {
250+ if !subclasses. is_empty ( ) || nest_host . is_some ( ) {
250251 let mut inner_classes_vec: Vec < InnerClass > = Vec :: with_capacity ( subclasses. len ( ) ) ;
251252
252253 for subclass_name in & subclasses {
@@ -283,6 +284,26 @@ pub(super) fn create_data_type_classfile_for_class(
283284 } ) ;
284285 }
285286
287+ // If this class has a nest host, add it as well
288+ // make it like [us]=class Host$[us] of class Host
289+ if let Some ( nest_host_name) = nest_host {
290+ let class_info_index = class_file. constant_pool . add_class ( class_name_jvm) ?;
291+ let outer_class_info_index = class_file. constant_pool . add_class ( & nest_host_name) ?;
292+ let name_index = class_file
293+ . constant_pool
294+ . add_utf8 ( class_name_jvm
295+ . rsplit ( '$' )
296+ . next ( )
297+ . unwrap_or ( class_name_jvm) ) ?;
298+ let access_flags = NestedClassAccessFlags :: PUBLIC | NestedClassAccessFlags :: STATIC ;
299+ inner_classes_vec. push ( InnerClass {
300+ class_info_index,
301+ outer_class_info_index,
302+ name_index,
303+ access_flags,
304+ } ) ;
305+ }
306+
286307 let inner_classes_attr_name_index = class_file. constant_pool . add_utf8 ( "InnerClasses" ) ?;
287308 class_file. attributes . push ( Attribute :: InnerClasses {
288309 name_index : inner_classes_attr_name_index,
0 commit comments