diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2021-06-17 18:05:09 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2021-08-05 17:47:29 +0100 |
commit | 9b5eae6427ea8132447e5940ed5cd12ead01a82a (patch) | |
tree | 96a16c1bed1404eed92c539d22fdb8b463b71b1b /giscanner | |
parent | de2f64c43b5a2d6b252c3cf716466041492e5dc6 (diff) | |
download | gobject-introspection-9b5eae6427ea8132447e5940ed5cd12ead01a82a.tar.gz |
scanner: Try to pair properties with accessor methods
The heuristic is pretty trivial: for any given non-construct-only,
writable property, we check if there's a `set_<property>` method; for
any given readable property, we check if there's a `get_<property>`
method.
Diffstat (limited to 'giscanner')
-rw-r--r-- | giscanner/maintransformer.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py index 33f58485..dc8bd3c2 100644 --- a/giscanner/maintransformer.py +++ b/giscanner/maintransformer.py @@ -92,6 +92,7 @@ class MainTransformer(object): self._pair_function(node) if isinstance(node, (ast.Class, ast.Interface)): self._pair_class_virtuals(node) + self._pair_property_accessors(node) # Some annotations need to be post function pairing self._namespace.walk(self._pass_read_annotations2) @@ -1462,6 +1463,26 @@ method or constructor of some type.""" self._apply_annotations_callable(vfunc, [], block) break + def _pair_property_accessors(self, node): + """Look for accessor methods for class properties""" + for prop in node.properties: + normalized_name = prop.name.replace('-', '_') + if prop.writable and not prop.construct_only: + setter = 'set_' + normalized_name + else: + setter = None + if prop.readable: + getter = 'get_' + normalized_name + else: + getter = None + for method in node.methods: + if setter is not None and method.name == setter: + prop.setter = method.name + continue + if getter is not None and method.name == getter: + prop.getter = method.name + continue + def _pass3(self, node, chain): """Pass 3 is after we've loaded GType data and performed type closure.""" |