public static Tuple <List <ClassNode>, List <BaseNode> > DeserializeNodesFromStream(Stream input, ReClassNetProject templateProject, ILogger logger) { Contract.Requires(input != null); Contract.Requires(logger != null); Contract.Ensures(Contract.Result <Tuple <List <ClassNode>, List <BaseNode> > >() != null); using (var project = new ReClassNetProject()) { templateProject?.Classes.ForEach(project.AddClass); var file = new ReClassNetFile(project); file.Load(input, logger); var classes = project.Classes .Where(c => c.Name != SerializationClassName); if (templateProject != null) { classes = classes.Where(c => !templateProject.ContainsClass(c.Uuid)); } var nodes = project.Classes .Where(c => c.Name == SerializationClassName) .SelectMany(c => c.Nodes); return(Tuple.Create(classes.ToList(), nodes.ToList())); } }
public static Tuple <List <ClassNode>, List <BaseNode> > ReadNodes(Stream input, ReClassNetProject templateProject, ILogger logger) { Contract.Requires(input != null); Contract.Requires(logger != null); Contract.Ensures(Contract.Result <Tuple <List <ClassNode>, List <BaseNode> > >() != null); using (var project = new ReClassNetProject()) { templateProject?.Classes.ForEach(project.AddClass); var file = new ReClassNetFile(project); file.Load(input, logger); var classes = new List <ClassNode>(); var nodes = new List <BaseNode>(); var serialisationClassNode = project.Classes.FirstOrDefault(c => c.Name == SerialisationClassName); if (serialisationClassNode != null) { if (templateProject != null) { classes.AddRange(project.Classes.Where(c => c != serialisationClassNode).Where(classNode => !templateProject.ContainsClass(classNode.Uuid))); } nodes.AddRange(serialisationClassNode.Nodes); project.Remove(serialisationClassNode); } return(Tuple.Create(classes, nodes)); } }