diff --git a/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java index 6119b8c..3e51bb5 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java @@ -372,6 +372,7 @@ } protected void fillDescendantGetterMethod(MethodDeclaration descendantGetter, ResourceHierarchy descendant, ResourceHierarchy ancestor, TypeDeclaration ancestorComponent, ILanguageSpecific langSpec) { + // (#4) descendant getter method (the implementation must be kept consistent with #3) Expression selector; if (DataConstraintModel.typeList.isAncestorOf(ancestor.getResourceStateType())) { selector = new Variable(langSpec.getFieldAccessor(fieldOfResourceState)); @@ -614,7 +615,7 @@ getter.addChild(new Field(targetRes.getLeafResourceName(), targetRes.getResourceStateType())); return getter; } else { - // access from the outside of the hierarchy + // (#3) access from the outside of the hierarchy (must be kept consistent with #4) Stack pathStack = new Stack<>(); ResourcePath curPath = targetRes; do { diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JavaCodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/JavaCodeGenerator.java index 1091996..63641c1 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JavaCodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JavaCodeGenerator.java @@ -1305,7 +1305,7 @@ getter.addChild(new Field(toVariableName(getComponentName(targetRes.getResourceHierarchy())), targetRes.getResourceStateType())); return getter; } else { - // access from the outside of the hierarchy + // (#3) access from the outside of the hierarchy (must be kept consistent with #4) Stack pathStack = new Stack<>(); ResourcePath curPath = targetRes; do { diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JavaMethodBodyGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/JavaMethodBodyGenerator.java index ddaf925..d49e90e 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JavaMethodBodyGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JavaMethodBodyGenerator.java @@ -664,7 +664,7 @@ } } - // descendant getter method + // (#4) descendant getter method (the implementation must be kept consistent with #3) if (resource.getChildren().size() > 0) { for (ResourceHierarchy child: resource.getChildren()) { ResourceHierarchy parent = resource; @@ -688,6 +688,7 @@ for (MethodDeclaration getter: getGetterMethods(component, methodName)) { if ((getter.getParameters() == null && params == 0) || (getter.getParameters() != null && getter.getParameters().size() == params)) { descendantGetter = getter; + break; } } if (descendantGetter != null) { @@ -697,14 +698,12 @@ newSelector.addChild(new Variable(descendantGetter.getParameters().get(descendantGetter.getParameters().size() - 1).getName())); newSelector.setType(descendantGetter.getReturnType()); selector = newSelector; - params++; } else if (DataConstraintModel.typeMap.isAncestorOf(parent.getResourceStateType())) { Term newSelector = new Term(DataConstraintModel.lookup); newSelector.addChild(selector); newSelector.addChild(new Variable(descendantGetter.getParameters().get(descendantGetter.getParameters().size() - 1).getName())); newSelector.setType(descendantGetter.getReturnType()); selector = newSelector; - params++; } if (descendantGetter != null && (descendantGetter.getBody() == null || descendantGetter.getBody().getStatements().size() == 0)) { String[] sideEffects = new String[] {null}; @@ -718,6 +717,11 @@ break; } parent = descendant; + if (DataConstraintModel.typeList.isAncestorOf(parent.getResourceStateType())) { + params++; + } else if (DataConstraintModel.typeMap.isAncestorOf(parent.getResourceStateType())) { + params++; + } children = descendant.getChildren(); } while (children != null && children.size() == 1 && (descendant = children.iterator().next()) != null); } diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JerseyCodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/JerseyCodeGenerator.java index d1671ff..76dd5b2 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JerseyCodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JerseyCodeGenerator.java @@ -1473,7 +1473,7 @@ targetRes.getResourceStateType() != null ? targetRes.getResourceStateType() : DataConstraintModel.typeInt); } else { - // access from an ancestor or outside of the hierarchy + // (#3) access from an ancestor or outside of the hierarchy (must be kept consistent with #4) Stack pathStack = new Stack<>(); ResourcePath curPath = targetRes; do { diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JerseyMethodBodyGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/JerseyMethodBodyGenerator.java index 61dbebb..67195cd 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JerseyMethodBodyGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JerseyMethodBodyGenerator.java @@ -976,7 +976,7 @@ } } - // descendant getter method + // (#4) descendant getter method (the implementation must be kept consistent with #3) if (resource.getChildren().size() > 0) { for (ResourceHierarchy child: resource.getChildren()) { ResourceHierarchy parent = resource; @@ -1000,6 +1000,7 @@ for (MethodDeclaration getter: getGetterMethods(component, methodName)) { if ((getter.getParameters() == null && params == 0) || (getter.getParameters() != null && getter.getParameters().size() == params)) { descendantGetter = getter; + break; } } if (descendantGetter != null) { @@ -1009,14 +1010,12 @@ newSelector.addChild(new Variable(descendantGetter.getParameters().get(descendantGetter.getParameters().size() - 1).getName())); newSelector.setType(descendantGetter.getReturnType()); selector = newSelector; - params++; } else if (DataConstraintModel.typeMap.isAncestorOf(parent.getResourceStateType())) { Term newSelector = new Term(DataConstraintModel.lookup); newSelector.addChild(selector); newSelector.addChild(new Variable(descendantGetter.getParameters().get(descendantGetter.getParameters().size() - 1).getName())); newSelector.setType(descendantGetter.getReturnType()); selector = newSelector; - params++; } if (descendantGetter != null && (descendantGetter.getBody() == null || descendantGetter.getBody().getStatements().size() == 0)) { String[] sideEffects = new String[] {null}; @@ -1030,6 +1029,11 @@ break; } parent = descendant; + if (DataConstraintModel.typeList.isAncestorOf(parent.getResourceStateType())) { + params++; + } else if (DataConstraintModel.typeMap.isAncestorOf(parent.getResourceStateType())) { + params++; + } children = descendant.getChildren(); } while (children != null && children.size() == 1 && (descendant = children.iterator().next()) != null); }