提交 f7f5f26f 编写于 作者: C CyrusNajmabadi

Use more immutable types.

上级 20a7fe98
......@@ -128,6 +128,7 @@
<Compile Include="CodeFixes\FixAllOccurrences\FixSomeCodeAction.cs" />
<Compile Include="AddPackage\InstallPackageDirectlyCodeAction.cs" />
<Compile Include="AddConstructorParametersFromMembers\State.cs" />
<Compile Include="GenerateFromMembers\SelectedMemberInfo.cs" />
<Compile Include="ImplementType\ImplementTypeOptions.cs" />
<Compile Include="ImplementType\ImplementTypeOptionsProvider.cs" />
<Compile Include="RemoveUnnecessaryImports\AbstractRemoveUnnecessaryImportsCodeFixProvider.cs" />
......
......@@ -20,19 +20,12 @@ internal interface IGenerateFromMembersHelperService : ILanguageService
IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken);
}
internal abstract class AbstractGenerateFromMembersCodeRefactoringProvider : CodeRefactoringProvider
internal abstract partial class AbstractGenerateFromMembersCodeRefactoringProvider : CodeRefactoringProvider
{
protected AbstractGenerateFromMembersCodeRefactoringProvider()
{
}
protected class SelectedMemberInfo
{
public INamedTypeSymbol ContainingType;
public IList<SyntaxNode> SelectedDeclarations;
public IList<ISymbol> SelectedMembers;
}
protected async Task<SelectedMemberInfo> GetSelectedMemberInfoAsync(
Document document, TextSpan textSpan, CancellationToken cancellationToken)
{
......@@ -44,13 +37,13 @@ protected class SelectedMemberInfo
{
var semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false);
var selectedMembers = selectedDeclarations.SelectMany(
d => helper.GetDeclaredSymbols(semanticModel, d, cancellationToken)).WhereNotNull().ToList();
if (selectedMembers.Count > 0)
d => helper.GetDeclaredSymbols(semanticModel, d, cancellationToken)).WhereNotNull().ToImmutableArray();
if (selectedMembers.Length > 0)
{
var containingType = selectedMembers.First().ContainingType;
if (containingType != null)
{
return new SelectedMemberInfo { ContainingType = containingType, SelectedDeclarations = selectedDeclarations, SelectedMembers = selectedMembers };
return new SelectedMemberInfo(containingType, selectedDeclarations, selectedMembers);
}
}
}
......@@ -58,13 +51,10 @@ protected class SelectedMemberInfo
return null;
}
// Can use non const fields and properties with setters in them.
protected static bool IsWritableInstanceFieldOrProperty(ISymbol symbol)
{
// Can use non const fields and properties with setters in them.
return
IsInstanceFieldOrProperty(symbol) &&
IsWritableFieldOrProperty(symbol);
}
=> IsInstanceFieldOrProperty(symbol) &&
IsWritableFieldOrProperty(symbol);
private static bool IsWritableFieldOrProperty(ISymbol symbol)
{
......@@ -77,19 +67,13 @@ private static bool IsWritableFieldOrProperty(ISymbol symbol)
}
protected static bool IsInstanceFieldOrProperty(ISymbol symbol)
{
return !symbol.IsStatic && (IsField(symbol) || IsProperty(symbol));
}
=> !symbol.IsStatic && (IsField(symbol) || IsProperty(symbol));
private static bool IsProperty(ISymbol symbol)
{
return symbol.Kind == SymbolKind.Property;
}
=> symbol.Kind == SymbolKind.Property;
private static bool IsField(ISymbol symbol)
{
return symbol.Kind == SymbolKind.Field;
}
=> symbol.Kind == SymbolKind.Field;
protected List<IParameterSymbol> DetermineParameters(
IList<ISymbol> selectedMembers)
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Immutable;
using Microsoft.CodeAnalysis.CodeRefactorings;
namespace Microsoft.CodeAnalysis.GenerateFromMembers
{
internal abstract partial class AbstractGenerateFromMembersCodeRefactoringProvider : CodeRefactoringProvider
{
protected class SelectedMemberInfo
{
public readonly INamedTypeSymbol ContainingType;
public readonly ImmutableArray<SyntaxNode> SelectedDeclarations;
public readonly ImmutableArray<ISymbol> SelectedMembers;
public SelectedMemberInfo(
INamedTypeSymbol containingType,
ImmutableArray<SyntaxNode> selectedDeclarations,
ImmutableArray<ISymbol> selectedMembers)
{
ContainingType = containingType;
SelectedDeclarations = selectedDeclarations;
SelectedMembers = selectedMembers;
}
}
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册