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);