Browse Source

[Completion] Moved the browsable check helper methods to nrefactory.

The browsable state is a .NET feature and not C# specific.
newNRvisualizers
Mike Krüger 14 years ago
parent
commit
6575de9f79
  1. 44
      ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs
  2. 79
      ICSharpCode.NRefactory/Completion/CompletionExtensionMethods.cs
  3. 10
      ICSharpCode.NRefactory/ICSharpCode.NRefactory.csproj

44
ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs

@ -76,46 +76,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -76,46 +76,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
HashSet<string> usedTypes = new HashSet<string> ();
/// <summary>
/// Gets the EditorBrowsableState of an entity.
/// </summary>
/// <returns>
/// The editor browsable state.
/// </returns>
/// <param name='entity'>
/// Entity.
/// </param>
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;
}
/// <summary>
/// Determines if an entity should be shown in the code completion window.
/// </summary>
/// <returns>
/// <c>true</c> if the entity should be shown; otherwise, <c>false</c>.
/// </returns>
/// <param name='entity'>
/// The entity.
/// </param>
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 @@ -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 @@ -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;

79
ICSharpCode.NRefactory/Completion/CompletionExtensionMethods.cs

@ -0,0 +1,79 @@ @@ -0,0 +1,79 @@
//
// CompletionExtensionMethods.cs
//
// Author:
// Mike Krüger <mkrueger@xamarin.com>
//
// 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
{
/// <summary>
/// Gets the EditorBrowsableState of an entity.
/// </summary>
/// <returns>
/// The editor browsable state.
/// </returns>
/// <param name='entity'>
/// Entity.
/// </param>
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;
}
/// <summary>
/// Determines if an entity should be shown in the code completion window. This is the same as:
/// <c>GetEditorBrowsableState (entity) != System.ComponentModel.EditorBrowsableState.Never</c>
/// </summary>
/// <returns>
/// <c>true</c> if the entity should be shown; otherwise, <c>false</c>.
/// </returns>
/// <param name='entity'>
/// The entity.
/// </param>
public static bool IsBrowsable(this IEntity entity)
{
return GetEditorBrowsableState (entity) != System.ComponentModel.EditorBrowsableState.Never;
}
}
}

10
ICSharpCode.NRefactory/ICSharpCode.NRefactory.csproj

@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<RunCodeAnalysis>False</RunCodeAnalysis>
<CodeAnalysisRules>-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</CodeAnalysisRules>
<SignAssembly>true</SignAssembly>
<SignAssembly>True</SignAssembly>
<AssemblyOriginatorKeyFile>..\ICSharpCode.NRefactory.snk</AssemblyOriginatorKeyFile>
<DelaySign>False</DelaySign>
<AssemblyOriginatorKeyMode>File</AssemblyOriginatorKeyMode>
@ -44,12 +44,11 @@ @@ -44,12 +44,11 @@
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugType>Full</DebugType>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DebugSymbols>True</DebugSymbols>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>PdbOnly</DebugType>
<DebugSymbols>false</DebugSymbols>
<DebugType>none</DebugType>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
@ -233,6 +232,7 @@ @@ -233,6 +232,7 @@
<Compile Include="Completion\IVariableCompletionData.cs" />
<Compile Include="Documentation\IdStringProvider.cs" />
<Compile Include="Documentation\IdStringMemberReference.cs" />
<Compile Include="Completion\CompletionExtensionMethods.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Completion\" />

Loading…
Cancel
Save