From: Rico Tzschichholz Date: Sat, 8 Apr 2023 13:50:53 +0000 (+0200) Subject: vala: Use GLib.Object as type-argument for GLib.ListModel/ListStore if none is given X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e52925071c54e3de7f3676b76516024f21b480b7;p=thirdparty%2Fvala.git vala: Use GLib.Object as type-argument for GLib.ListModel/ListStore if none is given --- diff --git a/vala/valadatatype.vala b/vala/valadatatype.vala index 897eaf72c..d75eee62a 100644 --- a/vala/valadatatype.vala +++ b/vala/valadatatype.vala @@ -692,9 +692,17 @@ public abstract class Vala.DataType : CodeNode { } if ((!allow_none || n_type_args > 0) && n_type_args < expected_n_type_args) { - error = true; - Report.error (source_reference, "too few type arguments for `%s'", type_symbol.to_string ()); - return false; + if (n_type_args == 0 && type_symbol != null + && (type_symbol == context.analyzer.glistmodel_type || type_symbol == context.analyzer.gliststore_type)) { + Report.notice (source_reference, "`%s' requires a type argument, defaulting to `GLib.Object'", type_symbol.to_string ()); + var type = new ObjectType (context.analyzer.object_type, source_reference); + type.value_owned = true; + add_type_argument (type); + } else { + error = true; + Report.error (source_reference, "too few type arguments for `%s'", type_symbol.to_string ()); + return false; + } } else if ((!allow_none || n_type_args > 0) && n_type_args > expected_n_type_args) { error = true; Report.error (source_reference, "too many type arguments for `%s'", type_symbol.to_string ()); diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala index a5076a2fe..55267576e 100644 --- a/vala/valasemanticanalyzer.vala +++ b/vala/valasemanticanalyzer.vala @@ -172,6 +172,8 @@ public class Vala.SemanticAnalyzer : CodeVisitor { public DataType delegate_target_type; public DelegateType delegate_target_destroy_type; public DelegateType generics_dup_func_type; + public Interface? glistmodel_type; + public Class? gliststore_type; Delegate destroy_notify; @@ -238,6 +240,9 @@ public class Vala.SemanticAnalyzer : CodeVisitor { gsource_type = (Class) glib_ns.scope.lookup ("Source"); + glistmodel_type = glib_ns.scope.lookup ("ListModel") as Interface; + gliststore_type = glib_ns.scope.lookup ("ListStore") as Class; + delegate_target_type = new StructValueType ((Struct) glib_ns.scope.lookup ("pointer")); destroy_notify = (Delegate) glib_ns.scope.lookup ("DestroyNotify"); delegate_target_destroy_type = new DelegateType (destroy_notify);