GDScript: Report property type errors
Inline getters & setters are now FunctionNodes. Their names are set in the parser, not in the compiler. GDScript-Analyzer will now run through getter and setter. Also report wrong type or signature errors regarding getset properties. Added GDScript tests for getters and setters. #53102
This commit is contained in:
parent
58aa020a19
commit
551ceb590b
17 changed files with 291 additions and 106 deletions
|
|
@ -0,0 +1,11 @@
|
|||
var _prop : int
|
||||
|
||||
# Getter function has wrong return type.
|
||||
var prop : String:
|
||||
get = get_prop
|
||||
|
||||
func get_prop():
|
||||
return _prop
|
||||
|
||||
func test():
|
||||
pass
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
GDTEST_ANALYZER_ERROR
|
||||
Function with return type "int" cannot be used as getter for a property of type "String".
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
var _prop : int
|
||||
|
||||
# Setter function has wrong argument type.
|
||||
var prop : String:
|
||||
set = set_prop
|
||||
|
||||
func set_prop(value : int):
|
||||
_prop = value
|
||||
|
||||
func test():
|
||||
pass
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
GDTEST_ANALYZER_ERROR
|
||||
Function with argument type "int" cannot be used as setter for a property of type "String".
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
var _prop : int
|
||||
|
||||
# Inline getter returns int instead of String.
|
||||
var prop : String:
|
||||
get:
|
||||
return _prop
|
||||
|
||||
func test():
|
||||
pass
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
GDTEST_ANALYZER_ERROR
|
||||
Cannot return value of type "int" because the function return type is "String".
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
var _prop : int
|
||||
|
||||
# Inline setter assigns String to int.
|
||||
var prop : String:
|
||||
set(value):
|
||||
_prop = value
|
||||
|
||||
func test():
|
||||
pass
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
GDTEST_ANALYZER_ERROR
|
||||
Cannot assign a value of type "String" to a target of type "int".
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
var _prop = 1
|
||||
var prop:
|
||||
get = get_prop, set = set_prop
|
||||
|
||||
func get_prop():
|
||||
return _prop
|
||||
|
||||
func set_prop(value):
|
||||
_prop = value
|
||||
|
||||
func test():
|
||||
print(prop)
|
||||
|
||||
prop = 2
|
||||
|
||||
print(prop)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
GDTEST_OK
|
||||
1
|
||||
2
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
# Untyped inline property
|
||||
var prop1:
|
||||
get:
|
||||
return prop1
|
||||
set(value):
|
||||
prop1 = value
|
||||
|
||||
# Typed inline property
|
||||
var prop2 : int:
|
||||
get:
|
||||
return prop2
|
||||
set(value):
|
||||
prop2 = value
|
||||
|
||||
# Typed inline property with default value
|
||||
var prop3 : int = 1:
|
||||
get:
|
||||
return prop3
|
||||
set(value):
|
||||
prop3 = value
|
||||
|
||||
# Typed inline property with backing variable
|
||||
var _prop4 : int = 2
|
||||
var prop4: int:
|
||||
get:
|
||||
return _prop4
|
||||
set(value):
|
||||
_prop4 = value
|
||||
|
||||
func test():
|
||||
print(prop1)
|
||||
print(prop2)
|
||||
print(prop3)
|
||||
print(prop4)
|
||||
|
||||
print()
|
||||
|
||||
prop1 = 1
|
||||
prop2 = 2
|
||||
prop3 = 3
|
||||
prop4 = 4
|
||||
|
||||
print(prop1)
|
||||
print(prop2)
|
||||
print(prop3)
|
||||
print(prop4)
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
GDTEST_OK
|
||||
null
|
||||
0
|
||||
1
|
||||
2
|
||||
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
Loading…
Add table
Add a link
Reference in a new issue