diff options
author | JCWasmx86 <JCWasmx86@t-online.de> | 2022-06-04 19:37:22 +0200 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2023-04-29 21:00:17 +0200 |
commit | 1e124a4dd5454525d04138d4df48cad75c4ffc7c (patch) | |
tree | 5a18043bcc0e7a5195ca4760ec8856461200a319 | |
parent | 0b5fce811de5614e55a0808150c8571e02551c36 (diff) | |
download | vala-1e124a4dd5454525d04138d4df48cad75c4ffc7c.tar.gz |
Don't generate a hashmap, if >0 args are generic or array
-rw-r--r-- | dbusgen/valadbusvariantmodule.vala | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/dbusgen/valadbusvariantmodule.vala b/dbusgen/valadbusvariantmodule.vala index d8503ae71..be2aa6856 100644 --- a/dbusgen/valadbusvariantmodule.vala +++ b/dbusgen/valadbusvariantmodule.vala @@ -160,7 +160,22 @@ public class Vala.DBusVariantModule { return get_complex_type (type); } + private bool invalid_generic_type (VariantType type) { + return type.equal (VariantType.BOOLEAN) + || type.equal (VariantType.BYTE) + || type.equal (VariantType.INT16) + || type.equal (VariantType.UINT16) + || type.equal (VariantType.INT32) + || type.equal (VariantType.UINT32) + || type.equal (VariantType.INT64) + || type.equal (VariantType.UINT64) + || type.equal (VariantType.DOUBLE); + } + private DataType? get_complex_type (VariantType type) { + // If we were able to interpret it, but it is false vala syntax + // E.g. generics with arrays/primitive types + var skipped_generation = false; if (type.equal (VariantType.OBJECT_PATH_ARRAY)) { return object_path_array_type.copy (); } else if (type.equal (VariantType.BYTESTRING)) { @@ -175,9 +190,10 @@ public class Vala.DBusVariantModule { // TODO: Warn about arrays in generics if (element.equal (VariantType.DICTIONARY) || element.is_dict_entry ()) { var res = dictionary_type.copy (); + var invalid_generic_arg = invalid_generic_type (element.key()) || invalid_generic_type (element.value ()); var key = get_variant_type (element.key ()); var value = get_variant_type (element.value ()); - if (key != null && value != null && !(key is ArrayType) && !(value is ArrayType)) { + if (key != null && value != null && !(key is ArrayType) && !(value is ArrayType) && !invalid_generic_arg) { res.add_type_argument (key); res.add_type_argument (value); return res; @@ -194,8 +210,9 @@ public class Vala.DBusVariantModule { // TODO: Emit structure } - Report.warning (null, "Unresolved type: %s".printf ((string) type.peek_string ())); - + if (!skipped_generation) { + Report.warning (null, "Unresolved type: %s".printf ((string) type.peek_string ())); + } return null; if (type.equal (VariantType.DICT_ENTRY) || type.is_dict_entry ()) { |