@ -62,16 +62,19 @@ tstylesheet {
||
apply "parm[returns|creates]", mode=return;
choose {
when "$returning > 1" {
apply "parm[returns|creates]", mode=return;
apply "parm[1]", mode=return {
with "name" > result
with "jtype" > Engine$_«@name»_Return
with "sig" > (Lorg/pEp/jniadapter/Engine;)V
with "jnitype" > InnerClass
}
||
jobject result_ = NULL;
jclass clazz_result_ = findClass(env, "org/pEp/jniadapter/Engine$_«@name»_Return");
assert(clazz_result_);
jmethodID constructor_result_ = env->GetMethodID(clazz_result_, "<init>", "(Lorg/pEp/jniadapter/Engine;)V");
assert(constructor_result_);
result_ = env->NewObject(clazz_result_, constructor_result_, obj);
||
apply "parm[returns|creates]", mode=setresult
with "jtype" > org/pEp/jniadapter/Engine$_«@name»_Return
@ -82,7 +85,6 @@ tstylesheet {
}
when "$returning = 1" {
apply "parm[returns|creates]", mode=return;
||
return «name(parm[returns|creates]/*[3])»_;
@ -120,98 +122,57 @@ tstylesheet {
param "type", "name(*[2])";
param "jtype" call "toJava" with "type", "$type";
param "name", "name(*[3])";
param "jnitype" choose {
when "$type = 'message' or $type = 'identity'" > jlong
when "ancestor::namespace/child::enum[@name=$type]" > jint
when "$type = 'stringlist'" > jbyteArray
otherwise >
}
param "retname", "$name";
param "sig" choose {
when "$type = 'message' or $type = 'identity'" > (J)V
when "ancestor::namespace/child::enum[@name=$type]" > (I)V
when "$type = 'stringlist'" > (Ljava.lang.Object;)V
otherwise > ()V
}
choose {
when "$jnitype = 'jbyteArray'"
||
jobject «$name»_ = NULL;
if (_«$retname»)
«$name»_ = from_stringlist(env, _«$retname»);
||
when "$type = 'identity'"
when "$type = 'stringlist' or $type = 'stringpairlist' or $type = 'identity' or $type = 'identitylist'"
||
jobject «$name»_ = NULL;
if (_«$retname»)
«$name»_ = from_identity(env, _«$retname»);
||
when "$type = 'stringpairlist'"
||
jobject «$name»_ = NULL;
if (_«$retname»)
«$name»_ = from_stringpairlist(env, _«$retname»);
if (_«$name»)
«$name»_ = from_«$type»(env, _«$name»);
||
when "ancestor::namespace/child::enum[@name=$type]" {
const "ljtype" call "lcase" with "text","$jtype";
||
jobject «$name»_ = NULL;
{
jclass clazz_«$ljtype» = findClass(env, "org/pEp/jniadapter/«$jtype»");
assert(clazz_«$ljtype»);
jmethodID method_values = env->GetStaticMethodID(clazz_«$ljtype», "values",
"()[Lorg/pEp/jniadapter/«$jtype»;");
assert(method_values);
jfieldID field_value = env->GetFieldID(clazz_«$ljtype», "value", "I");
assert(field_value);
jobjectArray values = (jobjectArray) env->CallStaticObjectMethod(clazz_«$ljtype»,
method_values);
assert(values);
jsize values_size = env->GetArrayLength(values);
for (jsize i = 0; i < values_size; i++) {
jobject element = env->GetObjectArrayElement(values, i);
assert(element);
jint value = env->GetIntField(element, field_value);
if (value == (jint) _«$name») {
«$name»_ = element;
break;
const "ljtype" call "lcase" with "text","$jtype";
||
jobject «$name»_ = NULL;
{
jclass clazz_«$ljtype» = findClass(env, "org/pEp/jniadapter/«$jtype»");
assert(clazz_«$ljtype»);
jmethodID method_values = env->GetStaticMethodID(clazz_«$ljtype», "values",
"()[Lorg/pEp/jniadapter/«$jtype»;");
assert(method_values);
jfieldID field_value = env->GetFieldID(clazz_«$ljtype», "value", "I");
assert(field_value);
jobjectArray values = (jobjectArray) env->CallStaticObjectMethod(clazz_«$ljtype»,
method_values);
assert(values);
jsize values_size = env->GetArrayLength(values);
for (jsize i = 0; i < values_size; i++) {
jobject element = env->GetObjectArrayElement(values, i);
assert(element);
jint value = env->GetIntField(element, field_value);
if (value == (jint) _«$name») {
«$name»_ = element;
break;
}
}
}
}
||
||
}
otherwise {
| jobject «$name»_ = NULL;
indent(0);
if "$retname != 'result'" > if (_«$retname»)
> {\n
otherwise {
||
jobject «$name»_ = NULL;
if (_«$name») {
jclass clazz_«$name»_ = findClass(env, "org/pEp/jniadapter/«$jtype»");
assert(clazz_«$name»_);
jmethodID constructor_«$name»_ = env->GetMethodID(clazz_«$name»_, "<init>", "«$sig» ");
jmethodID constructor_«$name»_ = env->GetMethodID(clazz_«$name»_, "<init>", "(J)V ");
assert(constructor_«$name»_);
||
indent(1);
> «$name»_ = env->NewObject(clazz_«$name»_, constructor_«$name»_
choose {
when "$jnitype = 'InnerClass'" > , obj
when "$jnitype != ''" > , («$jnitype») _«$retname»
}
> );\n
||
«$name»_ = env->NewObject(clazz_«$name»_, constructor_«$name»_, (jlong) _«$name»);
}
||