From 2e74b97b4af899f5448bf131bd19c2b2e9dc6e93 Mon Sep 17 00:00:00 2001 From: Eric House <xwords@eehouse.org> Date: Fri, 17 Oct 2014 07:46:32 -0700 Subject: [PATCH] oops: set typeset field in java struct --- xwords4/android/XWords4/jni/andutils.c | 27 ++++++++++++++++---------- xwords4/android/XWords4/jni/andutils.h | 2 ++ xwords4/android/XWords4/jni/xwjni.c | 2 ++ 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/xwords4/android/XWords4/jni/andutils.c b/xwords4/android/XWords4/jni/andutils.c index 644f645ff..bdf9e4251 100644 --- a/xwords4/android/XWords4/jni/andutils.c +++ b/xwords4/android/XWords4/jni/andutils.c @@ -1,4 +1,4 @@ -/* -*-mode: C; compile-command: "cd ..; ../scripts/ndkbuild.sh -j3"; -*- */ +/* -*- compile-command: "find-and-ant.sh debug install"; -*- */ /* * Copyright © 2009-2010 by Eric House (xwords@eehouse.org). All * rights reserved. @@ -418,20 +418,27 @@ getMethodID( JNIEnv* env, jobject obj, const char* proc, const char* sig ) return mid; } +void +setTypeSetFieldIn( JNIEnv* env, const CommsAddrRec* addr, jobject jTarget, + const char* fieldName ) +{ + jobject jtypset = addrTypesToJ( env, addr ); + XP_ASSERT( !!jtypset ); + jclass cls = (*env)->GetObjectClass( env, jTarget ); + XP_ASSERT( !!cls ); + jfieldID fid = (*env)->GetFieldID( env, cls, fieldName, //"conTypes", + "L" PKG_PATH("jni/CommsAddrRec$CommsConnTypeSet") ";" ); + XP_ASSERT( !!fid ); + (*env)->SetObjectField( env, jTarget, fid, jtypset ); + deleteLocalRef( env, jtypset ); +} + /* Copy C object data into Java object */ void setJAddrRec( JNIEnv* env, jobject jaddr, const CommsAddrRec* addr ) { XP_ASSERT( !!addr ); - jobject jtypset = addrTypesToJ( env, addr ); - XP_ASSERT( !!jtypset ); - jclass cls = (*env)->GetObjectClass( env, jaddr ); - XP_ASSERT( !!cls ); - jfieldID fid = (*env)->GetFieldID( env, cls, "conTypes", - "L" PKG_PATH("jni/CommsAddrRec$CommsConnTypeSet") ";" ); - XP_ASSERT( !!fid ); - (*env)->SetObjectField( env, jaddr, fid, jtypset ); - deleteLocalRefs( env, cls, jtypset, DELETE_NO_REF ); + setTypeSetFieldIn( env, addr, jaddr, "conTypes" ); CommsConnType typ; for ( XP_U32 st = 0; addr_iter( addr, &typ, &st ); ) { diff --git a/xwords4/android/XWords4/jni/andutils.h b/xwords4/android/XWords4/jni/andutils.h index c0ccb98e9..214c41022 100644 --- a/xwords4/android/XWords4/jni/andutils.h +++ b/xwords4/android/XWords4/jni/andutils.h @@ -84,6 +84,8 @@ jmethodID getMethodID( JNIEnv* env, jobject obj, const char* proc, void setJAddrRec( JNIEnv* env, jobject jaddr, const CommsAddrRec* addr ); void getJAddrRec( JNIEnv* env, CommsAddrRec* addr, jobject jaddr ); +void setTypeSetFieldIn( JNIEnv* env, const CommsAddrRec* addr, jobject jTarget, + const char* fldName ); jobject addrTypesToJ( JNIEnv* env, const CommsAddrRec* addr ); jint jenumFieldToInt( JNIEnv* env, jobject jobj, const char* field, const char* fieldSig ); diff --git a/xwords4/android/XWords4/jni/xwjni.c b/xwords4/android/XWords4/jni/xwjni.c index 5ba9fc250..20841d256 100644 --- a/xwords4/android/XWords4/jni/xwjni.c +++ b/xwords4/android/XWords4/jni/xwjni.c @@ -1346,6 +1346,8 @@ Java_org_eehouse_android_xw4_jni_XwJNI_game_1summarize setInt( env, jsummary, "nPacketsPending", comms_countPendingPackets( state->game.comms ) ); + setTypeSetFieldIn( env, &addr, jsummary, "conTypes" ); + CommsConnType typ; for ( XP_U32 st = 0; addr_iter( &addr, &typ, &st ); ) { switch( typ ) {