public static CodeTypeMember ConvertToSourcesMethod(TranslateAttribute attr, CodeMemberMethod method, CodeParameterDeclarationExpression from) { method.Statements.Add(from.ReturnNullIfNull()); var to = "to".DeclareGenericVar(attr.SourceType, typeof(List<>)); method.Statements.Add(to); CodeVariableDeclarationStatement item; var iter = from.ForEach(attr.TargetType, out item); method.Statements.Add(iter); var useExtensionMethod = attr is TranslateExtensionAttribute; var itemMethod = useExtensionMethod ? item.Call(attr.GetConvertToSourceMethodName()) : attr.SourceType.Call(attr.GetConvertToSourceMethodName(), item); iter.Statements.Add(to.Call(LIST_ADD_METHOD, itemMethod)); method.Statements.Add(to.Return()); return method; }
public static CodeMemberMethod ConvertToTargetsMethod(TranslateAttribute attr, CodeParameterDeclarationExpression from) { var method = DeclareToTargetsMethod(attr, from); method.Statements.Add(from.ReturnNullIfNull()); var to = "to".DeclareGenericVar(attr.TargetType, typeof(List<>)); method.Statements.Add(to); CodeVariableDeclarationStatement item; var iter = from.ForEach(attr.SourceType, out item); method.Statements.Add(iter); var toTargetMethodName = attr.GetConvertToTargetMethodName(); iter.Statements.Add(item.IfIsNotNull(to.Call(LIST_ADD_METHOD, item.Call(toTargetMethodName)))); method.Statements.Add(to.Return()); return method; }