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