diff --git a/ICSharpCode.NRefactory/CSharp/Ast/AstNode.cs b/ICSharpCode.NRefactory/CSharp/Ast/AstNode.cs index f05be52cfd..71e3b5d358 100644 --- a/ICSharpCode.NRefactory/CSharp/Ast/AstNode.cs +++ b/ICSharpCode.NRefactory/CSharp/Ast/AstNode.cs @@ -448,6 +448,8 @@ namespace ICSharpCode.NRefactory.CSharp { if (annotation == null) throw new ArgumentNullException("annotation"); + if (this.IsNull) + throw new InvalidOperationException("Cannot add annotations to the null node"); retry: // Retry until successful object oldAnnotation = Interlocked.CompareExchange(ref this.annotations, annotation, null); if (oldAnnotation == null) { diff --git a/ICSharpCode.NRefactory/CSharp/OutputVisitor/IOutputFormatter.cs b/ICSharpCode.NRefactory/CSharp/OutputVisitor/IOutputFormatter.cs index 3aff02b5ff..ac1966296c 100644 --- a/ICSharpCode.NRefactory/CSharp/OutputVisitor/IOutputFormatter.cs +++ b/ICSharpCode.NRefactory/CSharp/OutputVisitor/IOutputFormatter.cs @@ -10,6 +10,9 @@ namespace ICSharpCode.NRefactory.CSharp /// public interface IOutputFormatter { + void StartNode(AstNode node); + void EndNode(AstNode node); + /// /// Writes an identifier. /// If the identifier conflicts with a keyword, the output visitor will diff --git a/ICSharpCode.NRefactory/CSharp/OutputVisitor/OutputVisitor.cs b/ICSharpCode.NRefactory/CSharp/OutputVisitor/OutputVisitor.cs index 0e487ea3f6..12fea7d59e 100644 --- a/ICSharpCode.NRefactory/CSharp/OutputVisitor/OutputVisitor.cs +++ b/ICSharpCode.NRefactory/CSharp/OutputVisitor/OutputVisitor.cs @@ -67,6 +67,7 @@ namespace ICSharpCode.NRefactory.CSharp WriteSpecialsUpToNode(node); currentContainerNode = node; positionStack.Push(node.FirstChild); + formatter.StartNode(node); } object EndNode(AstNode node) @@ -76,6 +77,7 @@ namespace ICSharpCode.NRefactory.CSharp Debug.Assert(pos == null || pos.Parent == node); WriteSpecials(pos, null); currentContainerNode = node.Parent; + formatter.EndNode(node); return null; } #endregion diff --git a/ICSharpCode.NRefactory/CSharp/OutputVisitor/TextWriterOutputFormatter.cs b/ICSharpCode.NRefactory/CSharp/OutputVisitor/TextWriterOutputFormatter.cs index e14d1032c3..f8c1340e58 100644 --- a/ICSharpCode.NRefactory/CSharp/OutputVisitor/TextWriterOutputFormatter.cs +++ b/ICSharpCode.NRefactory/CSharp/OutputVisitor/TextWriterOutputFormatter.cs @@ -107,5 +107,13 @@ namespace ICSharpCode.NRefactory.CSharp break; } } + + public virtual void StartNode(AstNode node) + { + } + + public virtual void EndNode(AstNode node) + { + } } }