From 274d49790dd2d68828a312e2c0802c1dbf09ac8f Mon Sep 17 00:00:00 2001 From: Dmitrii Maganov Date: Thu, 29 Dec 2022 09:34:13 +0200 Subject: GDScript: Fix extending abstract classes, forbid their construction --- .../scripts/analyzer/errors/abstract_class_instantiate.gd | 2 ++ .../scripts/analyzer/errors/abstract_class_instantiate.out | 2 ++ .../scripts/analyzer/errors/abstract_script_instantiate.gd | 9 +++++++++ .../scripts/analyzer/errors/abstract_script_instantiate.out | 2 ++ .../tests/scripts/analyzer/features/extend_abstract_class.gd | 12 ++++++++++++ .../scripts/analyzer/features/extend_abstract_class.out | 2 ++ 6 files changed, 29 insertions(+) create mode 100644 modules/gdscript/tests/scripts/analyzer/errors/abstract_class_instantiate.gd create mode 100644 modules/gdscript/tests/scripts/analyzer/errors/abstract_class_instantiate.out create mode 100644 modules/gdscript/tests/scripts/analyzer/errors/abstract_script_instantiate.gd create mode 100644 modules/gdscript/tests/scripts/analyzer/errors/abstract_script_instantiate.out create mode 100644 modules/gdscript/tests/scripts/analyzer/features/extend_abstract_class.gd create mode 100644 modules/gdscript/tests/scripts/analyzer/features/extend_abstract_class.out (limited to 'modules/gdscript/tests') diff --git a/modules/gdscript/tests/scripts/analyzer/errors/abstract_class_instantiate.gd b/modules/gdscript/tests/scripts/analyzer/errors/abstract_class_instantiate.gd new file mode 100644 index 0000000000..38c2faa859 --- /dev/null +++ b/modules/gdscript/tests/scripts/analyzer/errors/abstract_class_instantiate.gd @@ -0,0 +1,2 @@ +func test(): + CanvasItem.new() diff --git a/modules/gdscript/tests/scripts/analyzer/errors/abstract_class_instantiate.out b/modules/gdscript/tests/scripts/analyzer/errors/abstract_class_instantiate.out new file mode 100644 index 0000000000..9eff912b59 --- /dev/null +++ b/modules/gdscript/tests/scripts/analyzer/errors/abstract_class_instantiate.out @@ -0,0 +1,2 @@ +GDTEST_ANALYZER_ERROR +Native class "CanvasItem" cannot be constructed as it is abstract. diff --git a/modules/gdscript/tests/scripts/analyzer/errors/abstract_script_instantiate.gd b/modules/gdscript/tests/scripts/analyzer/errors/abstract_script_instantiate.gd new file mode 100644 index 0000000000..118e7e8a45 --- /dev/null +++ b/modules/gdscript/tests/scripts/analyzer/errors/abstract_script_instantiate.gd @@ -0,0 +1,9 @@ +class A extends CanvasItem: + func _init(): + print('no') + +class B extends A: + pass + +func test(): + B.new() diff --git a/modules/gdscript/tests/scripts/analyzer/errors/abstract_script_instantiate.out b/modules/gdscript/tests/scripts/analyzer/errors/abstract_script_instantiate.out new file mode 100644 index 0000000000..8b956f5974 --- /dev/null +++ b/modules/gdscript/tests/scripts/analyzer/errors/abstract_script_instantiate.out @@ -0,0 +1,2 @@ +GDTEST_ANALYZER_ERROR +Class "abstract_script_instantiate.gd::B" cannot be constructed as it is based on abstract native class "CanvasItem". diff --git a/modules/gdscript/tests/scripts/analyzer/features/extend_abstract_class.gd b/modules/gdscript/tests/scripts/analyzer/features/extend_abstract_class.gd new file mode 100644 index 0000000000..95c3268130 --- /dev/null +++ b/modules/gdscript/tests/scripts/analyzer/features/extend_abstract_class.gd @@ -0,0 +1,12 @@ +class A extends CanvasItem: + func _init(): + pass + +class B extends A: + pass + +class C extends CanvasItem: + pass + +func test(): + print('ok') diff --git a/modules/gdscript/tests/scripts/analyzer/features/extend_abstract_class.out b/modules/gdscript/tests/scripts/analyzer/features/extend_abstract_class.out new file mode 100644 index 0000000000..1b47ed10dc --- /dev/null +++ b/modules/gdscript/tests/scripts/analyzer/features/extend_abstract_class.out @@ -0,0 +1,2 @@ +GDTEST_OK +ok -- cgit v1.2.3