diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2021-07-27 11:43:06 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2021-08-05 17:47:29 +0100 |
commit | dfb5ce07e821a7f2bd19336c4da57e51a6f4027d (patch) | |
tree | acd90dbd53ae96dd820a9fff30650194670952da /giscanner | |
parent | 2b6c06da99611fe5821865d0635b83fb85210b67 (diff) | |
download | gobject-introspection-dfb5ce07e821a7f2bd19336c4da57e51a6f4027d.tar.gz |
Improve getter function matching heuristic
Some readonly boolean properties in the form of 'has-foo' or 'is-bar'
expose a getter function in the form of `get_has_foo()` or
`get_is_bar()`, according to extant coding practices. We should ensure
we still check for those.
Diffstat (limited to 'giscanner')
-rw-r--r-- | giscanner/maintransformer.py | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py index b4d44d52..4e4a5573 100644 --- a/giscanner/maintransformer.py +++ b/giscanner/maintransformer.py @@ -1466,20 +1466,25 @@ method or constructor of some type.""" def _pair_property_accessors(self, node): """Look for accessor methods for class properties""" for prop in node.properties: - setter = prop.setter - if setter is None: + if prop.setter is None: normalized_name = prop.name.replace('-', '_') if prop.writable and not prop.construct_only: setter = 'set_' + normalized_name - getter = prop.getter - if getter is None: + else: + setter = None + else: + setter = prop.setter + if prop.getter is None: if prop.readable: + getter = ['get_' + normalized_name] # Heuristic: read-only properties can have getters that are # just the property name, like: gtk_widget_has_focus() if not prop.writable and prop.type.is_equiv(ast.TYPE_BOOLEAN): - getter = normalized_name - else: - getter = 'get_' + normalized_name + getter.append(normalized_name) + else: + getter = [] + else: + getter = [prop.getter] for method in node.methods: if setter is not None and method.name == setter: if method.set_property is None: @@ -1492,7 +1497,7 @@ method or constructor of some type.""" method.set_property = prop.name prop.setter = method.name continue - if getter is not None and method.name == getter: + if getter is not [] and method.name in getter: if method.get_property is None: method.get_property = prop.name elif method.get_property != prop.name: |