diff --git a/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java index ed4339b..6119b8c 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/CodeGenerator.java @@ -625,6 +625,7 @@ Term getter = null; int v = 1; int arity = 2; + boolean doesChainInvocations = true; while (!pathStack.empty()) { curPath = pathStack.pop(); String typeName = getComponentName(curPath.getResourceHierarchy(), langSpec); @@ -653,6 +654,7 @@ } getter = newGetter; } else { + // add the last path parameter. if (curPath.getResourceHierarchy().getNumParameters() > 0) { Variable var = null; Expression param = curPath.getLastParam(); @@ -669,14 +671,19 @@ } } arity = 2; + doesChainInvocations = true; } else { - // to get a descendant resource directly. - if (arity == 2) { + // to get a descendant resource directly. (e.g, .todos.{year}.{month}.{day}.{id} ==> .getTodos().getTodo(year, month, day, id)) + if (doesChainInvocations) { Term newGetter = new Term(new Symbol(getterPrefix + typeName, -1, Symbol.Type.METHOD)); newGetter.addChild(getter); getter = newGetter; + doesChainInvocations = false; } if (curPath.getResourceHierarchy().getNumParameters() > 0) { + // may change the symbol name + getter.getSymbol().changeName("get" + typeName); + // add a path parameter. Variable var = null; Expression param = curPath.getLastParam(); if (param instanceof Variable) {