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