Browse Source

JNI-19 more cleanup - this time with a baseball bat - incredible how much nonsense can be stuffed in a generator without any change on generated code. #comment this should fix own_identities_retrieve

JNI-44
Edouard Tisserant 9 years ago
parent
commit
3ed5ac7c46
  1. 125
      src/gen_cpp_Engine.ysl2

125
src/gen_cpp_Engine.ysl2

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

Loading…
Cancel
Save