[libvirt] [PATCH] esx: Improve list usage detection in the generator
Matthias Bolte
matthias.bolte at googlemail.com
Sun May 1 19:57:37 UTC 2011
Detect it based on usage as parameter and return type too.
---
src/esx/esx_vi_generator.py | 41 +++++++++++++++++++++++++++++++----------
1 files changed, 31 insertions(+), 10 deletions(-)
diff --git a/src/esx/esx_vi_generator.py b/src/esx/esx_vi_generator.py
index 8ac1249..70cf2ee 100755
--- a/src/esx/esx_vi_generator.py
+++ b/src/esx/esx_vi_generator.py
@@ -1428,7 +1428,7 @@ additional_enum_features = { "ManagedEntityStatus" : Enum.FEATURE__ANY_TYPE
"VirtualMachinePowerState" : Enum.FEATURE__ANY_TYPE }
additional_object_features = { "AutoStartDefaults" : Object.FEATURE__ANY_TYPE,
- "AutoStartPowerInfo" : Object.FEATURE__ANY_TYPE | Object.FEATURE__LIST,
+ "AutoStartPowerInfo" : Object.FEATURE__ANY_TYPE,
"DatastoreHostMount" : Object.FEATURE__DEEP_COPY | Object.FEATURE__LIST | Object.FEATURE__ANY_TYPE,
"DatastoreInfo" : Object.FEATURE__ANY_TYPE | Object.FEATURE__DYNAMIC_CAST,
"FileInfo" : Object.FEATURE__DYNAMIC_CAST,
@@ -1437,12 +1437,9 @@ additional_object_features = { "AutoStartDefaults" : Object.FEATURE__AN
"HostCpuIdInfo" : Object.FEATURE__ANY_TYPE | Object.FEATURE__LIST,
"HostDatastoreBrowserSearchResults" : Object.FEATURE__LIST | Object.FEATURE__ANY_TYPE,
"ManagedObjectReference" : Object.FEATURE__ANY_TYPE,
- "ObjectContent" : Object.FEATURE__DEEP_COPY | Object.FEATURE__LIST,
- "PerfCounterInfo" : Object.FEATURE__LIST,
- "PerfEntityMetric" : Object.FEATURE__LIST | Object.FEATURE__DYNAMIC_CAST,
- "PerfQuerySpec" : Object.FEATURE__LIST,
+ "ObjectContent" : Object.FEATURE__DEEP_COPY,
+ "PerfEntityMetric" : Object.FEATURE__DYNAMIC_CAST,
"PerfMetricIntSeries" : Object.FEATURE__DYNAMIC_CAST,
- "PropertyFilterSpec" : Object.FEATURE__LIST,
"ResourcePoolResourceUsage" : Object.FEATURE__ANY_TYPE,
"SelectionSpec" : Object.FEATURE__DYNAMIC_CAST,
"ServiceContent" : Object.FEATURE__DESERIALIZE,
@@ -1541,6 +1538,15 @@ for method in methods_by_name.values():
else:
objects_by_name[parameter.type].features |= Object.FEATURE__SERIALIZE
+ # detect list usage
+ if parameter.occurrence == OCCURRENCE__REQUIRED_LIST or \
+ parameter.occurrence == OCCURRENCE__OPTIONAL_LIST:
+ if parameter.is_enum():
+ report_error("unsupported usage of enum '%s' as list in '%s'"
+ % (parameter.type, method.name))
+ else:
+ objects_by_name[parameter.type].features |= Object.FEATURE__LIST
+
# method return types must be deserializable
if method.returns and method.returns.is_type_generated():
if method.returns.is_enum():
@@ -1548,6 +1554,15 @@ for method in methods_by_name.values():
else:
objects_by_name[method.returns.type].features |= Object.FEATURE__DESERIALIZE
+ # detect list usage
+ if method.returns.occurrence == OCCURRENCE__REQUIRED_LIST or \
+ method.returns.occurrence == OCCURRENCE__OPTIONAL_LIST:
+ if method.returns.is_enum():
+ report_error("unsupported usage of enum '%s' as list in '%s'"
+ % (method.returns.type, method.name))
+ else:
+ objects_by_name[method.returns.type].features |= Object.FEATURE__LIST
+
for enum in enums_by_name.values():
@@ -1572,10 +1587,16 @@ for obj in objects_by_name.values():
# detect list usage
for property in obj.properties:
- if (property.occurrence == OCCURRENCE__REQUIRED_LIST or \
- property.occurrence == OCCURRENCE__OPTIONAL_LIST) and \
- property.type not in predefined_objects:
- objects_by_name[property.type].features |= Object.FEATURE__LIST
+ if not property.is_type_generated():
+ continue
+
+ if property.occurrence == OCCURRENCE__REQUIRED_LIST or \
+ property.occurrence == OCCURRENCE__OPTIONAL_LIST:
+ if property.is_enum():
+ report_error("unsupported usage of enum '%s' as list in '%s'"
+ % (property.type, obj.type))
+ else:
+ objects_by_name[property.type].features |= Object.FEATURE__LIST
# apply/remove additional features
if obj.name in additional_object_features:
--
1.7.0.4
More information about the libvir-list
mailing list