1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Merge pull request #78552 from dalexeev/gds-check-get-node-in-static-func

GDScript: Check `get_node()` shorthand in static functions
This commit is contained in:
Rémi Verschelde
2023-08-17 11:20:32 +02:00
5 changed files with 26 additions and 10 deletions

View File

@@ -3301,17 +3301,26 @@ void GDScriptAnalyzer::reduce_dictionary(GDScriptParser::DictionaryNode *p_dicti
void GDScriptAnalyzer::reduce_get_node(GDScriptParser::GetNodeNode *p_get_node) {
GDScriptParser::DataType result;
result.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT;
result.kind = GDScriptParser::DataType::NATIVE;
result.native_type = SNAME("Node");
result.builtin_type = Variant::OBJECT;
result.kind = GDScriptParser::DataType::VARIANT;
if (!ClassDB::is_parent_class(parser->current_class->base_type.native_type, result.native_type)) {
push_error(R"*(Cannot use shorthand "get_node()" notation ("$") on a class that isn't a node.)*", p_get_node);
if (!ClassDB::is_parent_class(parser->current_class->base_type.native_type, SNAME("Node"))) {
push_error(vformat(R"*(Cannot use shorthand "get_node()" notation ("%c") on a class that isn't a node.)*", p_get_node->use_dollar ? '$' : '%'), p_get_node);
p_get_node->set_datatype(result);
return;
}
if (static_context) {
push_error(vformat(R"*(Cannot use shorthand "get_node()" notation ("%c") in a static function.)*", p_get_node->use_dollar ? '$' : '%'), p_get_node);
p_get_node->set_datatype(result);
return;
}
mark_lambda_use_self();
result.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT;
result.kind = GDScriptParser::DataType::NATIVE;
result.builtin_type = Variant::OBJECT;
result.native_type = SNAME("Node");
p_get_node->set_datatype(result);
}