mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-20 20:48:07 +00:00
Started jni part of java wrapper
This commit is contained in:
parent
d954d98201
commit
2b6753bdaf
1 changed files with 39 additions and 6 deletions
|
|
@ -65,7 +65,12 @@ ENUMS_LIST = {
|
|||
##########################################################################
|
||||
|
||||
class JavaTranslator(object):
|
||||
def __init__(self):
|
||||
def __init__(self, packageName):
|
||||
package_dirs = packageName.split('.')
|
||||
self.jni_package = ''
|
||||
for directory in package_dirs:
|
||||
self.jni_package += directory + '_'
|
||||
|
||||
self.docTranslator = metadoc.SandcastleJavaTranslator()
|
||||
|
||||
def throws_exception(self, _type):
|
||||
|
|
@ -77,7 +82,7 @@ class JavaTranslator(object):
|
|||
def translate_argument_name(self, _argName):
|
||||
return _argName.to_snake_case()
|
||||
|
||||
def translate_type(self, _type, native=False):
|
||||
def translate_type(self, _type, native=False, jni=False):
|
||||
if type(_type) is AbsApi.ListType:
|
||||
ptrtype = ''
|
||||
if type(_type.containedTypeDesc) is AbsApi.ClassType:
|
||||
|
|
@ -124,8 +129,8 @@ class JavaTranslator(object):
|
|||
return 'void'
|
||||
return _type.name
|
||||
|
||||
def translate_argument(self, _arg, native=False):
|
||||
return '{0} {1}'.format(self.translate_type(_arg.type, native), self.translate_argument_name(_arg.name))
|
||||
def translate_argument(self, _arg, native=False, jni=False):
|
||||
return '{0} {1}'.format(self.translate_type(_arg.type, native, jni), self.translate_argument_name(_arg.name))
|
||||
|
||||
def translate_property(self, _property):
|
||||
properties = []
|
||||
|
|
@ -135,6 +140,14 @@ class JavaTranslator(object):
|
|||
properties.append(self.translate_method(_property.setter))
|
||||
return properties
|
||||
|
||||
def translate_jni_property(self, _property):
|
||||
properties = []
|
||||
if _property.getter is not None:
|
||||
properties.append(self.translate_jni_method(_property.getter))
|
||||
if _property.setter is not None:
|
||||
properties.append(self.translate_jni_method(_property.setter))
|
||||
return properties
|
||||
|
||||
def translate_method(self, _method):
|
||||
methodDict = {}
|
||||
|
||||
|
|
@ -186,10 +199,25 @@ class JavaTranslator(object):
|
|||
|
||||
return methodDict
|
||||
|
||||
def translate_jni_method(self, _method):
|
||||
methodDict = {}
|
||||
|
||||
methodDict['return'] = self.translate_type(_method.returnType, jni=True)
|
||||
methodDict['name'] = 'Java_' + self.jni_package + _method.parent.name.to_camel_case() + 'Impl_' + _method.name.to_camel_case(lower=True)
|
||||
|
||||
methodDict['params'] = 'JNIEnv *env, jobject thiz'
|
||||
for arg in _method.args:
|
||||
if arg is not _method.args[0]:
|
||||
methodDict['params'] += ', '
|
||||
methodDict['params'] += self.translate_argument(arg, jni=True)
|
||||
|
||||
return methodDict
|
||||
|
||||
def translate_class(self, _class):
|
||||
classDict = {
|
||||
'methods' : [],
|
||||
'staticMethods' : [],
|
||||
'jniMethods' : [],
|
||||
}
|
||||
|
||||
classDict['isLinphoneFactory'] = _class.name.to_camel_case() == "Factory"
|
||||
|
|
@ -198,20 +226,25 @@ class JavaTranslator(object):
|
|||
for _property in _class.properties:
|
||||
try:
|
||||
classDict['methods'] += self.translate_property(_property)
|
||||
classDict['jniMethods'] += self.translate_jni_property(_property)
|
||||
except AbsApi.Error as e:
|
||||
print('error while translating {0} property: {1}'.format(_property.name.to_snake_case(), e.args[0]))
|
||||
|
||||
for method in _class.instanceMethods:
|
||||
try:
|
||||
methodDict = self.translate_method(method)
|
||||
jniMethodDict = self.translate_jni_method(method)
|
||||
classDict['methods'].append(methodDict)
|
||||
classDict['jniMethods'].append(jniMethodDict)
|
||||
except AbsApi.Error as e:
|
||||
print('Could not translate {0}: {1}'.format(method.name.to_snake_case(fullName=True), e.args[0]))
|
||||
|
||||
for method in _class.classMethods:
|
||||
try:
|
||||
methodDict = self.translate_method(method)
|
||||
jniMethodDict = self.translate_jni_method(method)
|
||||
classDict['staticMethods'].append(methodDict)
|
||||
classDict['jniMethods'].append(jniMethodDict)
|
||||
except AbsApi.Error as e:
|
||||
print('Could not translate {0}: {1}'.format(method.name.to_snake_case(fullName=True), e.args[0]))
|
||||
|
||||
|
|
@ -301,8 +334,8 @@ class JavaClass(object):
|
|||
self.imports = []
|
||||
self.methods = self._class['methods']
|
||||
self.staticMethods = self._class['staticMethods']
|
||||
self.jniMethods = self._class['jniMethods']
|
||||
self.doc = self._class['doc']
|
||||
self.jniMethods = []
|
||||
self.enums = []
|
||||
|
||||
def add_enum(self, enum):
|
||||
|
|
@ -331,7 +364,7 @@ class GenWrapper(object):
|
|||
|
||||
self.parser = AbsApi.CParser(project)
|
||||
self.parser.parse_all()
|
||||
self.translator = JavaTranslator()
|
||||
self.translator = JavaTranslator(package)
|
||||
self.renderer = pystache.Renderer()
|
||||
self.jni = Jni()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue