diff --git a/AlgebraicDataflowArchitectureModel/src/algorithms/MethodBodyGenerator.java b/AlgebraicDataflowArchitectureModel/src/algorithms/MethodBodyGenerator.java index 21a2454..2e783b2 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithms/MethodBodyGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithms/MethodBodyGenerator.java @@ -36,16 +36,22 @@ PushPullAttribute pushPull = (PushPullAttribute) d.getAttribute(); ResourceNode src = (ResourceNode) d.getSource(); ResourceNode dst = (ResourceNode) d.getDestination(); - TypeDeclaration dstType = typeMap.get(dst.getIdentifierTemplate().getResourceName()); + String srcResourceName = src.getIdentifierTemplate().getResourceName(); + String dstResourceName = dst.getIdentifierTemplate().getResourceName(); + TypeDeclaration srcType = typeMap.get(srcResourceName); + TypeDeclaration dstType = typeMap.get(dstResourceName); for (ChannelMember out: d.getChannelGenerator().getOutputChannelMembers()) { if (out.getIdentifierTemplate() == dst.getIdentifierTemplate()) { if (pushPull.getOptions().get(0) == PushPullValue.PUSH) { // push MethodDeclaration update = getUpdateMethod(dstType); String curState = d.getChannelGenerator().deriveUpdateExpressionOf(out, CodeGenerator.pushAccessor).toImplementation(); - update.addStatement(dst.getIdentifierTemplate().getResourceName() + " = " + curState + ";"); + update.addFirstStatement(dstResourceName + " = " + curState + ";"); MethodDeclaration getter = getGetterMethod(dstType); - getter.addStatement("return " + dst.getIdentifierTemplate().getResourceName() + ";"); + getter.addStatement("return " + dstResourceName + ";"); + // src side + MethodDeclaration srcUpdate = getUpdateMethod(srcType); + if (srcUpdate != null) srcUpdate.addStatement(dstResourceName + ".update(" + srcResourceName + ");"); } else { // pull or push/pull MethodDeclaration getter = getGetterMethod(dstType); diff --git a/AlgebraicDataflowArchitectureModel/src/code/ast/Block.java b/AlgebraicDataflowArchitectureModel/src/code/ast/Block.java index abea107..2b4f654 100644 --- a/AlgebraicDataflowArchitectureModel/src/code/ast/Block.java +++ b/AlgebraicDataflowArchitectureModel/src/code/ast/Block.java @@ -14,6 +14,10 @@ this.statements = statements; } + public void addFirstStatement(String statement) { + statements.add(0, statement); + } + public void addStatement(String statement) { statements.add(statement); } diff --git a/AlgebraicDataflowArchitectureModel/src/code/ast/MethodDeclaration.java b/AlgebraicDataflowArchitectureModel/src/code/ast/MethodDeclaration.java index f7b9c4f..c66b438 100644 --- a/AlgebraicDataflowArchitectureModel/src/code/ast/MethodDeclaration.java +++ b/AlgebraicDataflowArchitectureModel/src/code/ast/MethodDeclaration.java @@ -90,6 +90,13 @@ body.addStatement(statement); } + public void addFirstStatement(String statement) { + if (body == null) { + body = new Block(); + } + body.addFirstStatement(statement); + } + public String toString() { String code = "public "; if (returnType == null) {