From 46b5b957df1eca5379774348a13f0a6847cdf7da Mon Sep 17 00:00:00 2001 From: Rico Tzschichholz Date: Sun, 16 Apr 2023 14:24:25 +0200 Subject: girparser: Classes are considered sealed when there were no fields found Fixes https://gitlab.gnome.org/GNOME/vala/issues/1036 --- vala/valaclass.vala | 2 +- vala/valagirparser.vala | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/vala/valaclass.vala b/vala/valaclass.vala index 436a6b3cf..a87bb4240 100644 --- a/vala/valaclass.vala +++ b/vala/valaclass.vala @@ -592,7 +592,7 @@ public class Vala.Class : ObjectTypeSymbol { add_constructor (c); } - if (base_class != null && base_class.is_sealed) { + if (!external_package && base_class != null && base_class.is_sealed) { error = true; Report.error (source_reference, "`%s' cannot inherit from sealed class `%s'", get_full_name (), base_class.get_full_name ()); } diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala index 70206da6c..d86e19f16 100644 --- a/vala/valagirparser.vala +++ b/vala/valagirparser.vala @@ -3137,6 +3137,16 @@ public class Vala.GirParser : CodeVisitor { pop_metadata (); } + // There is no instance field therefore this type might be final/sealed + if (first_field && !cl.is_abstract && !(cl.is_opaque || cl.is_sealed)) { + if (!cl.is_compact + && !metadata.has_argument (ArgumentType.ABSTRACT) + && !metadata.has_argument (ArgumentType.COMPACT) + && !metadata.has_argument (ArgumentType.SEALED)) { + cl.is_sealed = true; + } + } + pop_node (); end_element ("class"); } -- cgit v1.2.1