diff --git a/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java index 37bf0f2..1b08aba 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java @@ -500,14 +500,28 @@ Set refs = new HashSet<>(); for (Channel ch : model.getChannels()) { DataTransferChannel c = (DataTransferChannel) ch; - if (resourceNode.getOutSideResource(c) != null) { - for (ResourcePath res: c.getReferenceResources()) { - if (!refs.contains(res) && !depends.contains(res.getResourceHierarchy())) { - refs.add(res); - String refResName = langSpec.toComponentName(res.getLeafResourceName()); - component.addField(langSpec.newFieldDeclaration(new Type(refResName, refResName), res.getLeafResourceName())); - constructor.addParameter(langSpec.newVariableDeclaration(new Type(refResName, refResName), res.getLeafResourceName())); - constructor.getBody().addStatement(langSpec.getFieldAccessor(res.getLeafResourceName()) + langSpec.getAssignment() + res.getLeafResourceName() + langSpec.getStatementDelimiter()); + boolean isInputsideRes = false; + for (ResourcePath inRes: c.getInputResources()) { + if (inRes.getResourceHierarchy().equals(resourceNode.getResourceHierarchy())) { + isInputsideRes = true; + break; + } + } + if (isInputsideRes) { + for (ResourcePath refRes: c.getReferenceResources()) { + if (!refs.contains(refRes) && !depends.contains(refRes.getResourceHierarchy())) { + refs.add(refRes); + if (generatesComponent(refRes.getResourceHierarchy())) { + String refResName = getComponentName(refRes.getResourceHierarchy(), langSpec); + component.addField(langSpec.newFieldDeclaration(new Type(refResName, refResName), langSpec.toVariableName(refResName))); + constructor.addParameter(langSpec.newVariableDeclaration(new Type(refResName, refResName), langSpec.toVariableName(refResName))); + constructor.getBody().addStatement(langSpec.getFieldAccessor(langSpec.toVariableName(refResName)) + langSpec.getAssignment() + langSpec.toVariableName(refResName) + langSpec.getStatementDelimiter()); + } else if (generatesComponent(refRes.getResourceHierarchy().getParent())) { + String refResName = getComponentName(refRes.getResourceHierarchy().getParent(), langSpec); + component.addField(langSpec.newFieldDeclaration(new Type(refResName, refResName), langSpec.toVariableName(refResName))); + constructor.addParameter(langSpec.newVariableDeclaration(new Type(refResName, refResName), langSpec.toVariableName(refResName))); + constructor.getBody().addStatement(langSpec.getFieldAccessor(langSpec.toVariableName(refResName)) + langSpec.getAssignment() + langSpec.toVariableName(refResName) + langSpec.getStatementDelimiter()); + } } } }