mapInt2NewInts.put(origInt, mapNewIntMethods);
}
+
+/*================
+ * Java generation
+ *================/
/**
* HELPER: writeMethodJavaLocalInterface() writes the method of the local interface
/**
* HELPER: writePropertiesJavaStub() writes the properties of the stub class
*/
- private void writePropertiesJavaStub(String intface, String newIntface, boolean callbackExist, Set<String> callbackClasses) {
+ private void writePropertiesJavaStub(String intface, Set<String> methods, InterfaceDecl intDecl) {
- println("private IoTRMICall rmiCall;");
- println("private String callbackAddress;");
- println("private int[] ports;\n");
// Get the object Id
Integer objId = mapIntfaceObjId.get(intface);
- println("private final static int objectId = " + objId + ";");
- //mapNewIntfaceObjId.put(newIntface, objId);
- //mapIntfaceObjId.put(intface, objId++);
- if (callbackExist) {
- // We assume that each class only has one callback interface for now
- Iterator it = callbackClasses.iterator();
- String callbackType = (String) it.next();
- println("// Callback properties");
- println("private IoTRMIObject rmiObj;");
- println("List<" + callbackType + "> listCallbackObj;");
- println("private int objIdCnt = 0;");
- // Generate permission stuff for callback stubs
- DeclarationHandler decHandler = mapIntDeclHand.get(callbackType);
- InterfaceDecl intDecl = (InterfaceDecl) decHandler.getInterfaceDecl(callbackType);
- writePropertiesJavaPermission(callbackType, intDecl);
+ println("private int objectId = " + objId + ";");
+ println("private IoTRMIComm rmiComm;");
+ // Write the list of AtomicBoolean variables
+ println("// Synchronization variables");
+ for (String method : methods) {
+ // Generate AtomicBooleans for methods that have return values
+ String returnType = intDecl.getMethodType(method);
+ int methodNumId = intDecl.getMethodNumId(method);
+ if (!returnType.equals("void")) {
+ println("private AtomicBoolean retValueReceived" + methodNumId + " = new AtomicBoolean(false);");
+ }
}
println("\n");
}
/**
* HELPER: writeConstructorJavaStub() writes the constructor of the stub class
*/
- private void writeConstructorJavaStub(String intface, String newStubClass, boolean callbackExist, Set<String> callbackClasses) {
+ private void writeConstructorJavaStub(String intface, String newStubClass, Set<String> methods, InterfaceDecl intDecl) {
- println("public " + newStubClass + "(int _port, String _skeletonAddress, String _callbackAddress, int _rev, int[] _ports) throws Exception {");
- println("callbackAddress = _callbackAddress;");
- println("ports = _ports;");
- println("rmiCall = new IoTRMICall(_port, _skeletonAddress, _rev);");
- if (callbackExist) {
- Iterator it = callbackClasses.iterator();
- String callbackType = (String) it.next();
- writeConstructorJavaPermission(callbackType);
- println("listCallbackObj = new ArrayList<" + callbackType + ">();");
- DeclarationHandler decHandler = mapIntDeclHand.get(callbackType);
- InterfaceDecl intDecl = (InterfaceDecl) decHandler.getInterfaceDecl(callbackType);
- writeJavaInitCallbackPermission(callbackType, intDecl, callbackExist);
- println("___initCallBack();");
+ println("public " + newStubClass + "(int _localPortSend, int _localPortRecv, int _portSend, int _portRecv, String _skeletonAddress, int _rev) throws Exception {");
+ println("rmiComm = new IoTRMICommClient(_localPortSend, _localPortRecv, _portSend, _portRecv, _skeletonAddress, _rev);");
+ // Register the AtomicBoolean variables
+ for (String method : methods) {
+ // Generate AtomicBooleans for methods that have return values
+ String returnType = intDecl.getMethodType(method);
+ int methodNumId = intDecl.getMethodNumId(method);
+ if (!returnType.equals("void")) {
+ println("rmiComm.registerStub(objectId, " + methodNumId + ", retValueReceived" + methodNumId + ");");
+ }
+ }
+ println("IoTRMIUtil.mapStub.put(objectId, this);");
+ println("}\n");
+ }
+
+
+ /**
+ * HELPER: writeCallbackConstructorJavaStub() writes the callback constructor of the stub class
+ */
+ private void writeCallbackConstructorJavaStub(String intface, String newStubClass, Set<String> methods, InterfaceDecl intDecl) {
+
+ println("public " + newStubClass + "(IoTRMIComm _rmiComm, int _objectId) throws Exception {");
+ println("rmiComm = _rmiComm;");
+ println("objectId = _objectId;");
+ // Register the AtomicBoolean variables
+ for (String method : methods) {
+ // Generate AtomicBooleans for methods that have return values
+ String returnType = intDecl.getMethodType(method);
+ int methodNumId = intDecl.getMethodNumId(method);
+ if (!returnType.equals("void")) {
+ println("rmiComm.registerStub(objectId, " + methodNumId + ", retValueReceived" + methodNumId + ");");
+ }
}
println("}\n");
}
}
- /**
- * HELPER: writeInitCallbackJavaStub() writes callback initialization in stub
- */
- private void writeInitCallbackJavaStub(String intface, InterfaceDecl intDecl, String newStubClass) {
-
- println("public void ___initCallBack() {");
- // Generate main thread for callbacks
- println("Thread thread = new Thread() {");
- println("public void run() {");
- println("try {");
- int port = getPortCount(newStubClass);
- println("rmiObj = new IoTRMIObject(ports[" + port + "]);");
- println("while (true) {");
- println("byte[] method = rmiObj.getMethodBytes();");
- println("int objId = IoTRMIObject.getObjectId(method);");
- println(intface + "_CallbackSkeleton skel = (" + intface + "_CallbackSkeleton) listCallbackObj.get(objId);");
- println("if (skel != null) {");
- writeJavaMethodCallbackPermission(intface);
- println("skel.invokeMethod(rmiObj);");
- print("}");
- println(" else {");
- println("throw new Error(\"" + intface + ": Object with Id \" + objId + \" not found!\");");
- println("}");
- println("}");
- print("}");
- println(" catch (Exception ex) {");
- println("ex.printStackTrace();");
- println("throw new Error(\"Error instantiating class " + intface + "_CallbackSkeleton!\");");
- println("}");
- println("}");
- println("};");
- println("thread.start();\n");
- // Generate info sending part
- String method = "___initCallBack()";
- int methodNumId = intDecl.getHelperMethodNumId(method);
- println("int methodId = " + methodNumId + ";");
- println("Class<?> retType = void.class;");
- println("Class<?>[] paramCls = new Class<?>[] { int[].class, String.class, int.class };");
- println("Object[] paramObj = new Object[] { ports, callbackAddress, 0 };");
- println("rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);");
- println("}\n");
- }
-
-
/**
* HELPER: checkAndWriteEnumTypeJavaStub() writes the enum type (convert from enum to int)
*/
/**
* HELPER: checkAndWriteEnumRetTypeJavaStub() writes the enum return type (convert from enum to int)
*/
- private void checkAndWriteEnumRetTypeJavaStub(String retType) {
+ private void checkAndWriteEnumRetTypeJavaStub(String retType, String method, InterfaceDecl intDecl) {
+ // Write the wait-for-return-value part
+ writeWaitForReturnValue(method, intDecl, "Object retObj = rmiComm.getReturnValue(retType, null);");
// Strips off array "[]" for return type
String pureType = getSimpleArrayType(getGenericType(retType));
// Take the inner type of generic
} else { // Just one element
println("Object[] paramObjStruct" + i + " = new Object[] { new Integer(1) };");
}
- println("rmiCall.remoteCall(objectId, methodIdStruct" + i +
- ", retTypeStruct" + i + ", null, paramClsStruct" + i +
- ", paramObjStruct" + i + ");\n");
+ println("rmiComm.remoteCall(objectId, methodIdStruct" + i +
+ ", paramClsStruct" + i + ", paramObjStruct" + i + ");\n");
}
}
}
for (int i = 0; i < members.size(); i++) {
String prmType = checkAndGetArray(memTypes.get(i), members.get(i));
print("structRet[i]." + getSimpleIdentifier(members.get(i)));
- println(" = (" + getSimpleType(getEnumType(prmType)) + ") retObj[retObjPos++];");
+ println(" = (" + getSimpleType(getEnumType(prmType)) + ") retActualObj[retObjPos++];");
}
println("}");
} else if (isList(retType)) { // A list
for (int i = 0; i < members.size(); i++) {
String prmType = checkAndGetArray(memTypes.get(i), members.get(i));
print("structRetMem." + getSimpleIdentifier(members.get(i)));
- println(" = (" + getSimpleType(getEnumType(prmType)) + ") retObj[retObjPos++];");
+ println(" = (" + getSimpleType(getEnumType(prmType)) + ") retActualObj[retObjPos++];");
}
println("structRet.add(structRetMem);");
println("}");
for (int i = 0; i < members.size(); i++) {
String prmType = checkAndGetArray(memTypes.get(i), members.get(i));
print("structRet." + getSimpleIdentifier(members.get(i)));
- println(" = (" + getSimpleType(getEnumType(prmType)) + ") retObj[retObjPos++];");
+ println(" = (" + getSimpleType(getEnumType(prmType)) + ") retActualObj[retObjPos++];");
}
}
println("return structRet;");
/**
* HELPER: writeStructReturnJavaStub() writes parameters if struct is present for return statement
*/
- private void writeStructReturnJavaStub(String simpleType, String retType) {
+ private void writeStructReturnJavaStub(String simpleType, String retType, String method, InterfaceDecl intDecl) {
- // Handle the returned struct!!!
- println("Object retLenObj = rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);");
+ // Handle the returned struct size
+ writeWaitForReturnValue(method, intDecl, "Object retObj = rmiComm.getReturnValue(retType, null);");
// Minimum retLen is 1 if this is a single struct object
- println("int retLen = (int) retLenObj;");
+ println("int retLen = (int) retObj;");
int numMem = getNumOfMembers(simpleType);
println("Class<?>[] retCls = new Class<?>[" + numMem + "*retLen];");
println("Class<?>[] retClsVal = new Class<?>[" + numMem + "*retLen];");
println("retClsVal[retPos++] = null;");
}
}
- println("Object[] retObj = rmiCall.getStructObjects(retCls, retClsVal);");
+ //println("Object[] retActualObj = rmiComm.getStructObjects(retCls, retClsVal);");
+ // Handle the actual returned struct
+ writeWaitForReturnValue(method, intDecl, "Object[] retActualObj = rmiComm.getStructObjects(retCls, retClsVal);");
if (isArray(retType)) { // An array
println(simpleType + "[] structRet = new " + simpleType + "[retLen];");
println("for(int i = 0; i < retLen; i++) {");
}
+ /**
+ * HELPER: writeWaitForReturnValue() writes the synchronization part for return values
+ */
+ private void writeWaitForReturnValue(String method, InterfaceDecl intDecl, String getReturnValue) {
+
+ println("// Waiting for return value");
+ int methodNumId = intDecl.getMethodNumId(method);
+ println("while (!retValueReceived" + methodNumId + ".get());");
+ println(getReturnValue);
+ println("retValueReceived" + methodNumId + ".set(false);");
+ println("rmiComm.setGetReturnBytes();\n");
+ }
+
+
/**
* HELPER: writeStdMethodBodyJavaStub() writes the standard method body in the stub class
*/
for (int i = 0; i < methParams.size(); i++) {
String prmType = methPrmTypes.get(i);
if (checkCallbackType(prmType, callbackType)) { // Check if this has callback object
- print("int.class");
+ print("int[].class");
} else { // Generate normal classes if it's not a callback object
String paramType = checkAndGetArray(methPrmTypes.get(i), methParams.get(i));
print(getSimpleType(getEnumType(paramType)) + ".class");
for (int i = 0; i < methParams.size(); i++) {
String paramType = methPrmTypes.get(i);
if (checkCallbackType(paramType, callbackType)) { // Check if this has callback object
- //if (isArray(methPrmTypes.get(i), methParams.get(i)))
- if (isArray(methParams.get(i)))
- print(getSimpleIdentifier(methParams.get(i)) + ".length");
- else if (isList(methPrmTypes.get(i)))
- print(getSimpleIdentifier(methParams.get(i)) + ".size()");
- else
- print("new Integer(1)");
+ print("objIdSent");
} else
print(getEnumParam(methPrmTypes.get(i), getSimpleIdentifier(methParams.get(i)), i));
// Check if this is the last element (don't print a comma)
}
println(" };");
}
+ // Send method call first and wait for return value separately
+ println("rmiComm.remoteCall(objectId, methodId, paramCls, paramObj);");
// Check if this is "void"
- if (retType.equals("void")) {
- println("rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);");
- } else { // We do have a return value
+ if (!retType.equals("void")) { // We do have a return value
// Generate array of parameter types
if (isStructClass(getGenericType(getSimpleArrayType(retType)))) {
- writeStructReturnJavaStub(getGenericType(getSimpleArrayType(retType)), retType);
+ writeStructReturnJavaStub(getGenericType(getSimpleArrayType(retType)), retType, method, intDecl);
} else {
// This is an enum type
if (getParamCategory(getGenericType(getSimpleArrayType(retType))) == ParamCategory.ENUM) {
- println("Object retObj = rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);");
- checkAndWriteEnumRetTypeJavaStub(retType);
+ //println("Object retObj = rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);");
+ checkAndWriteEnumRetTypeJavaStub(retType, method, intDecl);
} else if (getParamCategory(retType) == ParamCategory.NONPRIMITIVES) {
// Check if the return value NONPRIMITIVES
String retGenValType = getGenericType(retType);
println("Class<?> retGenValType = " + retGenValType + ".class;");
- println("Object retObj = rmiCall.remoteCall(objectId, methodId, retType, retGenValType, paramCls, paramObj);");
+ writeWaitForReturnValue(method, intDecl, "Object retObj = rmiComm.getReturnValue(retType, retGenValType);");
println("return (" + retType + ")retObj;");
} else {
- println("Object retObj = rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);");
+ writeWaitForReturnValue(method, intDecl, "Object retObj = rmiComm.getReturnValue(retType, null);");
println("return (" + retType + ")retObj;");
}
}
}
+ /**
+ * HELPER: writeCallbackInstantiationMethodBodyJavaStub() writes the callback object instantiation in the method of the stub class
+ */
+ private void writeCallbackInstantiationMethodBodyJavaStub(String paramIdent, String callbackType, int counter, boolean isMultipleCallbacks) {
+
+ println("if (!IoTRMIUtil.mapSkel.containsKey(" + paramIdent + ")) {");
+ println("int newObjIdSent = rmiComm.getObjectIdCounter();");
+ if (isMultipleCallbacks)
+ println("objIdSent[i++] = newObjIdSent;");
+ else
+ println("objIdSent[0] = newObjIdSent;");
+ println("rmiComm.decrementObjectIdCounter();");
+ println(callbackType + "_Skeleton skel" + counter + " = new " + callbackType + "_Skeleton(" + paramIdent + ", rmiComm, newObjIdSent);");
+ println("IoTRMIUtil.mapSkel.put(" + paramIdent + ", skel0);");
+ println("IoTRMIUtil.mapSkelId.put(" + paramIdent + ", newObjIdSent);");
+ println("Thread thread = new Thread() {");
+ println("public void run() {");
+ println("try {");
+ println("skel0.___waitRequestInvokeMethod();");
+ println("} catch (Exception ex) {");
+ println("ex.printStackTrace();");
+ println("throw new Error(\"Exception when trying to run ___waitRequestInvokeMethod() for " +
+ callbackType + "_Skeleton!\");");
+ println("}");
+ println("}");
+ println("};");
+ println("thread.start();");
+ println("while(!skel0.didAlreadyInitWaitInvoke());");
+ println("}");
+ println("else");
+ println("{");
+ println("int newObjIdSent = IoTRMIUtil.mapSkelId.get(" + paramIdent + ");");
+ if (isMultipleCallbacks)
+ println("objIdSent[i++] = newObjIdSent;");
+ else
+ println("objIdSent[0] = newObjIdSent;");
+ println("}");
+ }
+
+
/**
* HELPER: writeCallbackMethodBodyJavaStub() writes the callback method of the stub class
*/
private void writeCallbackMethodBodyJavaStub(InterfaceDecl intDecl, List<String> methParams,
List<String> methPrmTypes, String method, String callbackType) {
+ // Determine callback object counter type (List vs. single variable)
+ print("int[] objIdSent = ");
+ for (int i = 0; i < methParams.size(); i++) {
+ String paramType = methPrmTypes.get(i);
+ if (checkCallbackType(paramType, callbackType)) { // Check if this has callback object
+ String param = methParams.get(i);
+ if (isArray(methParams.get(i)))
+ println("new int[" + getSimpleIdentifier(methParams.get(i)) + ".length];");
+ else if (isList(methPrmTypes.get(i)))
+ println("new int[" + getSimpleIdentifier(methParams.get(i)) + ".size()];");
+ else
+ println("new int[1];");
+ }
+ }
println("try {");
// Check if this is single object, array, or list of objects
for (int i = 0; i < methParams.size(); i++) {
if (checkCallbackType(paramType, callbackType)) { // Check if this has callback object
String param = methParams.get(i);
if (isArrayOrList(paramType, param)) { // Generate loop
+ println("int i = 0;");
println("for (" + getGenericType(paramType) + " cb : " + getSimpleIdentifier(param) + ") {");
- println(callbackType + "_CallbackSkeleton skel" + i + " = new " + callbackType + "_CallbackSkeleton(cb, callbackAddress, objIdCnt++);");
+ writeCallbackInstantiationMethodBodyJavaStub("cb", callbackType, i, true);
} else
- println(callbackType + "_CallbackSkeleton skel" + i + " = new " + callbackType + "_CallbackSkeleton(" +
- getSimpleIdentifier(param) + ", callbackAddress, objIdCnt++);");
- println("listCallbackObj.add(skel" + i + ");");
+ writeCallbackInstantiationMethodBodyJavaStub(getSimpleIdentifier(param), callbackType, i, false);
if (isArrayOrList(paramType, param))
println("}");
}
println("}\n");
// Write the init callback helper method
if (isCallbackMethod && !isDefined) {
- writeInitCallbackJavaStub(callbackType, intDecl, newStubClass);
+ //writeInitCallbackJavaStub(callbackType, intDecl, newStubClass);
isDefined = true;
}
}
// Write class header
println("public class " + newStubClass + " implements " + newIntface + " {\n");
// Write properties
- writePropertiesJavaStub(intface, newIntface, callbackExist, callbackClasses);
+ writePropertiesJavaStub(intface, intMeth.getValue(), intDecl);
// Write constructor
- writeConstructorJavaStub(intface, newStubClass, callbackExist, callbackClasses);
+ writeConstructorJavaStub(intface, newStubClass, intMeth.getValue(), intDecl);
+ // Write callback constructor (used if this stub is treated as a callback stub)
+ writeCallbackConstructorJavaStub(intface, newStubClass, intMeth.getValue(), intDecl);
// Write methods
writeMethodJavaStub(intMeth.getValue(), intDecl, callbackClasses, newStubClass);
println("}");
}
- /**
- * HELPER: writePropertiesJavaCallbackStub() writes the properties of the callback stub class
- */
- private void writePropertiesJavaCallbackStub(String intface, String newIntface, boolean callbackExist, Set<String> callbackClasses) {
-
- println("private IoTRMICall rmiCall;");
- println("private String callbackAddress;");
- println("private int[] ports;\n");
- // Get the object Id
- println("private int objectId = 0;");
- if (callbackExist) {
- // We assume that each class only has one callback interface for now
- Iterator it = callbackClasses.iterator();
- String callbackType = (String) it.next();
- println("// Callback properties");
- println("private IoTRMIObject rmiObj;");
- println("List<" + callbackType + "> listCallbackObj;");
- println("private int objIdCnt = 0;");
- // Generate permission stuff for callback stubs
- DeclarationHandler decHandler = mapIntDeclHand.get(callbackType);
- InterfaceDecl intDecl = (InterfaceDecl) decHandler.getInterfaceDecl(callbackType);
- writePropertiesJavaPermission(callbackType, intDecl);
- }
- println("\n");
- }
-
-
- /**
- * HELPER: writeConstructorJavaCallbackStub() writes the constructor of the callback stub class
- */
- private void writeConstructorJavaCallbackStub(String intface, String newStubClass, boolean callbackExist, Set<String> callbackClasses) {
-
- // TODO: If we want callback in callback, then we need to add address and port initializations
- println("public " + newStubClass + "(IoTRMICall _rmiCall, String _callbackAddress, int _objectId, int[] _ports) throws Exception {");
- println("callbackAddress = _callbackAddress;");
- println("objectId = _objectId;");
- println("rmiCall = _rmiCall;");
- println("ports = _ports;");
- if (callbackExist) {
- Iterator it = callbackClasses.iterator();
- String callbackType = (String) it.next();
- writeConstructorJavaPermission(callbackType);
- println("listCallbackObj = new ArrayList<" + callbackType + ">();");
- DeclarationHandler decHandler = mapIntDeclHand.get(callbackType);
- InterfaceDecl intDecl = (InterfaceDecl) decHandler.getInterfaceDecl(callbackType);
- writeJavaInitCallbackPermission(callbackType, intDecl, callbackExist);
- println("___initCallBack();");
- }
- println("}\n");
- }
-
-
- /**
- * generateJavaCallbackStubClasses() generate callback stubs based on the methods list in Java
- * <p>
- * Callback stubs gets the IoTRMICall objects from outside of the class as contructor input
- * because all these stubs are populated by the class that takes in this object as a callback
- * object. In such a class, we only use one socket, hence one IoTRMICall, for all callback objects.
- */
- public void generateJavaCallbackStubClasses() throws IOException {
-
- // Create a new directory
- String path = createDirectories(dir, subdir);
- for (String intface : mapIntfacePTH.keySet()) {
-
- Map<String,Set<String>> mapNewIntMethods = mapInt2NewInts.get(intface);
- for (Map.Entry<String,Set<String>> intMeth : mapNewIntMethods.entrySet()) {
-
- // Open a new file to write into
- String newIntface = intMeth.getKey();
- String newStubClass = newIntface + "_CallbackStub";
- FileWriter fw = new FileWriter(path + "/" + newStubClass + ".java");
- pw = new PrintWriter(new BufferedWriter(fw));
- DeclarationHandler decHandler = mapIntDeclHand.get(intface);
- InterfaceDecl intDecl = (InterfaceDecl) decHandler.getInterfaceDecl(intface);
- // Pass in set of methods and get import classes
- Set<String> methods = intMeth.getValue();
- Set<String> importClasses = getImportClasses(methods, intDecl);
- List<String> stdImportClasses = getStandardJavaImportClasses();
- List<String> allImportClasses = getAllLibClasses(stdImportClasses, importClasses);
- printImportStatements(allImportClasses); println("");
- // Find out if there are callback objects
- Set<String> callbackClasses = getCallbackClasses(methods, intDecl);
- boolean callbackExist = !callbackClasses.isEmpty();
- // Write class header
- println("public class " + newStubClass + " implements " + newIntface + " {\n");
- // Write properties
- writePropertiesJavaCallbackStub(intface, newIntface, callbackExist, callbackClasses);
- // Write constructor
- writeConstructorJavaCallbackStub(intface, newStubClass, callbackExist, callbackClasses);
- // Write methods
- // TODO: perhaps need to generate callback for callback
- writeMethodJavaStub(intMeth.getValue(), intDecl, callbackClasses, newStubClass);
- println("}");
- pw.close();
- System.out.println("IoTCompiler: Generated callback stub class " + newStubClass + ".java...");
- }
- }
- }
-
-
/**
* HELPER: writePropertiesJavaSkeleton() writes the properties of the skeleton class
*/
- private void writePropertiesJavaSkeleton(String intface, boolean callbackExist, InterfaceDecl intDecl) {
+ private void writePropertiesJavaSkeleton(String intface, InterfaceDecl intDecl) {
println("private " + intface + " mainObj;");
- //println("private int ports;");
- println("private IoTRMIObject rmiObj;\n");
- println("private String callbackAddress;");
- // Callback
- if (callbackExist) {
- println("private int objIdCnt = 0;");
- println("private IoTRMICall rmiCall;");
- println("private int[] ports;\n");
- }
+ println("private int objectId = 0;");
+ println("// Communications and synchronizations");
+ println("private IoTRMIComm rmiComm;");
+ println("private AtomicBoolean didAlreadyInitWaitInvoke;");
+ println("private AtomicBoolean methodReceived;");
+ println("private byte[] methodBytes = null;");
+ println("// Permissions");
writePropertiesJavaPermission(intface, intDecl);
println("\n");
}
/**
* HELPER: writeConstructorJavaSkeleton() writes the constructor of the skeleton class
*/
- private void writeConstructorJavaSkeleton(String newSkelClass, String intface, InterfaceDecl intDecl, Collection<String> methods, boolean callbackExist) {
+ private void writeConstructorJavaSkeleton(String newSkelClass, String intface, InterfaceDecl intDecl,
+ Collection<String> methods, boolean callbackExist) {
- println("public " + newSkelClass + "(" + intface + " _mainObj, String _callbackAddress, int _port) throws Exception {");
+ println("public " + newSkelClass + "(" + intface + " _mainObj, int _portSend, int _portRecv) throws Exception {");
println("mainObj = _mainObj;");
- println("callbackAddress = _callbackAddress;");
- println("rmiObj = new IoTRMIObject(_port);");
+ println("rmiComm = new IoTRMICommServer(_portSend, _portRecv);");
// Generate permission control initialization
writeConstructorJavaPermission(intface);
- writeJavaInitCallbackPermission(intface, intDecl, callbackExist);
+ //writeJavaInitCallbackPermission(intface, intDecl, callbackExist);
writeStructPermissionJavaSkeleton(methods, intDecl, intface);
+ println("IoTRMIUtil.mapSkel.put(_mainObj, this);");
+ println("IoTRMIUtil.mapSkelId.put(_mainObj, objectId);");
+ println("didAlreadyInitWaitInvoke = new AtomicBoolean(false);");
+ println("methodReceived = new AtomicBoolean(false);");
+ println("rmiComm.registerSkeleton(objectId, methodReceived);");
+ println("Thread thread1 = new Thread() {");
+ println("public void run() {");
+ println("try {");
println("___waitRequestInvokeMethod();");
+ println("}");
+ println("catch (Exception ex)");
+ println("{");
+ println("ex.printStackTrace();");
+ println("}");
+ println("}");
+ println("};");
+ println("thread1.start();");
+ println("}\n");
+ }
+
+
+ /**
+ * HELPER: writeCallbackConstructorJavaSkeleton() writes the constructor of the skeleton class
+ */
+ private void writeCallbackConstructorJavaSkeleton(String newSkelClass, String intface, InterfaceDecl intDecl,
+ Collection<String> methods, boolean callbackExist) {
+
+ println("public " + newSkelClass + "(" + intface + " _mainObj, IoTRMIComm _rmiComm, int _objectId) throws Exception {");
+ println("mainObj = _mainObj;");
+ println("rmiComm = _rmiComm;");
+ println("objectId = _objectId;");
+ // Generate permission control initialization
+ writeConstructorJavaPermission(intface);
+ writeStructPermissionJavaSkeleton(methods, intDecl, intface);
+ println("didAlreadyInitWaitInvoke = new AtomicBoolean(false);");
+ println("methodReceived = new AtomicBoolean(false);");
+ println("rmiComm.registerSkeleton(objectId, methodReceived);");
println("}\n");
}
}
- /**
- * HELPER: writeInitCallbackJavaSkeleton() writes the init callback method for skeleton class
- */
- private void writeInitCallbackJavaSkeleton(boolean callbackSkeleton, String intface) {
-
- // This is a callback skeleton generation
- if (callbackSkeleton)
- println("public void ___regCB(IoTRMIObject rmiObj) throws IOException {");
- else
- println("public void ___regCB() throws IOException {");
- print("Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int[].class, String.class, int.class },");
- println("new Class<?>[] { null, null, null });");
- println("ports = (int[]) paramObj[0];");
- String stubInt = null;
- if (callbackSkeleton)
- stubInt = getStubInterface(intface) + "_CallbackStub";
- else
- stubInt = getStubInterface(intface) + "_Stub";
- int port = getPortCount(stubInt);
- println("rmiCall = new IoTRMICall(ports[" + port + "], (String) paramObj[1], (int) paramObj[2]);");
- println("}\n");
- }
-
-
/**
* HELPER: writeMethodJavaSkeleton() writes the method of the skeleton class
*/
writeStdMethodBodyJavaSkeleton(methParams, methodId, intDecl.getMethodType(method));
println("}\n");
if (isCallbackMethod && !isDefined) { // Make sure that this function is only defined once!
- writeInitCallbackJavaSkeleton(callbackSkeleton, intface);
+ //writeInitCallbackJavaSkeleton(callbackSkeleton, intface);
isDefined = true;
}
}
}
+ /**
+ * HELPER: writeCallbackInstantiationJavaStubGeneration() writes the instantiation of callback stubs
+ */
+ private void writeCallbackInstantiationJavaStubGeneration(int counter, String exchParamType) {
+
+ //println("int objIdRecv = (int[]) paramObj[0];");
+ println(exchParamType + " newStub = null;");
+ println("if(!IoTRMIUtil.mapStub.containsKey(objIdRecv)) {");
+ println("newStub = new " + exchParamType + "_Stub(rmiComm, objIdRecv);");
+ println("IoTRMIUtil.mapStub.put(objIdRecv, newStub);");
+ println("rmiComm.setObjectIdCounter(objIdRecv);");
+ println("rmiComm.decrementObjectIdCounter();");
+ println("}");
+ println("else {");
+ println("newStub = (" + exchParamType + "_Stub) IoTRMIUtil.mapStub.get(objIdRecv);");
+ println("}");
+ }
+
+
/**
* HELPER: writeCallbackJavaStubGeneration() writes the callback stub generation part
*/
if (checkCallbackType(paramType, callbackType)) { // Check if this has callback object
String exchParamType = checkAndGetParamClass(getGenericType(paramType));
// Print array if this is array or list if this is a list of callback objects
- if (isArray(param)) {
- println("int numStubs" + i + " = (int) paramObj[" + offsetPfx + i + "];");
+ println("int[] stubIdArray" + i + " = (int[]) paramObj[" + offsetPfx + i + "];");
+ if (isArray(param)) {
+ println("int numStubs" + i + " = stubIdArray" + i + ".length;");
println(exchParamType + "[] stub" + i + " = new " + exchParamType + "[numStubs" + i + "];");
} else if (isList(paramType)) {
- println("int numStubs" + i + " = (int) paramObj[" + offsetPfx + i + "];");
+ println("int numStubs" + i + " = stubIdArray" + i + ".length;");
println("List<" + exchParamType + "> stub" + i + " = new ArrayList<" + exchParamType + ">();");
} else {
- println(exchParamType + " stub" + i + " = new " + exchParamType + "_CallbackStub(rmiCall, callbackAddress, objIdCnt, ports);");
- println("objIdCnt++;");
+ println("int objIdRecv = stubIdArray" + i + "[0];");
+ writeCallbackInstantiationJavaStubGeneration(i, exchParamType);
}
}
// Generate a loop if needed
if (checkCallbackType(paramType, callbackType)) { // Check if this has callback object
String exchParamType = checkAndGetParamClass(getGenericType(paramType));
if (isArray(param)) {
- println("for (int objId = 0; objId < numStubs" + i + "; objId++) {");
- println("stub" + i + "[objId] = new " + exchParamType + "_CallbackStub(rmiCall, callbackAddress, objIdCnt, ports);");
- println("objIdCnt++;");
+ println("for (int i = 0; i < numStubs" + i + "; i++) {");
+ println("int objIdRecv = stubIdArray" + i + "[numStubs" + i + "];");
+ writeCallbackInstantiationJavaStubGeneration(i, exchParamType);
+ println("stub" + i + "[i] = newStub;");
println("}");
} else if (isList(paramType)) {
- println("for (int objId = 0; objId < numStubs" + i + "; objId++) {");
- println("stub" + i + ".add(new " + exchParamType + "_CallbackStub(rmiCall, callbackAddress, objIdCnt, ports));");
- println("objIdCnt++;");
+ println("for (int i = 0; i < numStubs" + i + "; i++) {");
+ println("int objIdRecv = stubIdArray" + i + "[numStubs" + i + "];");
+ writeCallbackInstantiationJavaStubGeneration(i, exchParamType);
+ println("stub" + i + ".add(newStub);");
println("}");
- }
+ } else
+ println(exchParamType + " stub" + i + " = newStub;");
mapStubParam.put(i, "stub" + i); // List of all stub parameters
}
}
else // Just single struct object
println("int retLen = 1;");
println("Object retLenObj = retLen;");
- println("rmiObj.sendReturnObj(retLenObj);");
+ println("rmiComm.sendReturnObj(retLenObj, localMethodBytes);");
int numMem = getNumOfMembers(simpleType);
println("Class<?>[] retCls = new Class<?>[" + numMem + "*retLen];");
println("Object[] retObj = new Object[" + numMem + "*retLen];");
if (!retType.equals("void")) {
if (isEnumClass(getSimpleArrayType(getGenericType(retType)))) { // Enum type
checkAndWriteEnumRetConvJavaSkeleton(retType);
- println("rmiObj.sendReturnObj(retObj);");
+ println("rmiComm.sendReturnObj(retObj, localMethodBytes);");
} else if (isStructClass(getSimpleArrayType(getGenericType(retType)))) { // Struct type
writeStructReturnJavaSkeleton(getSimpleArrayType(getGenericType(retType)), retType);
- println("rmiObj.sendReturnObj(retCls, retObj);");
+ println("rmiComm.sendReturnObj(retCls, retObj, localMethodBytes);");
} else
- println("rmiObj.sendReturnObj(retObj);");
+ println("rmiComm.sendReturnObj(retObj, localMethodBytes);");
}
if (isCallbackMethod) { // Catch exception if this is callback
print("}");
// Generate array of parameter objects
boolean isCallbackMethod = false;
String callbackType = null;
+ println("byte[] localMethodBytes = methodBytes;");
+ println("rmiComm.setGetMethodBytes();");
print("int paramLen = ");
writeLengthStructParamClassSkeleton(methParams, methPrmTypes, method, intDecl);
println(";");
if (callbackClasses.contains(prmType)) {
isCallbackMethod = true;
callbackType = prmType;
- println("paramCls[pos] = int.class;");
+ println("paramCls[pos] = int[].class;");
println("paramClsGen[pos++] = null;");
} else { // Generate normal classes if it's not a callback object
String paramTypeOth = checkAndGetArray(methPrmTypes.get(i), methParams.get(i));
}
}
}
- println("Object[] paramObj = rmiObj.getMethodParams(paramCls, paramClsGen);");
+ println("Object[] paramObj = rmiComm.getMethodParams(paramCls, paramClsGen, localMethodBytes);");
writeStructMembersInitJavaSkeleton(intDecl, methParams, methPrmTypes, method);
// Write the return value part
writeMethodHelperReturnJavaSkeleton(intDecl, methParams, methPrmTypes, method, isCallbackMethod, callbackType, true);
// Generate array of parameter objects
boolean isCallbackMethod = false;
String callbackType = null;
- print("Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { ");
+ println("byte[] localMethodBytes = methodBytes;");
+ println("rmiComm.setGetMethodBytes();");
+ print("Object[] paramObj = rmiComm.getMethodParams(new Class<?>[] { ");
for (int i = 0; i < methParams.size(); i++) {
String paramType = returnGenericCallbackType(methPrmTypes.get(i));
if (callbackClasses.contains(paramType)) {
isCallbackMethod = true;
callbackType = paramType;
- print("int.class");
+ print("int[].class");
} else { // Generate normal classes if it's not a callback object
String prmType = checkAndGetArray(methPrmTypes.get(i), methParams.get(i));
print(getSimpleType(getEnumType(prmType)) + ".class");
if (i != methParams.size() - 1)
print(", ");
}
- println(" }, ");
+ //println(" }, ");
// Generate generic class if it's a generic type.. null otherwise
- print("new Class<?>[] { ");
+ print(" }, new Class<?>[] { ");
for (int i = 0; i < methParams.size(); i++) {
String prmType = methPrmTypes.get(i);
if ((getParamCategory(prmType) == ParamCategory.NONPRIMITIVES) &&
if (i != methParams.size() - 1)
print(", ");
}
- println(" });");
+ println(" }, localMethodBytes);");
// Write the return value part
writeMethodHelperReturnJavaSkeleton(intDecl, methParams, methPrmTypes, method, isCallbackMethod, callbackType, false);
}
String helperMethod = methodNumId + "struct" + i;
println(helperMethod + "() {");
// Now, write the helper body of skeleton!
- println("Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class }, new Class<?>[] { null });");
+ println("byte[] localMethodBytes = methodBytes;");
+ println("rmiComm.setGetMethodBytes();");
+ println("Object[] paramObj = rmiComm.getMethodParams(new Class<?>[] { int.class }, new Class<?>[] { null }, localMethodBytes);");
println("return (int) paramObj[0];");
println("}\n");
}
String helperMethod = methodNumId + "struct" + i;
println(helperMethod + "(IoTRMIObject rmiObj) {");
// Now, write the helper body of skeleton!
- println("Object[] paramObj = rmiObj.getMethodParams(new Class<?>[] { int.class }, new Class<?>[] { null });");
+ println("Object[] paramObj = rmiComm.getMethodParams(new Class<?>[] { int.class }, new Class<?>[] { null });");
println("return (int) paramObj[0];");
println("}\n");
}
else
begin = false;
int methodNumId = intDecl.getMethodNumId(method);
- print("struct" + methodNumId + "Size" + i);
+ print("struct" + methodNumId + "Size" + i + "Final");
}
}
return structExist;
println("}");
println("}");
println("else {");
- println("throw new Error(\"Object Id: \" + _objectId + \" not recognized!\");");
+ println("continue;");
println("}");
}
}
+ /**
+ * HELPER: writeFinalInputCountVarStructSkeleton() writes the final version of input counter variable of struct for skeleton
+ */
+ private boolean writeFinalInputCountVarStructSkeleton(String method, InterfaceDecl intDecl) {
+
+ List<String> methParams = intDecl.getMethodParams(method);
+ List<String> methPrmTypes = intDecl.getMethodParamTypes(method);
+ boolean structExist = false;
+ boolean begin = true;
+ // Check for params with structs
+ for (int i = 0; i < methParams.size(); i++) {
+ String paramType = methPrmTypes.get(i);
+ String param = methParams.get(i);
+ String simpleType = getGenericType(paramType);
+ if (isStructClass(simpleType)) {
+ structExist = true;
+ int methodNumId = intDecl.getMethodNumId(method);
+ println("final int struct" + methodNumId + "Size" + i +
+ "Final = struct" + methodNumId + "Size" + i + ";");
+ }
+ }
+ return structExist;
+ }
+
+
/**
* HELPER: writeJavaWaitRequestInvokeMethod() writes the main loop of the skeleton class
*/
- private void writeJavaWaitRequestInvokeMethod(Collection<String> methods, InterfaceDecl intDecl, boolean callbackExist, String intface) {
+ private void writeJavaWaitRequestInvokeMethod(Collection<String> methods, InterfaceDecl intDecl, String intface) {
// Use this set to handle two same methodIds
Set<String> uniqueMethodIds = new HashSet<String>();
- println("private void ___waitRequestInvokeMethod() throws IOException {");
+ println("public void ___waitRequestInvokeMethod() throws IOException {");
// Write variables here if we have callbacks or enums or structs
writeCountVarStructSkeleton(methods, intDecl);
+ println("didAlreadyInitWaitInvoke.compareAndSet(false, true);");
println("while (true) {");
- println("rmiObj.getMethodBytes();");
- println("int _objectId = rmiObj.getObjectId();");
- println("int methodId = rmiObj.getMethodId();");
+ println("if (!methodReceived.get()) {");
+ println("continue;");
+ println("}");
+ println("methodBytes = rmiComm.getMethodBytes();");
+ println("methodReceived.set(false);");
+ println("int _objectId = IoTRMIComm.getObjectId(methodBytes);");
+ println("int methodId = IoTRMIComm.getMethodId(methodBytes);");
// Generate permission check
writeJavaMethodPermission(intface);
println("switch (methodId) {");
for (String method : methods) {
String methodId = intDecl.getMethodId(method);
int methodNumId = intDecl.getMethodNumId(method);
- print("case " + methodNumId + ": ___");
+ println("case " + methodNumId + ":");
+ // Check for stuct counters
+ writeFinalInputCountVarStructSkeleton(method, intDecl);
+ println("new Thread() {");
+ println("public void run() {");
+ println("try {");
+ print("___");
String helperMethod = methodId;
if (uniqueMethodIds.contains(methodId))
helperMethod = helperMethod + methodNumId;
uniqueMethodIds.add(methodId);
print(helperMethod + "(");
writeInputCountVarStructSkeleton(method, intDecl);
- println("); break;");
+ println(");");
+ println("}");
+ println("catch (Exception ex) {");
+ println("ex.printStackTrace();");
+ println("}");
+ println("}");
+ println("}.start();");
+ println("break;");
}
String method = "___initCallBack()";
- // Print case -9999 (callback handler) if callback exists
- if (callbackExist) {
- int methodId = intDecl.getHelperMethodNumId(method);
- println("case " + methodId + ": ___regCB(); break;");
- }
writeMethodCallStructSkeleton(methods, intDecl);
println("default: ");
println("throw new Error(\"Method Id \" + methodId + \" not recognized!\");");
/**
- * generateJavaSkeletonClass() generate skeletons based on the methods list in Java
+ * HELPER: writeReturnDidAlreadyInitWaitInvoke() writes the function to return didAlreadyInitWaitInvoke
*/
- public void generateJavaSkeletonClass() throws IOException {
+ private void writeReturnDidAlreadyInitWaitInvoke() {
- // Create a new directory
- String path = createDirectories(dir, subdir);
- for (String intface : mapIntfacePTH.keySet()) {
- // Open a new file to write into
- String newSkelClass = intface + "_Skeleton";
- FileWriter fw = new FileWriter(path + "/" + newSkelClass + ".java");
- pw = new PrintWriter(new BufferedWriter(fw));
- // Pass in set of methods and get import classes
- DeclarationHandler decHandler = mapIntDeclHand.get(intface);
- InterfaceDecl intDecl = (InterfaceDecl) decHandler.getInterfaceDecl(intface);
- List<String> methods = intDecl.getMethods();
- Set<String> importClasses = getImportClasses(methods, intDecl);
- List<String> stdImportClasses = getStandardJavaImportClasses();
- List<String> allImportClasses = getAllLibClasses(stdImportClasses, importClasses);
- printImportStatements(allImportClasses);
- // Find out if there are callback objects
- Set<String> callbackClasses = getCallbackClasses(methods, intDecl);
- boolean callbackExist = !callbackClasses.isEmpty();
- // Write class header
- println("");
- println("public class " + newSkelClass + " implements " + intface + " {\n");
- // Write properties
- writePropertiesJavaSkeleton(intface, callbackExist, intDecl);
- // Write constructor
- writeConstructorJavaSkeleton(newSkelClass, intface, intDecl, methods, callbackExist);
- // Write methods
- writeMethodJavaSkeleton(methods, intDecl, callbackClasses, false, intface);
- // Write method helper
- writeMethodHelperJavaSkeleton(methods, intDecl, callbackClasses);
- // Write waitRequestInvokeMethod() - main loop
- writeJavaWaitRequestInvokeMethod(methods, intDecl, callbackExist, intface);
- println("}");
- pw.close();
- System.out.println("IoTCompiler: Generated skeleton class " + newSkelClass + ".java...");
- }
- }
-
-
- /**
- * HELPER: writePropertiesJavaCallbackSkeleton() writes the properties of the callback skeleton class
- */
- private void writePropertiesJavaCallbackSkeleton(String intface, boolean callbackExist) {
-
- println("private " + intface + " mainObj;");
- // For callback skeletons, this is its own object Id
- println("private int objectId = 0;");
- println("private String callbackAddress;");
- // Callback
- if (callbackExist) {
-
- println("private int objIdCnt = 0;");
- println("private IoTRMICall rmiCall;");
- println("private int[] ports;\n");
- }
- println("\n");
- }
-
-
- /**
- * HELPER: writeConstructorJavaCallbackSkeleton() writes the constructor of the skeleton class
- */
- private void writeConstructorJavaCallbackSkeleton(String newSkelClass, String intface, InterfaceDecl intDecl, Collection<String> methods) {
-
- println("public " + newSkelClass + "(" + intface + " _mainObj, String _callbackAddress, int _objectId) throws Exception {");
- println("callbackAddress = _callbackAddress;");
- println("mainObj = _mainObj;");
- println("objectId = _objectId;");
+ println("public boolean didAlreadyInitWaitInvoke() {");
+ println("return didAlreadyInitWaitInvoke.get();");
println("}\n");
}
/**
- * HELPER: writeMethodHelperJavaCallbackSkeleton() writes the method helper of the callback skeleton class
- */
- private void writeMethodHelperJavaCallbackSkeleton(Collection<String> methods, InterfaceDecl intDecl, Set<String> callbackClasses) {
-
- // Use this set to handle two same methodIds
- Set<String> uniqueMethodIds = new HashSet<String>();
- for (String method : methods) {
-
- List<String> methParams = intDecl.getMethodParams(method);
- List<String> methPrmTypes = intDecl.getMethodParamTypes(method);
- if (isStructPresent(methParams, methPrmTypes)) { // Treat struct differently
- String methodId = intDecl.getMethodId(method);
- print("public void ___");
- String helperMethod = methodId;
- if (uniqueMethodIds.contains(methodId))
- helperMethod = helperMethod + intDecl.getMethodNumId(method);
- else
- uniqueMethodIds.add(methodId);
- String retType = intDecl.getMethodType(method);
- print(helperMethod + "(");
- boolean begin = true;
- for (int i = 0; i < methParams.size(); i++) { // Print size variables
- String paramType = methPrmTypes.get(i);
- String param = methParams.get(i);
- String simpleType = getGenericType(paramType);
- if (isStructClass(simpleType)) {
- if (!begin) // Generate comma for not the beginning variable
- print(", ");
- else
- begin = false;
- int methodNumId = intDecl.getMethodNumId(method);
- print("int struct" + methodNumId + "Size" + i);
- }
- }
- // Check if this is "void"
- if (retType.equals("void"))
- println(", IoTRMIObject rmiObj) {");
- else
- println(", IoTRMIObject rmiObj) throws IOException {");
- writeMethodHelperStructJavaSkeleton(intDecl, methParams, methPrmTypes, method, callbackClasses);
- println("}\n");
- } else {
- String methodId = intDecl.getMethodId(method);
- print("public void ___");
- String helperMethod = methodId;
- if (uniqueMethodIds.contains(methodId))
- helperMethod = helperMethod + intDecl.getMethodNumId(method);
- else
- uniqueMethodIds.add(methodId);
- // Check if this is "void"
- String retType = intDecl.getMethodType(method);
- if (retType.equals("void"))
- println(helperMethod + "(IoTRMIObject rmiObj) {");
- else
- println(helperMethod + "(IoTRMIObject rmiObj) throws IOException {");
- // Now, write the helper body of skeleton!
- writeStdMethodHelperBodyJavaSkeleton(intDecl, methParams, methPrmTypes, method, callbackClasses);
- println("}\n");
- }
- }
- // Write method helper for structs
- writeMethodHelperStructSetupJavaCallbackSkeleton(methods, intDecl);
- }
-
-
- /**
- * HELPER: writeJavaCallbackWaitRequestInvokeMethod() writes the request invoke method of the callback skeleton class
- */
- private void writeJavaCallbackWaitRequestInvokeMethod(Collection<String> methods, InterfaceDecl intDecl, boolean callbackExist) {
-
- // Use this set to handle two same methodIds
- Set<String> uniqueMethodIds = new HashSet<String>();
- println("public void invokeMethod(IoTRMIObject rmiObj) throws IOException {");
- // Write variables here if we have callbacks or enums or structs
- writeCountVarStructSkeleton(methods, intDecl);
- // Write variables here if we have callbacks or enums or structs
- println("int methodId = rmiObj.getMethodId();");
- // TODO: code the permission check here!
- println("switch (methodId) {");
- // Print methods and method Ids
- for (String method : methods) {
- String methodId = intDecl.getMethodId(method);
- int methodNumId = intDecl.getMethodNumId(method);
- print("case " + methodNumId + ": ___");
- String helperMethod = methodId;
- if (uniqueMethodIds.contains(methodId))
- helperMethod = helperMethod + methodNumId;
- else
- uniqueMethodIds.add(methodId);
- print(helperMethod + "(");
- if (writeInputCountVarStructSkeleton(method, intDecl))
- println(", rmiObj); break;");
- else
- println("rmiObj); break;");
- }
- String method = "___initCallBack()";
- // Print case -9999 (callback handler) if callback exists
- if (callbackExist) {
- int methodId = intDecl.getHelperMethodNumId(method);
- println("case " + methodId + ": ___regCB(rmiObj); break;");
- }
- writeMethodCallStructCallbackSkeleton(methods, intDecl);
- println("default: ");
- println("throw new Error(\"Method Id \" + methodId + \" not recognized!\");");
- println("}");
- println("}\n");
- }
-
-
- /**
- * generateJavaCallbackSkeletonClass() generate callback skeletons based on the methods list in Java
+ * generateJavaSkeletonClass() generate skeletons based on the methods list in Java
*/
- public void generateJavaCallbackSkeletonClass() throws IOException {
+ public void generateJavaSkeletonClass() throws IOException {
// Create a new directory
String path = createDirectories(dir, subdir);
for (String intface : mapIntfacePTH.keySet()) {
// Open a new file to write into
- String newSkelClass = intface + "_CallbackSkeleton";
+ String newSkelClass = intface + "_Skeleton";
FileWriter fw = new FileWriter(path + "/" + newSkelClass + ".java");
pw = new PrintWriter(new BufferedWriter(fw));
// Pass in set of methods and get import classes
println("");
println("public class " + newSkelClass + " implements " + intface + " {\n");
// Write properties
- writePropertiesJavaCallbackSkeleton(intface, callbackExist);
+ writePropertiesJavaSkeleton(intface, intDecl);
// Write constructor
- writeConstructorJavaCallbackSkeleton(newSkelClass, intface, intDecl, methods);
+ writeConstructorJavaSkeleton(newSkelClass, intface, intDecl, methods, callbackExist);
+ // Write constructor that is called when this object is a callback object
+ writeCallbackConstructorJavaSkeleton(newSkelClass, intface, intDecl, methods, callbackExist);
+ // Write function to return didAlreadyInitWaitInvoke
+ writeReturnDidAlreadyInitWaitInvoke();
// Write methods
- writeMethodJavaSkeleton(methods, intDecl, callbackClasses, true, intface);
+ writeMethodJavaSkeleton(methods, intDecl, callbackClasses, false, intface);
// Write method helper
- writeMethodHelperJavaCallbackSkeleton(methods, intDecl, callbackClasses);
+ writeMethodHelperJavaSkeleton(methods, intDecl, callbackClasses);
// Write waitRequestInvokeMethod() - main loop
- writeJavaCallbackWaitRequestInvokeMethod(methods, intDecl, callbackExist);
+ writeJavaWaitRequestInvokeMethod(methods, intDecl, intface);
println("}");
pw.close();
- System.out.println("IoTCompiler: Generated callback skeleton class " + newSkelClass + ".java...");
+ System.out.println("IoTCompiler: Generated skeleton class " + newSkelClass + ".java...");
}
}
+
+/*================
+ * C++ generation
+ *================/
/**
* HELPER: writeMethodCplusLocalInterface() writes the method of the local interface
println("}\n");
// Write the init callback helper method
if (isCallbackMethod && !isDefined) {
- writeInitCallbackCplusStub(callbackType, intDecl, newStubClass);
- writeInitCallbackSendInfoCplusStub(intDecl);
+ //writeInitCallbackCplusStub(callbackType, intDecl, newStubClass);
+ //writeInitCallbackSendInfoCplusStub(intDecl);
isDefined = true;
}
}
String callbackType = (String) it.next();
DeclarationHandler decHandler = mapIntDeclHand.get(callbackType);
InterfaceDecl intDecl = (InterfaceDecl) decHandler.getInterfaceDecl(callbackType);
- writeCplusInitCallbackPermission(callbackType, intDecl, callbackExist);
- println("thread th1 (&" + newStubClass + "::___initCallBack, this);");
- println("th1.detach();");
- println("___regCB();");
+ //writeCplusInitCallbackPermission(callbackType, intDecl, callbackExist);
+ //println("thread th1 (&" + newStubClass + "::___initCallBack, this);");
+ //println("th1.detach();");
+ //println("___regCB();");
}
println("}\n");
}
}
- /**
- * HELPER: writeInitCallbackCplusStub() writes the initialization of callback
- */
- private void writeInitCallbackCplusStub(String intface, InterfaceDecl intDecl, String newStubClass) {
-
- println("void ___initCallBack() {");
- println("bool bResult = false;");
- int port = getPortCount(newStubClass);
- println("rmiObj = new IoTRMIObject(ports[" + port + "], &bResult);");
- println("while (true) {");
- println("char* method = rmiObj->getMethodBytes();");
- //writeCplusMethodCallbackPermission(intface);
- println("int objId = IoTRMIObject::getObjectId(method);");
- println("if (objId < vecCallbackObj.size()) { // Check if still within range");
- println(intface + "_CallbackSkeleton* skel = dynamic_cast<" + intface +
- "_CallbackSkeleton*> (vecCallbackObj.at(objId));");
- writeCplusMethodCallbackPermission(intface);
- println("skel->invokeMethod(rmiObj);");
- print("}");
- println(" else {");
- println("cerr << \"Illegal object Id: \" << to_string(objId);");
- // TODO: perhaps need to change this into "throw" to make it cleaner (allow stack unfolding)
- println("return;");
- println("}");
- println("}");
- println("}\n");
- }
-
-
- /**
- * HELPER: writeCplusInitCallbackPermission() writes the permission for callback
- */
- private void writeCplusInitCallbackPermission(String intface, InterfaceDecl intDecl, boolean callbackExist) {
-
- if (callbackExist) {
- String method = "___initCallBack()";
- int methodNumId = intDecl.getHelperMethodNumId(method);
- Map<String,Set<String>> mapNewIntMethods = mapInt2NewInts.get(intface);
- for (Map.Entry<String,Set<String>> intMeth : mapNewIntMethods.entrySet()) {
- String newIntface = intMeth.getKey();
- int newObjectId = getNewIntfaceObjectId(newIntface);
- println("set" + newObjectId + "Allowed.insert(" + methodNumId + ");");
- }
- }
- }
-
-
- /**
- * HELPER: writeInitCallbackSendInfoCplusStub() writes the initialization (send info part) of callback
- */
- private void writeInitCallbackSendInfoCplusStub(InterfaceDecl intDecl) {
-
- // Generate info sending part
- println("void ___regCB() {");
- println("int numParam = 3;");
- String method = "___initCallBack()";
- int methodNumId = intDecl.getHelperMethodNumId(method);
- println("int methodId = " + methodNumId + ";");
- println("string retType = \"void\";");
- println("string paramCls[] = { \"int*\", \"String\", \"int\" };");
- println("int rev = 0;");
- println("void* paramObj[] = { &ports, &callbackAddress, &rev };");
- println("void* retObj = NULL;");
- println("rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj);");
- println("}\n");
- }
-
-
/**
* generateCPlusStubClasses() generate stubs based on the methods list in C++
*/
}
- /**
- * HELPER: writePropertiesCplusCallbackStub() writes the properties of the stub class
- */
- private void writePropertiesCplusCallbackStub(String intface, String newIntface, boolean callbackExist, Set<String> callbackClasses) {
-
- println("IoTRMICall *rmiCall;");
- // Get the object Id
- println("int objectId;");
- println("vector<int> ports;\n");
- println("string callbackAddress;");
- if (callbackExist) {
- // We assume that each class only has one callback interface for now
- Iterator it = callbackClasses.iterator();
- String callbackType = (String) it.next();
- println("// Callback properties");
- println("IoTRMIObject *rmiObj;");
- println("vector<" + callbackType + "*> vecCallbackObj;");
- println("static int objIdCnt;");
- // TODO: Need to initialize address and ports if we want to have callback-in-callback
- writePropertiesCplusPermission(callbackType);
- }
- println("\n");
- }
-
-
- /**
- * HELPER: writeConstructorCplusCallbackStub() writes the constructor of the stub class
- */
- private void writeConstructorCplusCallbackStub(String newStubClass, boolean callbackExist, Set<String> callbackClasses) {
-
- println(newStubClass + "(IoTRMICall* _rmiCall, string _callbackAddress, int _objectId, vector<int> _ports) {");
- println("objectId = _objectId;");
- println("callbackAddress = _callbackAddress;");
- println("rmiCall = _rmiCall;");
- println("ports = _ports;");
- if (callbackExist) {
- Iterator it = callbackClasses.iterator();
- String callbackType = (String) it.next();
- DeclarationHandler decHandler = mapIntDeclHand.get(callbackType);
- InterfaceDecl intDecl = (InterfaceDecl) decHandler.getInterfaceDecl(callbackType);
- writeCplusInitCallbackPermission(callbackType, intDecl, callbackExist);
- println("thread th1 (&" + newStubClass + "::___initCallBack, this);");
- println("th1.detach();");
- println("___regCB();");
- }
- println("}\n");
- }
-
-
- /**
- * generateCPlusCallbackStubClasses() generate callback stubs based on the methods list in C++
- */
- public void generateCPlusCallbackStubClasses() throws IOException {
-
- // Create a new directory
- String path = createDirectories(dir, subdir);
- for (String intface : mapIntfacePTH.keySet()) {
-
- Map<String,Set<String>> mapNewIntMethods = mapInt2NewInts.get(intface);
- for (Map.Entry<String,Set<String>> intMeth : mapNewIntMethods.entrySet()) {
- // Open a new file to write into
- String newIntface = intMeth.getKey();
- String newStubClass = newIntface + "_CallbackStub";
- FileWriter fw = new FileWriter(path + "/" + newStubClass + ".hpp");
- pw = new PrintWriter(new BufferedWriter(fw));
- // Find out if there are callback objects
- Set<String> methods = intMeth.getValue();
- DeclarationHandler decHandler = mapIntDeclHand.get(intface);
- InterfaceDecl intDecl = (InterfaceDecl) decHandler.getInterfaceDecl(intface);
- Set<String> callbackClasses = getCallbackClasses(methods, intDecl);
- boolean callbackExist = !callbackClasses.isEmpty();
- // Write file headers
- println("#ifndef _" + newStubClass.toUpperCase() + "_HPP__");
- println("#define _" + newStubClass.toUpperCase() + "_HPP__");
- println("#include <iostream>");
- if (callbackExist)
- println("#include <thread>");
- println("#include \"" + newIntface + ".hpp\""); println("");
- println("using namespace std;"); println("");
- println("class " + newStubClass + " : public " + newIntface); println("{");
- println("private:\n");
- writePropertiesCplusCallbackStub(intface, newIntface, callbackExist, callbackClasses);
- println("public:\n");
- // Add default constructor and destructor
- println(newStubClass + "() { }"); println("");
- writeConstructorCplusCallbackStub(newStubClass, callbackExist, callbackClasses);
- writeDeconstructorCplusStub(newStubClass, callbackExist, callbackClasses);
- // Write methods
- writeMethodCplusStub(methods, intDecl, callbackClasses, newStubClass);
- println("};");
- if (callbackExist) {
- Iterator it = callbackClasses.iterator();
- String callbackType = (String) it.next();
- // Generate permission stuff for callback stubs
- DeclarationHandler decHandlerCallback = mapIntDeclHand.get(callbackType);
- InterfaceDecl intDeclCallback = (InterfaceDecl) decHandlerCallback.getInterfaceDecl(callbackType);
- writePermissionInitializationCplus(callbackType, newStubClass, intDeclCallback);
- }
- writeObjectIdCountInitializationCplus(newStubClass, callbackExist);
- println("#endif");
- pw.close();
- System.out.println("IoTCompiler: Generated callback stub class " + newIntface + ".hpp...");
- }
- }
- }
-
-
/**
* HELPER: writePropertiesCplusSkeleton() writes the properties of the skeleton class
*/
println("mainObj = _mainObj;");
println("callbackAddress = _callbackAddress;");
println("rmiObj = new IoTRMIObject(_port, &_bResult);");
- writeCplusInitCallbackPermission(intface, intDecl, callbackExist);
+ //writeCplusInitCallbackPermission(intface, intDecl, callbackExist);
writeStructPermissionCplusSkeleton(methods, intDecl, intface);
println("___waitRequestInvokeMethod();");
println("}\n");
}
- /**
- * HELPER: writeInitCallbackCplusSkeleton() writes the init callback method for skeleton class
- */
- private void writeInitCallbackCplusSkeleton(boolean callbackSkeleton, String intface) {
-
- // This is a callback skeleton generation
- if (callbackSkeleton)
- println("void ___regCB(IoTRMIObject* rmiObj) {");
- else
- println("void ___regCB() {");
- println("int numParam = 3;");
- println("vector<int> param1;");
- println("string param2 = \"\";");
- println("int param3 = 0;");
- println("string paramCls[] = { \"int*\", \"String\", \"int\" };");
- println("void* paramObj[] = { ¶m1, ¶m2, ¶m3 };");
- println("rmiObj->getMethodParams(paramCls, numParam, paramObj);");
- println("bool bResult = false;");
- String stubInt = null;
- if (callbackSkeleton)
- stubInt = getStubInterface(intface) + "_CallbackStub";
- else
- stubInt = getStubInterface(intface) + "_Stub";
- int port = getPortCount(stubInt);
- println("rmiCall = new IoTRMICall(param1[" + port + "], param2.c_str(), param3, &bResult);");
- println("}\n");
- }
-
-
/**
* HELPER: writeMethodCplusSkeleton() writes the method of the skeleton class
*/
writeStdMethodBodyCplusSkeleton(methParams, methodId, intDecl.getMethodType(method));
println("}\n");
if (isCallbackMethod && !isDefined) {
- writeInitCallbackCplusSkeleton(callbackSkeleton, intface);
+ //writeInitCallbackCplusSkeleton(callbackSkeleton, intface);
isDefined = true;
}
}
}
- /**
- * HELPER: writePropertiesCplusCallbackSkeleton() writes the properties of the callback skeleton class
- */
- private void writePropertiesCplusCallbackSkeleton(String intface, boolean callbackExist, Set<String> callbackClasses) {
-
- println(intface + " *mainObj;");
- // Keep track of object Ids of all stubs registered to this interface
- println("int objectId;");
- println("vector<int> ports;\n");
- println("string callbackAddress;");
- // Callback
- if (callbackExist) {
- Iterator it = callbackClasses.iterator();
- String callbackType = (String) it.next();
- String exchangeType = checkAndGetParamClass(callbackType);
- println("// Callback properties");
- println("IoTRMICall* rmiCall;");
- println("vector<" + exchangeType + "*> vecCallbackObj;");
- println("static int objIdCnt;");
- }
- println("\n");
- }
-
-
- /**
- * HELPER: writeConstructorCplusCallbackSkeleton() writes the constructor of the skeleton class
- */
- private void writeConstructorCplusCallbackSkeleton(String newSkelClass, String intface, boolean callbackExist, InterfaceDecl intDecl, Collection<String> methods) {
-
- println(newSkelClass + "(" + intface + " *_mainObj, string _callbackAddress, int _objectId) {");
- println("mainObj = _mainObj;");
- println("callbackAddress = _callbackAddress;");
- println("objectId = _objectId;");
- println("}\n");
- }
-
-
- /**
- * HELPER: writeDeconstructorCplusStub() writes the deconstructor of the stub class
- */
- private void writeDeconstructorCplusCallbackSkeleton(String newStubClass, boolean callbackExist,
- Set<String> callbackClasses) {
-
- println("~" + newStubClass + "() {");
- if (callbackExist) {
- // We assume that each class only has one callback interface for now
- println("if (rmiCall != NULL) {");
- println("delete rmiCall;");
- println("rmiCall = NULL;");
- println("}");
- Iterator it = callbackClasses.iterator();
- String callbackType = (String) it.next();
- String exchangeType = checkAndGetParamClass(callbackType);
- println("for(" + exchangeType + "* cb : vecCallbackObj) {");
- println("delete cb;");
- println("cb = NULL;");
- println("}");
- }
- println("}");
- println("");
- }
-
-
- /**
- * HELPER: writeMethodHelperCplusCallbackSkeleton() writes the method helper of callback skeleton class
- */
- private void writeMethodHelperCplusCallbackSkeleton(Collection<String> methods, InterfaceDecl intDecl,
- Set<String> callbackClasses) {
-
- // Use this set to handle two same methodIds
- Set<String> uniqueMethodIds = new HashSet<String>();
- for (String method : methods) {
-
- List<String> methParams = intDecl.getMethodParams(method);
- List<String> methPrmTypes = intDecl.getMethodParamTypes(method);
- if (isStructPresent(methParams, methPrmTypes)) { // Treat struct differently
- String methodId = intDecl.getMethodId(method);
- print("void ___");
- String helperMethod = methodId;
- if (uniqueMethodIds.contains(methodId))
- helperMethod = helperMethod + intDecl.getMethodNumId(method);
- else
- uniqueMethodIds.add(methodId);
- String retType = intDecl.getMethodType(method);
- print(helperMethod + "(");
- boolean begin = true;
- for (int i = 0; i < methParams.size(); i++) { // Print size variables
- String paramType = methPrmTypes.get(i);
- String param = methParams.get(i);
- String simpleType = getGenericType(paramType);
- if (isStructClass(simpleType)) {
- if (!begin) // Generate comma for not the beginning variable
- print(", ");
- else
- begin = false;
- int methodNumId = intDecl.getMethodNumId(method);
- print("int struct" + methodNumId + "Size" + i);
- }
- }
- println(", IoTRMIObject* rmiObj) {");
- writeMethodHelperStructCplusSkeleton(intDecl, methParams, methPrmTypes, method, methodId, callbackClasses);
- println("}\n");
- } else {
- String methodId = intDecl.getMethodId(method);
- print("void ___");
- String helperMethod = methodId;
- if (uniqueMethodIds.contains(methodId))
- helperMethod = helperMethod + intDecl.getMethodNumId(method);
- else
- uniqueMethodIds.add(methodId);
- // Check if this is "void"
- String retType = intDecl.getMethodType(method);
- println(helperMethod + "(IoTRMIObject* rmiObj) {");
- // Now, write the helper body of skeleton!
- writeStdMethodHelperBodyCplusSkeleton(intDecl, methParams, methPrmTypes, method, methodId, callbackClasses);
- println("}\n");
- }
- }
- // Write method helper for structs
- writeMethodHelperStructSetupCplusCallbackSkeleton(methods, intDecl);
- }
-
-
- /**
- * HELPER: writeCplusCallbackWaitRequestInvokeMethod() writes the request invoke method of the skeleton callback class
- */
- private void writeCplusCallbackWaitRequestInvokeMethod(Collection<String> methods, InterfaceDecl intDecl,
- boolean callbackExist) {
-
- // Use this set to handle two same methodIds
- Set<String> uniqueMethodIds = new HashSet<String>();
- println("void invokeMethod(IoTRMIObject* rmiObj) {");
- // Write variables here if we have callbacks or enums or structs
- writeCountVarStructSkeleton(methods, intDecl);
- // Write variables here if we have callbacks or enums or structs
- println("int methodId = rmiObj->getMethodId();");
- // TODO: code the permission check here!
- println("switch (methodId) {");
- // Print methods and method Ids
- for (String method : methods) {
- String methodId = intDecl.getMethodId(method);
- int methodNumId = intDecl.getMethodNumId(method);
- print("case " + methodNumId + ": ___");
- String helperMethod = methodId;
- if (uniqueMethodIds.contains(methodId))
- helperMethod = helperMethod + methodNumId;
- else
- uniqueMethodIds.add(methodId);
- print(helperMethod + "(");
- if (writeInputCountVarStructSkeleton(method, intDecl))
- println(", rmiObj); break;");
- else
- println("rmiObj); break;");
- }
- String method = "___initCallBack()";
- // Print case -9999 (callback handler) if callback exists
- if (callbackExist) {
- int methodId = intDecl.getHelperMethodNumId(method);
- println("case " + methodId + ": ___regCB(rmiObj); break;");
- }
- writeMethodCallStructCallbackSkeleton(methods, intDecl);
- println("default: ");
- println("cerr << \"Method Id \" << methodId << \" not recognized!\" << endl;");
- println("throw exception();");
- println("}");
- println("}\n");
- }
-
-
- /**
- * generateCplusCallbackSkeletonClass() generate callback skeletons based on the methods list in C++
- */
- public void generateCplusCallbackSkeletonClass() throws IOException {
-
- // Create a new directory
- String path = createDirectories(dir, subdir);
- for (String intface : mapIntfacePTH.keySet()) {
- // Open a new file to write into
- String newSkelClass = intface + "_CallbackSkeleton";
- FileWriter fw = new FileWriter(path + "/" + newSkelClass + ".hpp");
- pw = new PrintWriter(new BufferedWriter(fw));
- // Write file headers
- println("#ifndef _" + newSkelClass.toUpperCase() + "_HPP__");
- println("#define _" + newSkelClass.toUpperCase() + "_HPP__");
- println("#include <iostream>");
- println("#include \"" + intface + ".hpp\"\n");
- // Pass in set of methods and get import classes
- DeclarationHandler decHandler = mapIntDeclHand.get(intface);
- InterfaceDecl intDecl = (InterfaceDecl) decHandler.getInterfaceDecl(intface);
- List<String> methods = intDecl.getMethods();
- Set<String> includeClasses = getIncludeClasses(methods, intDecl, intface, true);
- List<String> stdIncludeClasses = getStandardCplusIncludeClasses();
- List<String> allIncludeClasses = getAllLibClasses(stdIncludeClasses, includeClasses);
- printIncludeStatements(allIncludeClasses); println("");
- // Find out if there are callback objects
- Set<String> callbackClasses = getCallbackClasses(methods, intDecl);
- boolean callbackExist = !callbackClasses.isEmpty();
- println("using namespace std;\n");
- // Write class header
- println("class " + newSkelClass + " : public " + intface); println("{");
- println("private:\n");
- // Write properties
- writePropertiesCplusCallbackSkeleton(intface, callbackExist, callbackClasses);
- println("public:\n");
- // Write constructor
- writeConstructorCplusCallbackSkeleton(newSkelClass, intface, callbackExist, intDecl, methods);
- // Write deconstructor
- writeDeconstructorCplusCallbackSkeleton(newSkelClass, callbackExist, callbackClasses);
- // Write methods
- writeMethodCplusSkeleton(methods, intDecl, callbackClasses, true, intface);
- // Write method helper
- writeMethodHelperCplusCallbackSkeleton(methods, intDecl, callbackClasses);
- // Write waitRequestInvokeMethod() - main loop
- writeCplusCallbackWaitRequestInvokeMethod(methods, intDecl, callbackExist);
- println("};");
- writeObjectIdCountInitializationCplus(newSkelClass, callbackExist);
- println("#endif");
- pw.close();
- System.out.println("IoTCompiler: Generated callback skeleton class " + newSkelClass + ".hpp...");
- }
- }
-
-
/**
* generateInitializer() generate initializer based on type
*/
importClasses.add("java.util.List");
importClasses.add("java.util.ArrayList");
importClasses.add("java.util.Arrays");
- importClasses.add("iotrmi.Java.IoTRMICall");
- importClasses.add("iotrmi.Java.IoTRMIObject");
+ importClasses.add("java.util.Map");
+ importClasses.add("java.util.HashMap");
+ importClasses.add("java.util.concurrent.atomic.AtomicBoolean");
+ importClasses.add("iotrmi.Java.IoTRMIComm");
+ importClasses.add("iotrmi.Java.IoTRMICommClient");
+ importClasses.add("iotrmi.Java.IoTRMICommServer");
+ importClasses.add("iotrmi.Java.IoTRMIUtil");
return importClasses;
}
comp.generateJavaLocalInterfaces();
comp.generateJavaInterfaces();
comp.generateJavaStubClasses();
- comp.generateJavaCallbackStubClasses();
+ //comp.generateJavaCallbackStubClasses();
comp.generateJavaSkeletonClass();
- comp.generateJavaCallbackSkeletonClass();
+ //comp.generateJavaCallbackSkeletonClass();
comp.generateEnumCplus();
comp.generateStructCplus();
comp.generateCplusLocalInterfaces();
comp.generateCPlusInterfaces();
comp.generateCPlusStubClasses();
- comp.generateCPlusCallbackStubClasses();
+ //comp.generateCPlusCallbackStubClasses();
comp.generateCplusSkeletonClass();
- comp.generateCplusCallbackSkeletonClass();
+ //comp.generateCplusCallbackSkeletonClass();
} else {
// Check other options
while(i < args.length) {
comp.generateJavaLocalInterfaces();
comp.generateJavaInterfaces();
comp.generateJavaStubClasses();
- comp.generateJavaCallbackStubClasses();
+ //comp.generateJavaCallbackStubClasses();
comp.generateJavaSkeletonClass();
- comp.generateJavaCallbackSkeletonClass();
+ //comp.generateJavaCallbackSkeletonClass();
} else {
comp.generateEnumCplus();
comp.generateStructCplus();
comp.generateCplusLocalInterfaces();
comp.generateCPlusInterfaces();
comp.generateCPlusStubClasses();
- comp.generateCPlusCallbackStubClasses();
+ //comp.generateCPlusCallbackStubClasses();
comp.generateCplusSkeletonClass();
- comp.generateCplusCallbackSkeletonClass();
+ //comp.generateCplusCallbackSkeletonClass();
}
}
i = i + 2;