private void WriteCustomActivity(StringWriter writer, CustomActivityCode customActivityCode, int tabs) { if (customActivityCode.Method != null) { foreach (MethodParameter parameter in customActivityCode.Method.Parameters) { if (!parameter.Variable.WasInitialized) { writer.WriteLineTabs($"{parameter.Variable.Type} {parameter.Variable.Name} = default({parameter.Variable.Type});", tabs); parameter.Variable.WasInitialized = true; } } if (string.IsNullOrWhiteSpace(customActivityCode.ResultTo)) { writer.WriteLineTabs($"{customActivityCode.Method.Name}({string.Join(", ", ConvertParameters(customActivityCode.Method.Parameters, x => x.Name))});", tabs); } else { WriteAssign(writer, new AssignCode { To = customActivityCode.ResultTo, Value = $"{customActivityCode.Method.Name}({ConvertParameters(customActivityCode.Method.Parameters, x => x.Name)})" }, tabs); } } else { writer.WriteLineTabs($"var {customActivityCode.Name} = new {customActivityCode.Name}();", tabs); foreach (AssignCode assignCode in customActivityCode.Assigns) { if (assignCode.Value != null) { writer.WriteLineTabs($"{customActivityCode.Name}.{assignCode.To} = {assignCode.Value};", tabs); } else { writer.WriteLineTabs($"// {customActivityCode.Name}.{assignCode.To} = {assignCode.Value};", tabs); } } writer.WriteLineTabs($"{customActivityCode.Name}.Execute();", tabs); } }
private CustomActivityCode GetCustomActivity(XElement element) { var result = new CustomActivityCode { Name = element.Name.LocalName, Assigns = new List <CustomMethodAssignCode>(), ReturnType = "void" }; IEnumerable <XElement> children = element.Elements(); foreach (var child in children) { string name = child.Name.LocalName; if (name.StartsWith(element.Name.LocalName)) { string[] names = name.Split('.'); string variableName = names.Last(); XElement argumentElement = child.Elements().FirstOrDefault(); if (variableName == "Result") { result.ResultTo = GetValueOfArgument(argumentElement); string returnType = argumentElement.GetAttribute("TypeArguments").Value; if (returnType.Contains(":")) { returnType = returnType.Split(':').Last(); } result.ReturnType = returnType; continue; } var assign = new CustomMethodAssignCode { To = variableName, Value = GetValueOfArgument(argumentElement), Direction = GetArgumentType(argumentElement) }; result.Assigns.Add(assign); } } return(result); }
private Method CreateMethodFromCustomActivity(CustomActivityCode entity) { var result = new Method { AccessModifier = "private", Name = entity.Name, ReturnType = entity.ReturnType, Parameters = new List <MethodParameter>(), Sequence = new Sequence() }; var objectName = "entity"; result.Sequence.Values.Add(new AssignCode { To = $"var {objectName}", Value = $"new {entity.Name}()" }); var finallyBlock = new Sequence(); foreach (CustomMethodAssignCode assign in entity.Assigns) { result.Parameters.AddRange(fieldManager.GetUsingVariables(assign.Value) .Select(x => new MethodParameter { Variable = x, Direction = assign.Direction })); result.Sequence.Values.Add(new AssignCode { To = $"{objectName}.{assign.To}", Value = assign.Value }); if (assign.Direction == ParameterDirection.InOut || assign.Direction == ParameterDirection.Out) { finallyBlock.Values.Add(new AssignCode { To = assign.Value, Value = $"{objectName}.{assign.To}" }); } } for (var i = result.Parameters.Count - 1; i >= 0; i--) { MethodParameter parameter = result.Parameters[i]; if (result.Parameters.Where(x => x.Variable.Name == parameter.Variable.Name).Count() > 1) { result.Parameters.RemoveAt(i); } } var executeLine = $"{objectName}.Execute()"; if (entity.ReturnType != "void") { executeLine = "return " + executeLine; } var executeStringCode = new StringCode { Value = executeLine }; if (finallyBlock.Values.Count > 0) { var tryFinally = new TryCatchCode { Try = new StringCode { Value = executeLine }.WrapInSequence(), Catches = new List <CatchCode>(), Finally = finallyBlock }; result.Sequence.Values.Add(tryFinally); } else { result.Sequence.Values.Add(executeStringCode); } entity.Method = result; return(result); }