Merge pull request #85918 from 20kdc/tnj-static-called-on-instance-fix-confusion

GDScript: Adjust `STATIC_CALLED_ON_INSTANCE` warning to not force native type
This commit is contained in:
Rémi Verschelde 2024-03-04 13:32:47 +01:00
commit b392ab5ff4
No known key found for this signature in database
GPG key ID: C3336907360768E1
3 changed files with 31 additions and 15 deletions

View file

@ -3360,12 +3360,8 @@ void GDScriptAnalyzer::reduce_call(GDScriptParser::CallNode *p_call, bool p_is_a
parser->push_warning(p_call, GDScriptWarning::RETURN_VALUE_DISCARDED, p_call->function_name);
}
if (method_flags.has_flag(METHOD_FLAG_STATIC) && !is_constructor && !base_type.is_meta_type && !(is_self && static_context)) {
String caller_type = String(base_type.native_type);
if (caller_type.is_empty()) {
caller_type = base_type.to_string();
}
if (method_flags.has_flag(METHOD_FLAG_STATIC) && !is_constructor && !base_type.is_meta_type && !is_self) {
String caller_type = base_type.to_string();
parser->push_warning(p_call, GDScriptWarning::STATIC_CALLED_ON_INSTANCE, p_call->function_name, caller_type);
}

View file

@ -1,11 +1,23 @@
class Player:
var x = 3
class_name TestStaticCalledOnInstance
class Inner:
static func static_func():
pass
static func static_func():
pass
func test():
# These should not emit a warning.
var _player = Player.new()
print(String.num_uint64(8589934592)) # 2 ^ 33
print(String.num_uint64(8589934592))
var some_string := String()
print(some_string.num_uint64(8589934592)) # Warning.
# This should emit a warning.
var some_string = String()
print(some_string.num_uint64(8589934592)) # 2 ^ 33
TestStaticCalledOnInstance.static_func()
static_func()
self.static_func()
var other := TestStaticCalledOnInstance.new()
other.static_func() # Warning.
Inner.static_func()
var inner := Inner.new()
inner.static_func() # Warning.

View file

@ -1,7 +1,15 @@
GDTEST_OK
>> WARNING
>> Line: 11
>> Line: 13
>> STATIC_CALLED_ON_INSTANCE
>> The function "num_uint64()" is a static function but was called from an instance. Instead, it should be directly called from the type: "String.num_uint64()".
>> WARNING
>> Line: 19
>> STATIC_CALLED_ON_INSTANCE
>> The function "static_func()" is a static function but was called from an instance. Instead, it should be directly called from the type: "TestStaticCalledOnInstance.static_func()".
>> WARNING
>> Line: 23
>> STATIC_CALLED_ON_INSTANCE
>> The function "static_func()" is a static function but was called from an instance. Instead, it should be directly called from the type: "Inner.static_func()".
8589934592
8589934592