@@ -275,8 +275,9 @@ static func _generate_enum(cls_name: StringName, enum_name: StringName) -> Strin
275275 common_prefix = constant_name
276276 else :
277277 common_prefix = _get_common_prefix (common_prefix , constant_name )
278- # Handle case where one of the constants is present in all constant names:
279- # remove last word from prefix. Example: FLAG_PROCESS_THREAD_MESSAGES
278+ # Handle special case where one of the constants is present in all constant
279+ # names: remove last word from prefix.
280+ # Example case: Node.ProcessThreadMessages and FLAG_PROCESS_THREAD_MESSAGES
280281 if common_prefix in ClassDB .class_get_enum_constants (cls_name , enum_name , true ):
281282 common_prefix = common_prefix .rsplit ("_" , false , 1 )[0 ]
282283
@@ -526,7 +527,7 @@ static func _get_property_type(property: Dictionary) -> String:
526527 return "Godot.Rid"
527528 TYPE_OBJECT :
528529 if property ["class_name" ] and property ["class_name" ] != "Object" :
529- return property ["class_name" ]
530+ return _get_class_from_class_name ( property ["class_name" ])
530531 else :
531532 return "GodotObject"
532533 TYPE_ARRAY :
@@ -678,3 +679,19 @@ static func _get_common_prefix(s1: String, s2: String) -> String:
678679 if s1 [i ] != s2 [i ]:
679680 return s1 .substr (0 , i )
680681 return s1 .substr (0 , common_length )
682+
683+
684+ static func _get_class_from_class_name (cls_name : String ) -> String :
685+ var classes = cls_name .split ("," )
686+ if classes .size () == 1 :
687+ return cls_name
688+
689+ # Handle special case where 2 or more class names are present separated
690+ # by ",": calculate the common parent class.
691+ # Example case: CanvasItem.material uses "CanvasItemMaterial,ShaderMaterial"
692+ var parent_classes = _get_parent_classes (classes [0 ])
693+ for i in range (1 , classes .size ()):
694+ var test_cls = classes [i ]
695+ while not ClassDB .is_parent_class (test_cls , parent_classes [0 ]):
696+ parent_classes .pop_front ()
697+ return parent_classes [0 ]
0 commit comments