diff --git a/AlgebraicDataflowArchitectureModel/src/algorithms/CodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/algorithms/CodeGenerator.java index 0e2fd7d..802aeff 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithms/CodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithms/CodeGenerator.java @@ -27,18 +27,22 @@ String rename = ((ResourceNode) re.getDestination()).getIdentifierTemplate().getResourceName() .substring(0, 1).toUpperCase() + ((ResourceNode) re.getDestination()).getIdentifierTemplate().getResourceName().substring(1); - if (((PushPullAttribute) re.getAttribute()).getOptions().get(0) == PushPullValue.PUSH) + if (((PushPullAttribute) re.getAttribute()).getOptions().get(0) == PushPullValue.PUSH) { type.addField(new FieldDeclaration(new Type(rename, rename), ((ResourceNode) re.getDestination()).getIdentifierTemplate().getResourceName())); + type.addConstructor(new VariableDeclaration(new Type(rename, rename),((ResourceNode) re.getSource()).getIdentifierTemplate().getResourceName())); + } } for (Edge e : rn.getInEdges()) { ResourceDependency re = (ResourceDependency) e; String rename = ((ResourceNode) re.getSource()).getIdentifierTemplate().getResourceName() .substring(0, 1).toUpperCase() + ((ResourceNode) re.getSource()).getIdentifierTemplate().getResourceName().substring(1); - if (((PushPullAttribute) re.getAttribute()).getOptions().get(0) != PushPullValue.PUSH) + if (((PushPullAttribute) re.getAttribute()).getOptions().get(0) != PushPullValue.PUSH) { type.addField(new FieldDeclaration(new Type(rename, rename), ((ResourceNode) re.getSource()).getIdentifierTemplate().getResourceName())); + type.addConstructor(new VariableDeclaration(new Type(rename, rename),((ResourceNode) re.getSource()).getIdentifierTemplate().getResourceName())); + } } if (((StoreAttribute) rn.getAttribute()).isStored()) type.addField(new FieldDeclaration(DataConstraintModel.typeInt, @@ -47,18 +51,36 @@ } return codes; } - - static public ArrayList getCodes(ArrayList codeTree){ + + static public ArrayList getCodes(ArrayList codeTree) { ArrayList codes = new ArrayList<>(); - for(TypeDeclaration type:codeTree) { + for (TypeDeclaration type : codeTree) { codes.add("public class " + type.getTypeName() + "{"); - for(FieldDeclaration field:type.getFields()) { - codes.add("\t" + field.getType().getImplementationTypeName() + " " + field.getName() + ";"); + for (FieldDeclaration field : type.getFields()) { + if(type.getTypeName() != "Main") { + codes.add("\t" + field.getType().getImplementationTypeName() + " " + field.getName() + " = null;"); + }else { + codes.add("\t" + field.getType().getImplementationTypeName() + " " + field.getName() + " = new " + field.getType().getTypeName() + "(" + ");"); + } } codes.add(""); - for(MethodDeclaration method:type.getMethods()) { - codes.add("\t" + "public " + method.getReturnType().getImplementationTypeName() + " " + method.getName() + "{"); - for(VariableDeclaration value:method.getParameters()) { + if (type.getTypeName() != "Main") { + String cons = "\t" + type.getTypeName() + "("; + for(VariableDeclaration constructor:type.getConstructor()) { + cons += constructor.getType().getTypeName() + " " + constructor.getName() + ","; + } + cons = cons.substring(0, cons.length() - 1); + cons += ");"; + codes.add(cons); + for (FieldDeclaration field : type.getFields()) { + if(type.getTypeName().toLowerCase() != field.getName()) codes.add("\t\t" + "this." + field.getName() + " = " + field.getName()); + } + codes.add("\t" + "}"); + } + for (MethodDeclaration method : type.getMethods()) { + codes.add("\t" + "public " + method.getReturnType().getImplementationTypeName() + " " + method.getName() + + "{"); + for (VariableDeclaration value : method.getParameters()) { codes.add("\t\t" + value.getType().getImplementationTypeName() + " " + value.getName()); } codes.add("\t" + "}"); diff --git a/AlgebraicDataflowArchitectureModel/src/code/ast/TypeDeclaration.java b/AlgebraicDataflowArchitectureModel/src/code/ast/TypeDeclaration.java index 5f6317b..1ec1e16 100644 --- a/AlgebraicDataflowArchitectureModel/src/code/ast/TypeDeclaration.java +++ b/AlgebraicDataflowArchitectureModel/src/code/ast/TypeDeclaration.java @@ -6,6 +6,7 @@ public class TypeDeclaration extends AbstractTypeDeclaration { private List fields = new ArrayList<>(); private List methods = new ArrayList<>(); + private List constructor = new ArrayList<>(); public TypeDeclaration(String typeName) { this.typeName = typeName; @@ -29,7 +30,11 @@ public void addMethod(MethodDeclaration method) { methods.add(method); } - + + public void addConstructor(VariableDeclaration constructor) { + this.constructor.add(constructor); + } + public List getFields() { return fields; } @@ -38,6 +43,10 @@ return methods; } + public List getConstructor() { + return constructor; + } + public String toString() { String code = "public class " + typeName + "{\n"; for (FieldDeclaration f: fields) { diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/PrototypeGenerateAction.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/PrototypeGenerateAction.java index 95c1ab3..d1e4e86 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/PrototypeGenerateAction.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/actions/PrototypeGenerateAction.java @@ -25,15 +25,8 @@ DataFlowModel model = editor.getModel(); DataStorageDecision.run(graph); editor.setCodes(CodeGenerator.doGenerate(graph,model)); - for(TypeDeclaration type: editor.getCodes()) { - System.out.println(type); -// System.out.println(str.getTypeName()); -// for(FieldDeclaration field:str.getFields()) { -// System.out.println("-" + field.getType().getTypeName() + " " + field.getName()); -// } -// for(MethodDeclaration method:str.getMethods()) { -// System.out.println("-" + method.getReturnType() + " " + method.getName()); -// } + for(String str:CodeGenerator.getCodes(editor.getCodes())) { + System.out.println(str); } }