From a80df0925b82dc71e79a1129956629ca49b1a3df Mon Sep 17 00:00:00 2001 From: h3xds1nz Date: Mon, 24 Mar 2025 22:22:16 +0100 Subject: [PATCH] Remove TreeBuilder and all the dead code associated --- .../PresentationBuildTasks.csproj | 5 +- .../System/Windows/Markup/StyleXamlParser.cs | 59 +--- .../Windows/Markup/TemplateXamlParser.cs | 52 +-- .../System/Windows/Markup/TreeBuilder.cs | 330 ------------------ 4 files changed, 4 insertions(+), 442 deletions(-) delete mode 100644 src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/TreeBuilder.cs diff --git a/src/Microsoft.DotNet.Wpf/src/PresentationBuildTasks/PresentationBuildTasks.csproj b/src/Microsoft.DotNet.Wpf/src/PresentationBuildTasks/PresentationBuildTasks.csproj index 8dfa1c1a6ae..391343e7e20 100644 --- a/src/Microsoft.DotNet.Wpf/src/PresentationBuildTasks/PresentationBuildTasks.csproj +++ b/src/Microsoft.DotNet.Wpf/src/PresentationBuildTasks/PresentationBuildTasks.csproj @@ -75,7 +75,7 @@ - + Common\System\SR.cs @@ -207,9 +207,6 @@ PresentationFramework\System\Windows\Markup\TemplateXamlParser.cs - - PresentationFramework\System\Windows\Markup\TreeBuilder.cs - PresentationFramework\System\Windows\Markup\TypeContext.cs diff --git a/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/StyleXamlParser.cs b/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/StyleXamlParser.cs index 8d99d9c0d8f..0024ba151f2 100644 --- a/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/StyleXamlParser.cs +++ b/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/StyleXamlParser.cs @@ -1,4 +1,4 @@ -// Licensed to the .NET Foundation under one or more agreements. +// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. @@ -45,27 +45,6 @@ namespace System.Windows.Markup /// internal class StyleXamlParser : XamlParser { - -#region Constructors - -#if !PBTCOMPILER - /// - /// Constructor. - /// - /// - /// Note that we are re-using the token reader, so we'll swap out the XamlParser that - /// the token reader uses with ourself. Then restore it when we're done parsing. - /// - internal StyleXamlParser( - XamlTreeBuilder treeBuilder, - XamlReaderHelper tokenReader, - ParserContext parserContext) : this(tokenReader, parserContext) - { - _treeBuilder = treeBuilder; - } - -#endif - /// /// Constructor. /// @@ -82,14 +61,10 @@ internal StyleXamlParser( _previousXamlParser = TokenReader.ControllingXamlParser; TokenReader.ControllingXamlParser = this; - _startingDepth = TokenReader.XmlReader.Depth; } -#endregion Constructors - #region Overrides - /// /// Override of the main switch statement that processes the xaml nodes. /// @@ -1452,15 +1427,7 @@ public override void WritePropertyWithType(XamlPropertyWithTypeNode xamlProperty internal override void ParseError(XamlParseException e) { CloseWriterStream(); -#if !PBTCOMPILER - // If there is an associated treebuilder, tell it about the error. There may not - // be a treebuilder, if this parser was built from a serializer for the purpose of - // converting directly to baml, rather than converting to an object tree. - if (TreeBuilder != null) - { - TreeBuilder.XamlTreeBuildError(e); - } -#endif + throw e; } @@ -1513,17 +1480,6 @@ internal void CloseWriterStream() #endregion Methods - #region Properties - -#if !PBTCOMPILER - /// - /// TreeBuilder associated with this class - /// - XamlTreeBuilder TreeBuilder - { - get { return _treeBuilder; } - } -#else /// /// Return true if we are not in pass one of a compile and we are parsing a /// defer load section of markup. @@ -1540,24 +1496,13 @@ private bool IsLocalPass1 { get { return BamlRecordWriter == null; } } -#endif - -#endregion Properties #region Data -#if !PBTCOMPILER - // TreeBuilder that created this parser - XamlTreeBuilder _treeBuilder; -#endif // The XamlParser that the TokenReader was using when this instance of // the StyleXamlParser was created. This must be restored on exit private XamlParser _previousXamlParser; - // Depth in the Xaml file when parsing of this style block started. - // This is used to determine when to stop parsing - private int _startingDepth; - private StyleModeStack _styleModeStack = new StyleModeStack(); // Depth in the element tree where a element has begun. diff --git a/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/TemplateXamlParser.cs b/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/TemplateXamlParser.cs index d8b04a6659e..b16070c0b4d 100644 --- a/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/TemplateXamlParser.cs +++ b/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/TemplateXamlParser.cs @@ -34,26 +34,6 @@ namespace System.Windows.Markup internal class TemplateXamlParser : XamlParser { -#region Constructors - -#if !PBTCOMPILER - /// - /// Constructor. - /// - /// - /// Note that we are re-using the token reader, so we'll swap out the XamlParser that - /// the token reader uses with ourself. Then restore it when we're done parsing. - /// - internal TemplateXamlParser( - XamlTreeBuilder treeBuilder, - XamlReaderHelper tokenReader, - ParserContext parserContext) : this(tokenReader, parserContext) - { - _treeBuilder = treeBuilder; - } - -#endif - /// /// Constructor. /// @@ -70,11 +50,8 @@ internal TemplateXamlParser( _previousXamlParser = TokenReader.ControllingXamlParser; TokenReader.ControllingXamlParser = this; - _startingDepth = TokenReader.XmlReader.Depth; } -#endregion Constructors - #region Overrides @@ -1666,15 +1643,7 @@ private void WriteDataTypeKey(XamlPropertyWithTypeNode xamlPropertyNode) internal override void ParseError(XamlParseException e) { CloseWriterStream(); -#if !PBTCOMPILER - // If there is an associated treebuilder, tell it about the error. There may not - // be a treebuilder, if this parser was built from a serializer for the purpose of - // converting directly to baml, rather than converting to an object tree. - if (TreeBuilder != null) - { - TreeBuilder.XamlTreeBuildError(e); - } -#endif + throw e; } @@ -1729,15 +1698,6 @@ internal void CloseWriterStream() #region Properties -#if !PBTCOMPILER - /// - /// TreeBuilder associated with this class - /// - XamlTreeBuilder TreeBuilder - { - get { return _treeBuilder; } - } -#else /// /// Return true if we are not in pass one of a compile and we are parsing a /// defer load section of markup. Note that if this is nested within a @@ -1783,24 +1743,14 @@ private Type ItemContainerTemplateKeyType } } -#endif - #endregion Properties #region Data -#if !PBTCOMPILER - // TreeBuilder that created this parser - XamlTreeBuilder _treeBuilder; -#endif // The XamlParser that the TokenReader was using when this instance of // the TemplateXamlParser was created. This must be restored on exit private XamlParser _previousXamlParser; - // Depth in the Xaml file when parsing of this template block started. - // This is used to determine when to stop parsing - private int _startingDepth; - // Number of template root nodes encountered immediately under a Template. Only 1 // is allowed. private int _templateRootCount; diff --git a/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/TreeBuilder.cs b/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/TreeBuilder.cs deleted file mode 100644 index 7908afb1be2..00000000000 --- a/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/TreeBuilder.cs +++ /dev/null @@ -1,330 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -/***************************************************************************\ -* -* Purpose: Class that builds a stream from XAML or BAML and handles -* -\***************************************************************************/ - -using System.Diagnostics; - -#if PBTCOMPILER -namespace MS.Internal.Markup -#else - -using System.Windows; -using System.Windows.Threading; - - -namespace System.Windows.Markup -#endif -{ - /// - /// internal base class that acts as the Traffic cop for reading BAMl and XMAL. - /// The XamlTreeBuilder and TreeBuilderBamlTranslator class override this class for each - /// of there implementations. - /// - internal abstract class TreeBuilder - { - #region Constructors - - - /// - /// Constructor - /// - public TreeBuilder() - { - } - - #endregion Constructors - - #region Methods - -#if !PBTCOMPILER - /// - /// Internal Avalon method. Used to load the file. Does not allow multiple roots. - /// - /// The root of the loaded file - public object Parse () - { - // if there is a BamlRecordReader setup the inherited Properties - Debug.Assert (null != RecordReader, "No BamlRecordReader at Parse() time"); - - object root = ParseFragment (); - - // If the root is a DependencyObject, then store the XamlTypeMapper's xmlns hashtable on - // it so that it can be used for runtime lookups of xaml namespace prefixes. Make - // sure to enter the context associated with the root, since the context may change - // for async parse cases - if (root is DependencyObject && !RecordReader.IsRootAlreadyLoaded) - { - ((DependencyObject)root).SetValue(XmlAttributeProperties.XmlNamespaceMapsProperty, - RecordReader.XamlTypeMapper.NamespaceMapHashList); - } - - // Or, if the root is a MarupExtension, we need to convert it into it's final value. - else if( root is MarkupExtension ) - { - root = (root as MarkupExtension).ProvideValue(null); - } - - return root; - } -#endif - - /// - /// Internal Avalon method. Used to Load a file. - /// - /// An array containing the root objects Loaded from the stream stream - public virtual object ParseFragment () - { - Debug.Assert (false, "Parse Fragment was not overidden"); - return null; - } - -#if !PBTCOMPILER // No async support for compilation - - /// - /// called when in async mode when get a time slice to read and load the Tree - /// - internal virtual void HandleAsyncQueueItem () - { - Debug.Assert (false == RecordReader.EndOfDocument); // shouldn't be called after end - - try - { - int startTickCount = MS.Win32.SafeNativeMethods.GetTickCount(); - bool moreData = true; - - // It is possible that we have encountered an exception while parsing/loading - // the root element which would have happened prior to this. Hence the additional checks. - - if (!_parseStarted && !RecordReader.EndOfDocument && !ParseError && !ParseCancelled) - { - if(RecordReader.BytesAvailible < BamlVersionHeader.BinarySerializationSize) - { - return; - } - RecordReader.ReadVersionHeader(); - _parseStarted = true; - } - - // for debugging, can set the Maximum Async records to - // read via markup - // x:AsyncRecords="3" would loop three times - int maxRecords = MaxAsyncRecords; - - // while there is moreData and not at the end of document. - while (moreData && !RecordReader.EndOfDocument && !ParseError && !ParseCancelled) - { - moreData = RecordReader.Read (true /* single record mode*/); - //Debug.Assert (1 >= RootList.Count, "Multiple roots not supported in async mode"); - - // check the timeout - int elapsed = MS.Win32.SafeNativeMethods.GetTickCount() - startTickCount; - - // check for rollover - if (elapsed < 0) - { - startTickCount = 0; // reset to 0, - } - else if (elapsed > AsyncLoopTimeout) - { - break; - } - - // decrement and compare with zero so the unitialized -1 and zero case - // doesn't break the loop. - if (--maxRecords == 0) - { - break; - } - - } - } - catch (XamlParseException e) - { - ParseException = e; - } - finally - { - if (ParseError || ParseCancelled) - { - Debug.Assert (ParseError == (null != ParseException), "ParseError flag and ParseException must match up"); - TreeBuildComplete(); - } - else - { - // if not at the EndOfDocument then post another work item - if (false == RecordReader.EndOfDocument) - { - Post (); - } - else - { - // Building of the Tree is complete. - TreeBuildComplete (); - } - } - } - } -#endif - - /// - /// Called when Tree has been completely built. - /// - internal virtual void TreeBuildComplete () - { - } - - - #endregion Methods - - #region Properties - -#if !PBTCOMPILER - /// - /// ParserHooks implementation - /// - internal ParserHooks ParserHooks - { - get { return _hooks; } - set { _hooks = value; } - } - - /// - /// Root element - /// - internal object GetRoot() - { - ArrayList roots = RecordReader.RootList; - object root = (null == roots || 0 == roots.Count) ? null : roots[0]; - - if (root != null && roots.Count > 1) - { - throw new XamlParseException(SR.ParserMultiRoot); - } - - return root; - } - - /// - /// BamlRecordReader used for Loading the Tree - /// - internal BamlRecordReader RecordReader - { - get { return _bamlRecordReader; } - set { _bamlRecordReader = value; } - } - -#endif - -#if !PBTCOMPILER - /// - /// Mode we are loading the file in Sync, Async - /// - internal XamlParseMode XamlParseMode - { - get { return _xamlParseMode; } - set { _xamlParseMode = value; } - } - - /// - /// Maximum amount of records allowed to read within - /// a HandleAsync call - /// - internal int MaxAsyncRecords - { - get { return _maxAsyncRecords; } - set { _maxAsyncRecords = value; } - } - - /// - /// flag to indicate a ParseError occured - /// - internal bool ParseError - { - get { return _parseException != null; } - } - - /// - /// Exception that caused the Parse Error - /// - internal Exception ParseException - { - get { return _parseException; } - set { _parseException = value; } - } - - /// - /// Flag to indicate that the Parse was Cancelled before the tree was - /// completely loaded. - /// - internal bool ParseCancelled - { - get { return _parseCancelled; } - set { _parseCancelled = value; } - } -#endif - - #endregion Properties - - #region Queuing - - -#if !PBTCOMPILER - /// - /// Post a queue item at default priority - /// - internal void Post () - { - Post (DispatcherPriority.Background); - } - - /// - /// Post a queue item at the specified priority - /// - internal void Post (DispatcherPriority priority) - { - DispatcherOperationCallback callback = new DispatcherOperationCallback (Dispatch); - Dispatcher.CurrentDispatcher.BeginInvoke(priority, callback, this); - } - - - /// - /// Dispatch delegate - /// - private object Dispatch (object o) - { - DispatchParserQueueEvent ((TreeBuilder)o); - return null; - } - - private void DispatchParserQueueEvent (TreeBuilder treeBuilder) - { - treeBuilder.HandleAsyncQueueItem (); - } - -#endif - - #endregion Queuing - - #region Data - - // Timeout after .2 seconds. - private const int AsyncLoopTimeout = (int)200; - -#if !PBTCOMPILER - BamlRecordReader _bamlRecordReader; - XamlParseMode _xamlParseMode; - ParserHooks _hooks; - bool _parseCancelled; - bool _parseStarted; - Exception _parseException; - int _maxAsyncRecords; -#endif - #endregion Data - } -}