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 ) {