Skip to content

Commit 030aa41

Browse files
TitanNanofireAThousandShips
committed
GDScriptAnalyzer is unaware of properties from other Languages
Co-authored-by: K. S. Ernest (iFire) Lee <[email protected]> Co-authored-by: A Thousand Ships <[email protected]>
1 parent d76c1d0 commit 030aa41

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

modules/gdscript/gdscript_analyzer.cpp

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3769,6 +3769,60 @@ void GDScriptAnalyzer::reduce_identifier_from_base(GDScriptParser::IdentifierNod
37693769
}
37703770
}
37713771

3772+
// Check non-GDScript scripts.
3773+
Ref<Script> script_type = base.script_type;
3774+
3775+
if (base_class == nullptr && script_type.is_valid()) {
3776+
List<PropertyInfo> property_list;
3777+
script_type->get_script_property_list(&property_list);
3778+
3779+
for (const PropertyInfo &property_info : property_list) {
3780+
if (property_info.name != p_identifier->name) {
3781+
continue;
3782+
}
3783+
3784+
const GDScriptParser::DataType property_type = GDScriptAnalyzer::type_from_property(property_info, false, false);
3785+
3786+
p_identifier->set_datatype(property_type);
3787+
p_identifier->source = GDScriptParser::IdentifierNode::MEMBER_VARIABLE;
3788+
return;
3789+
}
3790+
3791+
MethodInfo method_info = script_type->get_method_info(p_identifier->name);
3792+
3793+
if (method_info.name == p_identifier->name) {
3794+
p_identifier->set_datatype(make_callable_type(method_info));
3795+
p_identifier->source = GDScriptParser::IdentifierNode::MEMBER_FUNCTION;
3796+
return;
3797+
}
3798+
3799+
List<MethodInfo> signal_list;
3800+
script_type->get_script_signal_list(&signal_list);
3801+
3802+
for (const MethodInfo &signal_info : signal_list) {
3803+
if (signal_info.name != p_identifier->name) {
3804+
continue;
3805+
}
3806+
3807+
const GDScriptParser::DataType signal_type = make_signal_type(signal_info);
3808+
3809+
p_identifier->set_datatype(signal_type);
3810+
p_identifier->source = GDScriptParser::IdentifierNode::MEMBER_SIGNAL;
3811+
return;
3812+
}
3813+
3814+
HashMap<StringName, Variant> constant_map;
3815+
script_type->get_constants(&constant_map);
3816+
3817+
if (constant_map.has(p_identifier->name)) {
3818+
Variant constant = constant_map.get(p_identifier->name);
3819+
3820+
p_identifier->set_datatype(make_builtin_meta_type(constant.get_type()));
3821+
p_identifier->source = GDScriptParser::IdentifierNode::MEMBER_CONSTANT;
3822+
return;
3823+
}
3824+
}
3825+
37723826
// Check native members. No need for native class recursion because Node exposes all Object's properties.
37733827
const StringName &native = base.native_type;
37743828

0 commit comments

Comments
 (0)