diff --git a/generator/src/main/java/bwmirror/generator/c/Bind.java b/generator/src/main/java/bwmirror/generator/c/Bind.java index 923b319..57eecfc 100644 --- a/generator/src/main/java/bwmirror/generator/c/Bind.java +++ b/generator/src/main/java/bwmirror/generator/c/Bind.java @@ -48,7 +48,10 @@ public class Bind { private void implementMirror_initTables(List declarationList) { out.println("JNIEXPORT void JNICALL Java_" + context.getPackageName() + "_Mirror_initTables(JNIEnv * env, jclass jclz){"); + out.println("if (areTypeTablesInitialized) return;"); implementVariablesBind(declarationList); + out.println("areTypeTablesInitialized = true;"); + out.println("println(\"BWMirror lookup tables are initialized.\");"); out.println("}"); out.println(); } @@ -196,6 +199,7 @@ public class Bind { out.println("getId = env->GetMethodID(cls,\"\", \"(III)V\");"); } else { out.println("getId = env->GetStaticMethodID(cls, \"get\", \"(J)L" + context.getPackageName() + "/" + cClass.getName() + ";\");"); + out.println("table" + cClass.getName() + ".clear();"); } printedIntro = true; } diff --git a/generator/src/main/java/bwmirror/generator/c/TypeTable.java b/generator/src/main/java/bwmirror/generator/c/TypeTable.java index c8a43f6..b7c8ced 100644 --- a/generator/src/main/java/bwmirror/generator/c/TypeTable.java +++ b/generator/src/main/java/bwmirror/generator/c/TypeTable.java @@ -28,6 +28,8 @@ public class TypeTable { } } out.println(); + out.println("bool areTypeTablesInitialized = false;"); + out.println(); } private void checkTypeTable(CClass cClass) { diff --git a/manual-bwapi-src/Mirror.java b/manual-bwapi-src/Mirror.java index da730e5..27bb5e9 100644 --- a/manual-bwapi-src/Mirror.java +++ b/manual-bwapi-src/Mirror.java @@ -109,7 +109,7 @@ public class Mirror { /** * Initializes all BWAPI constant lookup tables. */ - private static native void initTables(); + public static native void initTables(); /** * Initializes a connection to Broodwar, initializes the a {@link Game} object, and dispatches