From 3ed5ac7c46a69b64e671924cdcca8272e039f414 Mon Sep 17 00:00:00 2001 From: Edouard Tisserant Date: Fri, 25 Nov 2016 11:50:12 +0100 Subject: [PATCH] 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 --- src/gen_cpp_Engine.ysl2 | 127 ++++++++++++++-------------------------- 1 file changed, 44 insertions(+), 83 deletions(-) diff --git a/src/gen_cpp_Engine.ysl2 b/src/gen_cpp_Engine.ysl2 index af339d9..326f714 100644 --- a/src/gen_cpp_Engine.ysl2 +++ b/src/gen_cpp_Engine.ysl2 @@ -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_, "", "(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»_, "", "«$sig»"); + jmethodID constructor_«$name»_ = env->GetMethodID(clazz_«$name»_, "", "(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»); } ||