diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs b/ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs index b12ae6c773..87cfa33fb8 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs @@ -76,46 +76,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion HashSet usedTypes = new HashSet (); - /// - /// Gets the EditorBrowsableState of an entity. - /// - /// - /// The editor browsable state. - /// - /// - /// Entity. - /// - public static System.ComponentModel.EditorBrowsableState GetEditorBrowsableState(IEntity entity) - { - var browsable = entity.Attributes.FirstOrDefault(attr => attr.AttributeType.Name == "BrowsableAttribute" && attr.AttributeType.Namespace == "System.ComponentModel"); - if (browsable != null && browsable.PositionalArguments.Count == 1 && browsable.PositionalArguments [0].ConstantValue is bool) { - if (!((bool)browsable.PositionalArguments [0].ConstantValue)) - return System.ComponentModel.EditorBrowsableState.Never; - } - - var browsableState = entity.Attributes.FirstOrDefault(attr => attr.AttributeType.Name == "EditorBrowsableAttribute" && attr.AttributeType.Namespace == "System.ComponentModel"); - if (browsableState != null && browsableState.PositionalArguments.Count == 1) { - try { - return (System.ComponentModel.EditorBrowsableState)browsableState.PositionalArguments [0].ConstantValue; - } catch (Exception) {} - } - return System.ComponentModel.EditorBrowsableState.Always; - } - - /// - /// Determines if an entity should be shown in the code completion window. - /// - /// - /// true if the entity should be shown; otherwise, false. - /// - /// - /// The entity. - /// - public static bool IsBrowsable(IEntity entity) - { - return GetEditorBrowsableState (entity) != System.ComponentModel.EditorBrowsableState.Never; - } - public ICompletionData AddType(IType type, string shortType) { if (type == null || string.IsNullOrEmpty(shortType) || usedTypes.Contains(shortType)) @@ -124,7 +84,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return null; var def = type.GetDefinition (); - if (def != null && !IsBrowsable (def)) + if (def != null && !def.IsBrowsable ()) return null; usedTypes.Add(shortType); @@ -171,7 +131,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion { var newData = Factory.CreateEntityCompletionData (member); - if (!IsBrowsable (member)) + if (!member.IsBrowsable ()) return null; string memberKey = newData.DisplayText; diff --git a/ICSharpCode.NRefactory/Completion/CompletionExtensionMethods.cs b/ICSharpCode.NRefactory/Completion/CompletionExtensionMethods.cs new file mode 100644 index 0000000000..82694c9857 --- /dev/null +++ b/ICSharpCode.NRefactory/Completion/CompletionExtensionMethods.cs @@ -0,0 +1,79 @@ +// +// CompletionExtensionMethods.cs +// +// Author: +// Mike Krüger +// +// Copyright (c) 2012 Xamarin Inc. (http://xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +using System; +using ICSharpCode.NRefactory.TypeSystem; +using System.Linq; + +namespace ICSharpCode.NRefactory.Completion +{ + public static class CompletionExtensionMethods + { + /// + /// Gets the EditorBrowsableState of an entity. + /// + /// + /// The editor browsable state. + /// + /// + /// Entity. + /// + public static System.ComponentModel.EditorBrowsableState GetEditorBrowsableState(this IEntity entity) + { + if (entity == null) + throw new ArgumentNullException ("entity"); + + var browsable = entity.Attributes.FirstOrDefault(attr => attr.AttributeType.Name == "BrowsableAttribute" && attr.AttributeType.Namespace == "System.ComponentModel"); + if (browsable != null && browsable.PositionalArguments.Count == 1 && browsable.PositionalArguments [0].ConstantValue is bool) { + if (!((bool)browsable.PositionalArguments [0].ConstantValue)) + return System.ComponentModel.EditorBrowsableState.Never; + } + + var browsableState = entity.Attributes.FirstOrDefault(attr => attr.AttributeType.Name == "EditorBrowsableAttribute" && attr.AttributeType.Namespace == "System.ComponentModel"); + if (browsableState != null && browsableState.PositionalArguments.Count == 1) { + try { + return (System.ComponentModel.EditorBrowsableState)browsableState.PositionalArguments [0].ConstantValue; + } catch (Exception) {} + } + return System.ComponentModel.EditorBrowsableState.Always; + } + + /// + /// Determines if an entity should be shown in the code completion window. This is the same as: + /// GetEditorBrowsableState (entity) != System.ComponentModel.EditorBrowsableState.Never + /// + /// + /// true if the entity should be shown; otherwise, false. + /// + /// + /// The entity. + /// + public static bool IsBrowsable(this IEntity entity) + { + return GetEditorBrowsableState (entity) != System.ComponentModel.EditorBrowsableState.Never; + } + } +} + diff --git a/ICSharpCode.NRefactory/ICSharpCode.NRefactory.csproj b/ICSharpCode.NRefactory/ICSharpCode.NRefactory.csproj index 7189df55a6..f595fc990f 100644 --- a/ICSharpCode.NRefactory/ICSharpCode.NRefactory.csproj +++ b/ICSharpCode.NRefactory/ICSharpCode.NRefactory.csproj @@ -15,7 +15,7 @@ false False -Microsoft.Design#CA1000;-Microsoft.Design#CA1004;-Microsoft.Design#CA1005;-Microsoft.Design#CA1006;-Microsoft.Design#CA1026;-Microsoft.Design#CA1033;-Microsoft.Design#CA1051;-Microsoft.Design#CA1063;-Microsoft.Naming#CA1702;-Microsoft.Naming#CA1704;-Microsoft.Naming#CA1710;-Microsoft.Naming#CA1716;-Microsoft.Naming#CA1720;-Microsoft.Performance#CA1800;-Microsoft.Security#CA2104 - true + True ..\ICSharpCode.NRefactory.snk False File @@ -44,12 +44,11 @@ False - Full - true + full + True - PdbOnly - false + none @@ -233,6 +232,7 @@ +