提交 5235ce90 编写于 作者: A Andrew Hall (METAL)

Update extension method instead of introducing change to code refactoring provider

上级 7929e1be
......@@ -5,9 +5,7 @@
using Microsoft.CodeAnalysis.CodeStyle;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.CodeStyle;
using Microsoft.CodeAnalysis.CSharp.GenerateConstructorFromMembers;
using Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.CodeRefactorings;
using Microsoft.CodeAnalysis.GenerateConstructorFromMembers;
using Microsoft.CodeAnalysis.PickMembers;
using Microsoft.CodeAnalysis.Test.Utilities;
using Roslyn.Test.Utilities;
......
......@@ -5,14 +5,13 @@ Imports Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.CodeRefactorings
Imports Microsoft.CodeAnalysis.GenerateConstructorFromMembers
Imports Microsoft.CodeAnalysis.Options
Imports Microsoft.CodeAnalysis.PickMembers
Imports Microsoft.CodeAnalysis.VisualBasic.GenerateConstructorFromMembers
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.GenerateConstructorFromMembers
Public Class GenerateConstructorFromMembersTests
Inherits AbstractVisualBasicCodeActionTest
Protected Overrides Function CreateCodeRefactoringProvider(workspace As Workspace, parameters As TestParameters) As CodeRefactoringProvider
Return New GenerateConstructorFromMembersVisualBasic(DirectCast(parameters.fixProviderData, IPickMembersService))
Return New GenerateConstructorFromMembersCodeRefactoringProvider(DirectCast(parameters.fixProviderData, IPickMembersService))
End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateConstructorFromMembers)>
......
// 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.Composition;
using Microsoft.CodeAnalysis.CodeRefactorings;
using Microsoft.CodeAnalysis.GenerateConstructorFromMembers;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.PickMembers;
namespace Microsoft.CodeAnalysis.CSharp.GenerateConstructorFromMembers
{
[ExportCodeRefactoringProvider(LanguageNames.CSharp, Name = PredefinedCodeRefactoringProviderNames.GenerateConstructorFromMembers), Shared]
[ExtensionOrder(Before = PredefinedCodeRefactoringProviderNames.GenerateEqualsAndGetHashCodeFromMembers)]
internal class GenerateConstructorFromMembersCSharp : AbstractGenerateConstructorFromMembersCodeRefactoringProvider
{
[ImportingConstructor]
public GenerateConstructorFromMembersCSharp() : this(null)
{
}
/// <summary>
/// For testing purposes only.
/// </summary>
internal GenerateConstructorFromMembersCSharp(IPickMembersService pickMembersService_forTesting)
: base(pickMembersService_forTesting)
{
}
protected override bool GetNullCheckOptionEnabled(DocumentOptionSet optionSet)
=> optionSet.GetOption(GenerateConstructorFromMembersOptions.AddNullChecks);
}
}
......@@ -14,17 +14,17 @@
namespace Microsoft.CodeAnalysis.GenerateConstructorFromMembers
{
internal partial class AbstractGenerateConstructorFromMembersCodeRefactoringProvider
internal partial class GenerateConstructorFromMembersCodeRefactoringProvider
{
private class ConstructorDelegatingCodeAction : CodeAction
{
private readonly AbstractGenerateConstructorFromMembersCodeRefactoringProvider _service;
private readonly GenerateConstructorFromMembersCodeRefactoringProvider _service;
private readonly Document _document;
private readonly State _state;
private readonly bool _addNullChecks;
public ConstructorDelegatingCodeAction(
AbstractGenerateConstructorFromMembersCodeRefactoringProvider service,
GenerateConstructorFromMembersCodeRefactoringProvider service,
Document document,
State state,
bool addNullChecks)
......
......@@ -13,17 +13,17 @@
namespace Microsoft.CodeAnalysis.GenerateConstructorFromMembers
{
internal partial class AbstractGenerateConstructorFromMembersCodeRefactoringProvider
internal partial class GenerateConstructorFromMembersCodeRefactoringProvider
{
private class FieldDelegatingCodeAction : CodeAction
{
private readonly AbstractGenerateConstructorFromMembersCodeRefactoringProvider _service;
private readonly GenerateConstructorFromMembersCodeRefactoringProvider _service;
private readonly Document _document;
private readonly State _state;
private readonly bool _addNullChecks;
public FieldDelegatingCodeAction(
AbstractGenerateConstructorFromMembersCodeRefactoringProvider service,
GenerateConstructorFromMembersCodeRefactoringProvider service,
Document document,
State state,
bool addNullChecks)
......
......@@ -12,13 +12,13 @@
namespace Microsoft.CodeAnalysis.GenerateConstructorFromMembers
{
internal partial class AbstractGenerateConstructorFromMembersCodeRefactoringProvider : AbstractGenerateFromMembersCodeRefactoringProvider
internal partial class GenerateConstructorFromMembersCodeRefactoringProvider : AbstractGenerateFromMembersCodeRefactoringProvider
{
private class GenerateConstructorWithDialogCodeAction : CodeActionWithOptions
{
private readonly Document _document;
private readonly INamedTypeSymbol _containingType;
private readonly AbstractGenerateConstructorFromMembersCodeRefactoringProvider _service;
private readonly GenerateConstructorFromMembersCodeRefactoringProvider _service;
private readonly TextSpan _textSpan;
private readonly ImmutableArray<ISymbol> _viableMembers;
private readonly ImmutableArray<PickMembersOption> _pickMembersOptions;
......@@ -26,7 +26,7 @@ private class GenerateConstructorWithDialogCodeAction : CodeActionWithOptions
public override string Title => FeaturesResources.Generate_constructor;
public GenerateConstructorWithDialogCodeAction(
AbstractGenerateConstructorFromMembersCodeRefactoringProvider service,
GenerateConstructorFromMembersCodeRefactoringProvider service,
Document document, TextSpan textSpan,
INamedTypeSymbol containingType,
ImmutableArray<ISymbol> viableMembers,
......
......@@ -8,7 +8,7 @@
namespace Microsoft.CodeAnalysis.GenerateConstructorFromMembers
{
internal partial class AbstractGenerateConstructorFromMembersCodeRefactoringProvider
internal partial class GenerateConstructorFromMembersCodeRefactoringProvider
{
private class State
{
......@@ -20,7 +20,7 @@ private class State
public ImmutableArray<IParameterSymbol> Parameters { get; private set; }
public static State TryGenerate(
AbstractGenerateConstructorFromMembersCodeRefactoringProvider service,
GenerateConstructorFromMembersCodeRefactoringProvider service,
Document document,
TextSpan textSpan,
INamedTypeSymbol containingType,
......@@ -37,7 +37,7 @@ private class State
}
private bool TryInitialize(
AbstractGenerateConstructorFromMembersCodeRefactoringProvider service,
GenerateConstructorFromMembersCodeRefactoringProvider service,
Document document,
TextSpan textSpan,
INamedTypeSymbol containingType,
......
......@@ -11,7 +11,6 @@
using Microsoft.CodeAnalysis.GenerateFromMembers;
using Microsoft.CodeAnalysis.Internal.Log;
using Microsoft.CodeAnalysis.LanguageServices;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.PickMembers;
using Microsoft.CodeAnalysis.PooledObjects;
using Microsoft.CodeAnalysis.Shared.Extensions;
......@@ -31,18 +30,24 @@ namespace Microsoft.CodeAnalysis.GenerateConstructorFromMembers
/// something like "new MyType(x, y, z)", nor is it responsible for generating constructors
/// in a derived type that delegate to a base type. Both of those are handled by other services.
/// </summary>
internal abstract partial class AbstractGenerateConstructorFromMembersCodeRefactoringProvider : AbstractGenerateFromMembersCodeRefactoringProvider
[ExportCodeRefactoringProvider(LanguageNames.CSharp, LanguageNames.VisualBasic,
Name = PredefinedCodeRefactoringProviderNames.GenerateConstructorFromMembers), Shared]
[ExtensionOrder(Before = PredefinedCodeRefactoringProviderNames.GenerateEqualsAndGetHashCodeFromMembers)]
internal partial class GenerateConstructorFromMembersCodeRefactoringProvider : AbstractGenerateFromMembersCodeRefactoringProvider
{
private const string AddNullChecksId = nameof(AddNullChecksId);
private readonly IPickMembersService _pickMembersService_forTesting;
protected abstract bool GetNullCheckOptionEnabled(DocumentOptionSet optionSet);
[ImportingConstructor]
public GenerateConstructorFromMembersCodeRefactoringProvider() : this(null)
{
}
/// <summary>
/// For testing purposes only.
/// </summary>
internal AbstractGenerateConstructorFromMembersCodeRefactoringProvider(IPickMembersService pickMembersService_forTesting)
internal GenerateConstructorFromMembersCodeRefactoringProvider(IPickMembersService pickMembersService_forTesting)
{
_pickMembersService_forTesting = pickMembersService_forTesting;
}
......@@ -117,7 +122,7 @@ private async Task HandleNonSelectionAsync(CodeRefactoringContext context)
if (canAddNullCheck)
{
var options = await document.GetOptionsAsync(cancellationToken).ConfigureAwait(false);
var optionValue = GetNullCheckOptionEnabled(options);
var optionValue = options.GetOption(GenerateConstructorFromMembersOptions.AddNullChecks);
pickMemberOptions.Add(new PickMembersOption(
AddNullChecksId,
......
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Imports System.Composition
Imports Microsoft.CodeAnalysis.CodeRefactorings
Imports Microsoft.CodeAnalysis.GenerateConstructorFromMembers
Imports Microsoft.CodeAnalysis.Options
Imports Microsoft.CodeAnalysis.PickMembers
Namespace Microsoft.CodeAnalysis.VisualBasic.GenerateConstructorFromMembers
<ExportCodeRefactoringProvider(LanguageNames.VisualBasic, Name:=PredefinedCodeRefactoringProviderNames.GenerateConstructorFromMembers), [Shared]>
<ExtensionOrder(Before:=PredefinedCodeRefactoringProviderNames.GenerateEqualsAndGetHashCodeFromMembers)>
Friend Class GenerateConstructorFromMembersVisualBasic
Inherits AbstractGenerateConstructorFromMembersCodeRefactoringProvider
<ImportingConstructor>
Public Sub New()
Me.New(Nothing)
End Sub
Public Sub New(pickMembersService_forTesting As IPickMembersService)
MyBase.New(pickMembersService_forTesting)
End Sub
Protected Overrides Function GetNullCheckOptionEnabled(optionSet As DocumentOptionSet) As Boolean
Return False
End Function
End Class
End Namespace
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册