public override SolidityStatement GetStatementForPrevious(ProcessElement previous) { var statement = new SolidityStatement(); statement.Add(GetChangeActiveStateStatement(true)); //Call the return function of the parent call element, if it exists if (processConverter.ParentProcessConverter != null) { var callActivityReturnName = ConversionTemplates.CallActivityReturnFunctionName(processConverter.GetParentCallActivityCallName()); statement.Add($"{callActivityReturnName}({processConverter.ParentProcessConverter.GetIdentifierNames()})"); } return(statement); }
SolidityFunction CreateProcessReturnFunction() { var function = new SolidityFunction(ConversionTemplates.CallActivityReturnFunctionName(GetElementCallName()), SolidityVisibility.Internal); function.AddParameters(processConverter.GetIdentifiersAsParameters()); var nextElementStatement = CreateNextElementStatement(); var incrementStatement = new SolidityStatement($"{ConversionTemplates.CallActivityCounter(GetElementCallName())}++"); var checkConditionBlock = new SolidityIfElse(); var calledStartEventConverter = processConverter.ContractConverter.GetStartEventConverter(callActivity); var callSubprocessStatement = calledStartEventConverter.GetStatementForPrevious(callActivity); checkConditionBlock.AddConditionBlock($"{ConversionTemplates.CallActivityCounter(GetElementCallName())} >= {GetCountTarget(callActivity)}", nextElementStatement); switch (callActivity.InstanceType) { case InstanceType.Single: function.AddToBody(nextElementStatement); break; case InstanceType.Sequential: //increment the counter, check if counter reached limit. //If counter reached limit, then call the next element. If not, call the subprocess again. function.AddToBody(incrementStatement); checkConditionBlock.AddConditionBlock("", callSubprocessStatement); function.AddToBody(checkConditionBlock); break; case InstanceType.Parallel: //increment the counter, check if counter reached limit. //If counter reached limit, then call the next element. If not, do nothing. function.AddToBody(incrementStatement); function.AddToBody(checkConditionBlock); break; } return(function); }