summaryrefslogtreecommitdiff
path: root/vala
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2022-08-01 14:32:06 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2022-08-09 08:44:28 +0200
commit661f08ea4d92c37a566b388c543240ac71cef6dd (patch)
tree4528bc32d0f5a5588fae909131f66680cb78b037 /vala
parente74724d2646b0cda103984f1d6c4045db2262726 (diff)
downloadvala-661f08ea4d92c37a566b388c543240ac71cef6dd.tar.gz
vala: Enforce required type-arguments on parameter/return types of callables
This stricter check applies to delegate types in source files only. Fixes https://gitlab.gnome.org/GNOME/vala/issues/1342
Diffstat (limited to 'vala')
-rw-r--r--vala/valadelegate.vala6
-rw-r--r--vala/valamethod.vala3
-rw-r--r--vala/valaparameter.vala3
-rw-r--r--vala/valasignal.vala6
4 files changed, 18 insertions, 0 deletions
diff --git a/vala/valadelegate.vala b/vala/valadelegate.vala
index eeaabcb69..cb53d2e91 100644
--- a/vala/valadelegate.vala
+++ b/vala/valadelegate.vala
@@ -319,6 +319,12 @@ public class Vala.Delegate : TypeSymbol, Callable {
}
return_type.check (context);
+ if (!external_package) {
+ context.analyzer.check_type (return_type);
+ if (return_type is DelegateType) {
+ return_type.check_type_arguments (context);
+ }
+ }
if (return_type.type_symbol == context.analyzer.va_list_type.type_symbol) {
error = true;
diff --git a/vala/valamethod.vala b/vala/valamethod.vala
index 2794cd48e..8c5c3af56 100644
--- a/vala/valamethod.vala
+++ b/vala/valamethod.vala
@@ -866,6 +866,9 @@ public class Vala.Method : Subroutine, Callable {
return_type.check (context);
if (!external_package) {
context.analyzer.check_type (return_type);
+ if (return_type is DelegateType) {
+ return_type.check_type_arguments (context);
+ }
}
if (return_type.type_symbol == context.analyzer.va_list_type.type_symbol) {
diff --git a/vala/valaparameter.vala b/vala/valaparameter.vala
index 656188848..fb68ab069 100644
--- a/vala/valaparameter.vala
+++ b/vala/valaparameter.vala
@@ -208,6 +208,9 @@ public class Vala.Parameter : Variable {
if (!ellipsis) {
if (!external_package) {
context.analyzer.check_type (variable_type);
+ if (variable_type is DelegateType) {
+ variable_type.check_type_arguments (context);
+ }
// check symbol availability
if ((parent_symbol == null || !parent_symbol.external_package) && variable_type.type_symbol != null) {
diff --git a/vala/valasignal.vala b/vala/valasignal.vala
index ffd5a760a..2b5005e3b 100644
--- a/vala/valasignal.vala
+++ b/vala/valasignal.vala
@@ -206,6 +206,12 @@ public class Vala.Signal : Symbol, Callable {
}
return_type.check (context);
+ if (!external_package) {
+ context.analyzer.check_type (return_type);
+ if (return_type is DelegateType) {
+ return_type.check_type_arguments (context);
+ }
+ }
if (return_type.type_symbol == context.analyzer.va_list_type.type_symbol) {
error = true;