diff --git a/generator/src/main/java/bwmirror/generator/JavaContext.java b/generator/src/main/java/bwmirror/generator/JavaContext.java index e197451..0e6faad 100644 --- a/generator/src/main/java/bwmirror/generator/JavaContext.java +++ b/generator/src/main/java/bwmirror/generator/JavaContext.java @@ -1,11 +1,13 @@ package bwmirror.generator; +import bwmirror.c.Param; import bwmirror.util.Generic; import bwmirror.util.PointerTest; import java.util.Arrays; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * Created with IntelliJ IDEA. @@ -29,6 +31,8 @@ public class JavaContext { private List selfReturnTypes = Arrays.asList("BWTA::Polygon"); + private Map requiresExplicitDummyPredicate = new HashMap<>(); + private String packageName = "bwapi"; @@ -39,6 +43,8 @@ public class JavaContext { javaToCType.put("void", "void"); javaToCType.put("boolean", "jboolean"); javaToCType.put("String", "jstring"); + + requiresExplicitDummyPredicate.put("getUnitsInWeaponRange", new Param("", "IdentityUnitFilter")); } public boolean isSelfReturnType(String clsName, String methodName) { @@ -93,6 +99,10 @@ public class JavaContext { return constantTypes.contains(javaType); } + public boolean needsExtraFilterParameter(String methodName) { return requiresExplicitDummyPredicate.containsKey(methodName); } + + public Param getExtraFilterParameter(String methodName) { return requiresExplicitDummyPredicate.get(methodName); } + public String ptrCType() { return "jobject"; } diff --git a/generator/src/main/java/bwmirror/generator/ccalls/CallImplementer.java b/generator/src/main/java/bwmirror/generator/ccalls/CallImplementer.java index 5d106c8..71432f4 100644 --- a/generator/src/main/java/bwmirror/generator/ccalls/CallImplementer.java +++ b/generator/src/main/java/bwmirror/generator/ccalls/CallImplementer.java @@ -60,7 +60,12 @@ public class CallImplementer { "#include \n" + "#include \n" + "\n" + - "using namespace BWAPI;\n\n"); + "using namespace BWAPI;\n\n" + + "\n" + + "bool IdentityUnitFilter(Unit u) {\n" + + "\treturn true;\n" + + "}\n" + + "\n"); } private void implementAccessObject(String clsName, String objName) { @@ -505,6 +510,8 @@ public class CallImplementer { String genericType = convertToBWTA(Generic.extractGeneric(javaRetType)); if (javaPackageName.equals("bwta") || (!genericType.equals("UnitType") && !genericType.equals("Position") && !genericType.equals("TilePosition"))){ out.print(wrapInCCollection(genericType, javaMethodName) + " cresult = " + objectAccessor + (javaContext.isSelfReturnType(clsName, javaMethodName) ? "" : javaMethodName + "(")); + if (javaContext.needsExtraFilterParameter(javaMethodName)) + params.add(javaContext.getExtraFilterParameter(javaMethodName)); implementRealParams(params); if (!javaContext.isSelfReturnType(clsName, javaMethodName)) { out.print(")");