forked from mirrors/linphone-iphone
C++ wrapper generator: reworking of ClassHeader class
This commit is contained in:
parent
9dd3f54f91
commit
cd7bc53db3
1 changed files with 21 additions and 32 deletions
|
|
@ -361,25 +361,16 @@ class ClassHeader(object):
|
|||
self.filename = '{0}.hh'.format(_class.name.to_snake_case())
|
||||
self.priorDeclarations = []
|
||||
self.private_type = _class.name.to_camel_case(fullName=True)
|
||||
|
||||
self.includes = {'internal': [], 'external': []}
|
||||
includes = self.needed_includes(_class)
|
||||
|
||||
for include in includes['external']:
|
||||
self.includes['external'].append({'name': include})
|
||||
|
||||
for include in includes['internal']:
|
||||
self.includes['internal'].append({'name': include})
|
||||
self._populate_needed_includes(_class)
|
||||
|
||||
def needed_includes(self, _class):
|
||||
includes = {'internal': [], 'external': []}
|
||||
|
||||
def _populate_needed_includes(self, _class):
|
||||
if type(_class) is AbsApi.Class:
|
||||
for _property in _class.properties:
|
||||
if _property.setter is not None:
|
||||
self._needed_includes_from_method(_property.setter, includes)
|
||||
self._populate_needed_includes_from_method(_property.setter)
|
||||
if _property.getter is not None:
|
||||
self._needed_includes_from_method(_property.getter, includes)
|
||||
self._populate_needed_includes_from_method(_property.getter)
|
||||
|
||||
if type(_class) is AbsApi.Class:
|
||||
methods = _class.classMethods + _class.instanceMethods
|
||||
|
|
@ -387,26 +378,24 @@ class ClassHeader(object):
|
|||
methods = _class.methods
|
||||
|
||||
for method in methods:
|
||||
self._needed_includes_from_type(method.returnType, includes)
|
||||
self._populate_needed_includes_from_type(method.returnType)
|
||||
for arg in method.args:
|
||||
self._needed_includes_from_type(arg.type, includes)
|
||||
self._populate_needed_includes_from_type(arg.type)
|
||||
|
||||
if isinstance(_class, AbsApi.Class) and _class.listenerInterface is not None:
|
||||
decl = 'class ' + _class.listenerInterface.name.translate(metaname.Translator.get('Cpp'))
|
||||
self._add_prior_declaration(decl)
|
||||
|
||||
currentClassInclude = _class.name.to_snake_case()
|
||||
if currentClassInclude in includes['internal']:
|
||||
includes['internal'].remove(currentClassInclude)
|
||||
|
||||
return includes
|
||||
if currentClassInclude in self.includes['internal']:
|
||||
self.includes['internal'].remove(currentClassInclude)
|
||||
|
||||
def _needed_includes_from_method(self, method, includes):
|
||||
self._needed_includes_from_type(method.returnType, includes)
|
||||
def _populate_needed_includes_from_method(self, method):
|
||||
self._populate_needed_includes_from_type(method.returnType)
|
||||
for arg in method.args:
|
||||
self._needed_includes_from_type(arg.type, includes)
|
||||
self._populate_needed_includes_from_type(arg.type)
|
||||
|
||||
def _needed_includes_from_type(self, type_, includes):
|
||||
def _populate_needed_includes_from_type(self, type_):
|
||||
translator = metaname.Translator.get('Cpp')
|
||||
if isinstance(type_, AbsApi.ClassType):
|
||||
class_ = type_.desc
|
||||
|
|
@ -415,7 +404,7 @@ class ClassHeader(object):
|
|||
self._add_prior_declaration(decl)
|
||||
else:
|
||||
rootClass = class_.find_first_ancestor_by_type(AbsApi.Namespace, priorAncestor=True)
|
||||
self._add_include(includes, 'internal', rootClass.name.to_snake_case())
|
||||
self._add_include('internal', rootClass.name.to_snake_case())
|
||||
elif isinstance(type_, AbsApi.EnumType):
|
||||
enum = type_.desc
|
||||
if enum.parent == self.rootNs:
|
||||
|
|
@ -423,19 +412,19 @@ class ClassHeader(object):
|
|||
else:
|
||||
rootClass = enum.find_first_ancestor_by_type(AbsApi.Namespace, priorAncestor=True)
|
||||
headerFile = rootClass.name.to_snake_case()
|
||||
self._add_include(includes, 'internal', headerFile)
|
||||
self._add_include('internal', headerFile)
|
||||
elif isinstance(type_, AbsApi.BaseType):
|
||||
if type_.name == 'integer' and isinstance(type_.size, int):
|
||||
self._add_include(includes, 'external', 'cstdint')
|
||||
self._add_include('external', 'cstdint')
|
||||
elif type_.name == 'string':
|
||||
self._add_include(includes, 'external', 'string')
|
||||
self._add_include('external', 'string')
|
||||
elif isinstance(type_, AbsApi.ListType):
|
||||
self._add_include(includes, 'external', 'list')
|
||||
self._needed_includes_from_type(type_.containedTypeDesc, includes)
|
||||
self._add_include('external', 'list')
|
||||
self._populate_needed_includes_from_type(type_.containedTypeDesc)
|
||||
|
||||
def _add_include(self, includes, location, name):
|
||||
if not name in includes[location]:
|
||||
includes[location].append(name)
|
||||
def _add_include(self, location, name):
|
||||
if next((x for x in self.includes[location] if x['name']==name), None) is None:
|
||||
self.includes[location].append({'name': name})
|
||||
|
||||
def _add_prior_declaration(self, decl):
|
||||
if next((x for x in self.priorDeclarations if x['declaration']==decl), None) is None:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue