private static Either <Exception, string>?TryGetViewModelAssemblyName( XamlCode xamlCode, ParsedViewModelCode viewModelCode) { var namesOfAssembliesThatContainViewModelNamespaces = xamlCode.MentionedAssemblies .Where(kvp => kvp.Value.Intersect(viewModelCode.NamespaceNames).Any()) .Select(kvp => kvp.Key) .AsImmutable(); switch (namesOfAssembliesThatContainViewModelNamespaces.Count) { case 0: return(default); case 1: return(Right(namesOfAssembliesThatContainViewModelNamespaces.Single())); default: return(Left( (Exception) new InvalidOperationException( "XAML namespaces erroneousely mention ViewModel's namespaces belonging to the following assemblies: " + string.Join(",", namesOfAssembliesThatContainViewModelNamespaces) + ". Please use *single* assembly name for all ViewModel namespaces."))); } }
public static Either <Exception, ViewModelAssemblyBuilder>?TryCreateAssemblyBuilder( XamlCode xamlCode, ParsedViewModelCode?viewModelCode) { return(viewModelCode == null ? default : TryGetViewModelAssemblyName(xamlCode, viewModelCode.Value) .Map(assemblyName => new ViewModelAssemblyBuilder(assemblyName, viewModelCode.Value.SyntaxTree))); }
public bool MentionedAssembliesDiffer(XamlCode xamlCode) { return(!MentionedAssemblies.OrderBy(kvp => kvp.Key) .SequenceEqual(xamlCode.MentionedAssemblies.OrderBy(kvp => kvp.Key))); }