diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2023-04-16 14:24:25 +0200 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2023-04-16 14:24:25 +0200 |
commit | 46b5b957df1eca5379774348a13f0a6847cdf7da (patch) | |
tree | 833155b46a300958c5ff828b51808b2689099294 | |
parent | 98798fe207759a932831ee4f5d4bd36a698e92a6 (diff) | |
download | vala-46b5b957df1eca5379774348a13f0a6847cdf7da.tar.gz |
girparser: Classes are considered sealed when there were no fields found
Fixes https://gitlab.gnome.org/GNOME/vala/issues/1036
-rw-r--r-- | vala/valaclass.vala | 2 | ||||
-rw-r--r-- | vala/valagirparser.vala | 10 |
2 files changed, 11 insertions, 1 deletions
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"); } |