- // 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);
- // Find out if there are callback objects
- Set<String> callbackClasses = getCallbackClasses(methods, intDecl);
- boolean callbackExist = !callbackClasses.isEmpty();
- if(isCallbackClass(intface))
- println("package " + controllerClass + ";\n");
- else
- println("package " + CODE_PREFIX + "." + mapInt2Drv.get(intface) + ";\n");
- printImportStatements(allImportClasses);
- println("\nimport " + INTERFACE_PACKAGE + ".*;\n");
- // Write class header
- println("public class " + newSkelClass + " implements " + intface + " {\n");
- // Write properties
- writePropertiesJavaSkeleton(intface, intDecl);
- // Write constructor
- 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);
- // Write method helper
- writeMethodHelperJavaSkeleton(methods, intDecl, callbackClasses);
- // Write waitRequestInvokeMethod() - main loop
- writeJavaWaitRequestInvokeMethod(methods, intDecl, intface);
- println("}");
- pw.close();
- System.out.println("IoTCompiler: Generated skeleton class " + newSkelClass + ".java...");
+
+ // Check if there is more than 1 class that uses the same interface
+ List<String> drvList = mapInt2Drv.get(intface);
+ for(int i = 0; i < drvList.size(); i++) {
+
+ // Get driver class
+ String driverClass = drvList.get(i);
+ // Open a new file to write into
+ String newSkelClass = intface + "_Skeleton";
+ String packageClass = null;
+ // Check if this interface is a callback class
+ if(isCallbackClass(intface)) {
+ packageClass = controllerClass;
+ path = createDirectories(dir + "/" + subdir, controllerClass);
+ } else {
+ packageClass = CODE_PREFIX + "." + driverClass;
+ path = createDirectories(dir + "/" + subdir, driverClass);
+ }
+ 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);
+ // Find out if there are callback objects
+ Set<String> callbackClasses = getCallbackClasses(methods, intDecl);
+ boolean callbackExist = !callbackClasses.isEmpty();
+ println("package " + packageClass + ";\n");
+ printImportStatements(allImportClasses);
+ println("\nimport " + INTERFACE_PACKAGE + ".*;\n");
+ // Write class header
+ println("public class " + newSkelClass + " implements " + intface + " {\n");
+ // Write properties
+ writePropertiesJavaSkeleton(intface, intDecl);
+ // Write constructor
+ 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);
+ // Write method helper
+ writeMethodHelperJavaSkeleton(methods, intDecl, callbackClasses);
+ // Write waitRequestInvokeMethod() - main loop
+ writeJavaWaitRequestInvokeMethod(methods, intDecl, intface);
+ println("}");
+ pw.close();
+ System.out.println("IoTCompiler: Generated skeleton class " + newSkelClass + ".java...");
+ }