private XamlFileDefinition Visit(XamlXmlReader reader, string file) { WriteState(reader); var xamlFile = new XamlFileDefinition(file); do { switch (reader.NodeType) { case XamlNodeType.StartObject: _depth++; xamlFile.Objects.Add(VisitObject(reader, null)); break; case XamlNodeType.NamespaceDeclaration: xamlFile.Namespaces.Add(reader.Namespace); break; default: throw new InvalidOperationException(); } }while (reader.Read()); return(xamlFile); }
/// <summary> /// Gets the name of a GlobalStaticResources property associated with a ResourceDictionary.Source designation. Throws an exception if none is found. /// </summary> /// <param name="originDictionary">The file containing the XAML</param> /// <param name="source">The ResourceDictionary.Source value</param> internal string FindTargetPropertyForMergedDictionarySource(XamlFileDefinition originDictionary, string source) { var targetSource = GetSourceLink(originDictionary); var absoluteSource = ResolveAbsoluteSource(targetSource, source); if (_rdMap.TryGetValue(absoluteSource, out var xamlFileDefinition)) { // TODO: check if it actually corresponds to a ResourceDictionary return(ConvertIdToResourceDictionaryProperty(xamlFileDefinition.UniqueID)); } return(null); }
/// <summary> /// Should this Xaml be included when defining default styles? Outside of Uno this is always true. In Uno, this excludes WinUI Fluent resources (which consumer code accesses via XamlControlsResources) /// </summary> private bool IsIncludedResource(XamlFileDefinition xamlFileDefinition, XamlGlobalStaticResourcesMap map) => !IsUnoAssembly || _nonSystemResources.None(s => map.GetSourceLink(xamlFileDefinition).EndsWith(s));
private bool IsResourceDictionary(XamlFileDefinition fileDefinition) => fileDefinition.Objects.FirstOrDefault()?.Type.Name == "ResourceDictionary";
/// <summary> /// Get the appropriate source link for a given XAML file. /// </summary> internal string GetSourceLink(XamlFileDefinition xamlFileDefinition) { return(_rdMap.FirstOrDefault(kvp => kvp.Value == xamlFileDefinition).Key); //TODO: this is O(n), is it an actual perf issue? }