JNIEXPORT jobjectArray JNICALL Java_ee_filosoft_vabamorf_Linguistic_synthesize(JNIEnv *env, jobject jobj, jobject info, jstring hint) { FUNCTION_HEADER; if (!linguistic) return NULL; try { jclass MorphInfoClass = env->FindClass("ee/filosoft/vabamorf/Linguistic$MorphInfo"); jmethodID MorphInfoClassConstructor = (MorphInfoClass ? env->GetMethodID(MorphInfoClass, "<init>", "()V") : 0); if (!MorphInfoClassConstructor) return NULL; CMorphInfo morphInfo; morphInfo.m_szRoot = FSJNIStrtoW(env, FSJNIGetStringField(env, info, "root")); morphInfo.m_szClitic = FSJNIStrtoW(env, FSJNIGetStringField(env, info, "clitic")); morphInfo.m_cPOS = FSJNIGetCharField(env, info, "pos"); morphInfo.m_szForm = FSJNIStrtoW(env, FSJNIGetStringField(env, info, "form")); CFSArray<CMorphInfo> results = linguistic->Synthesize(morphInfo, FSJNIStrtoW(env, hint)); jobjectArray synths=(jobjectArray)env->NewObjectArray(results.GetSize(), env->FindClass("java/lang/Object"), 0); for (INTPTR ip=0; ip<results.GetSize(); ip++) { jobject analyze1=env->NewObject(MorphInfoClass, MorphInfoClassConstructor); FSJNISetStringField(env, analyze1, "root", FSJNIWtoStr(env, results[ip].m_szRoot)); FSJNISetStringField(env, analyze1, "ending", FSJNIWtoStr(env, results[ip].m_szEnding)); FSJNISetStringField(env, analyze1, "clitic", FSJNIWtoStr(env, results[ip].m_szClitic)); FSJNISetCharField(env, analyze1, "pos", results[ip].m_cPOS); FSJNISetStringField(env, analyze1, "form", FSJNIWtoStr(env, results[ip].m_szForm)); env->SetObjectArrayElement(synths, ip, analyze1); } return synths; } catch(...) { return NULL; } }
jobject MorphInfoToJNI(JNIEnv *env, const CMorphInfo &MorphInfo) { jclass MorphInfoClass = env->FindClass("ee/filosoft/vabamorf/MorphInfo"); jmethodID MorphInfoClassConstructor = (MorphInfoClass ? env->GetMethodID(MorphInfoClass, "<init>", "()V") : 0); if (!MorphInfoClassConstructor) throw CFSException(); jobject morphInfo = env->NewObject(MorphInfoClass, MorphInfoClassConstructor); FSJNISetStringField(env, morphInfo, "root", FSJNIWtoStr(env, MorphInfo.m_szRoot)); FSJNISetStringField(env, morphInfo, "ending", FSJNIWtoStr(env, MorphInfo.m_szEnding)); FSJNISetStringField(env, morphInfo, "clitic", FSJNIWtoStr(env, MorphInfo.m_szClitic)); FSJNISetCharField(env, morphInfo, "pos", MorphInfo.m_cPOS); FSJNISetStringField(env, morphInfo, "form", FSJNIWtoStr(env, MorphInfo.m_szForm)); return morphInfo; }