示例#1
0
        public T ProcessReplacement <T>(T node) where T : ISyntaxTreeNode
        {
            _replacementSource.PrepareToVisit();
            node.AcceptSyntaxTreeVisitor(_replacementSource.ReplacementVisitor);

            if (!_replacementSource.ShouldReplace)
            {
                return(node);
            }

            // TODO: Add static analysis for this.
            if (!(_replacementSource.NewNode is T replacement))
            {
                throw new InvalidOperationException("Cannot replace, type mismatch");
            }

            _listener.NodeReplaced(node, replacement);

            return(replacement);
        }