summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2023-04-16 14:24:25 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2023-04-16 14:24:25 +0200
commit46b5b957df1eca5379774348a13f0a6847cdf7da (patch)
tree833155b46a300958c5ff828b51808b2689099294
parent98798fe207759a932831ee4f5d4bd36a698e92a6 (diff)
downloadvala-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.vala2
-rw-r--r--vala/valagirparser.vala10
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");
}