Skip to content

Commit 781670a

Browse files
committed
Fix class type when class_name has 2 or more class names
1 parent 0e6bd3a commit 781670a

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

addons/csharp_gdextension_bindgen/csharp_gdextension_bindgen.gd

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)