diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index fcb8af2bba..f79afa9e86 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -2256,18 +2256,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return; } string typeString = GetShortType(resolvedType, state); - if (typeString.Contains(".")) { - completionList.AddType(resolvedType, typeString); - } - foreach (var field in resolvedType.GetFields ()) { - if (field.IsConst || field.IsStatic) { - completionList.Result.Add(factory.CreateEntityCompletionData( - field, - typeString + "." + field.Name - ) - ); - } - } + completionList.AddEnumMembers (resolvedType, state, typeString); DefaultCompletionString = typeString; } diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs b/ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs index 0782da3947..d244b97771 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs @@ -28,6 +28,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Completion; using ICSharpCode.NRefactory.TypeSystem; using System.Linq; +using ICSharpCode.NRefactory.CSharp.Resolver; namespace ICSharpCode.NRefactory.CSharp.Completion { @@ -239,6 +240,25 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return 1; } } + HashSet addedEnums = new HashSet (); + public void AddEnumMembers (IType resolvedType, CSharpResolver state, string typeString) + { + if (addedEnums.Contains (resolvedType)) + return; + addedEnums.Add (resolvedType); + if (typeString.Contains(".")) { + AddType(resolvedType, typeString); + } + foreach (var field in resolvedType.GetFields ()) { + if (field.IsPublic && (field.IsConst || field.IsStatic)) { + Result.Add(Factory.CreateEntityCompletionData( + field, + typeString + "." + field.Name + ) + ); + } + } + } } } diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/AstFormattingVisitor.cs b/ICSharpCode.NRefactory.CSharp/Formatter/AstFormattingVisitor.cs index 5d91a97ca5..ac58953794 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/AstFormattingVisitor.cs +++ b/ICSharpCode.NRefactory.CSharp/Formatter/AstFormattingVisitor.cs @@ -97,6 +97,11 @@ namespace ICSharpCode.NRefactory.CSharp get; set; } + + public DomRegion FormattingRegion { + get; + set; + } public AstFormattingVisitor(CSharpFormattingOptions policy, IDocument document, TextEditorOptions options = null) { @@ -111,6 +116,22 @@ namespace ICSharpCode.NRefactory.CSharp this.options = options ?? TextEditorOptions.Default; curIndent = new Indent(this.options); } + + protected virtual void VisitChildren (AstNode node) + { + if (!FormattingRegion.IsEmpty) { + if (node.EndLocation < FormattingRegion.Begin || node.StartLocation > FormattingRegion.End) + return; + } + + AstNode next; + for (var child = node.FirstChild; child != null; child = next) { + // Store next to allow the loop to continue + // if the visitor removes/replaces child. + next = child.NextSibling; + child.AcceptVisitor (this); + } + } /// /// Applies the changes to the input document.