提交 d2907a4f 编写于 作者: C CyrusNajmabadi

Remove dead code from GenerateConstructor.

上级 6b99a66a
......@@ -44,29 +44,17 @@ private partial class Editor
internal async Task<Document> GetEditAsync()
{
// First, if we were just given the constructor and the type to generate it into
// then just go generat that constructor. There's nothing special we need to do.
var edit = await GenerateDelegatedConstructorAsync().ConfigureAwait(false);
if (edit != null)
{
return edit;
}
// then, see if there's an accessible base constructor that would accept these
// See if there's an accessible base constructor that would accept these
// types, then just call into that instead of generating fields.
//
// then, see if there are any constructors that would take the first 'n' arguments
// we've provided. If so, delegate to those, and then create a field for any
// remaining arguments. Try to match from largest to smallest.
edit = await GenerateThisOrBaseDelegatingConstructorAsync().ConfigureAwait(false);
if (edit != null)
{
return edit;
}
//
// Otherwise, just generate a normal constructor that assigns any provided
// parameters into fields.
return await GenerateFieldDelegatingConstructorAsync().ConfigureAwait(false);
return await GenerateThisOrBaseDelegatingConstructorAsync().ConfigureAwait(false) ??
await GenerateFieldDelegatingConstructorAsync().ConfigureAwait(false);
}
private async Task<Document> GenerateThisOrBaseDelegatingConstructorAsync()
......@@ -97,51 +85,6 @@ private async Task<Document> GenerateThisOrBaseDelegatingConstructorAsync(int ar
return null;
}
private async Task<Document> GenerateDelegatedConstructorAsync()
{
var delegatedConstructor = _state.DelegatedConstructorOpt;
if (delegatedConstructor == null)
{
return null;
}
var namedType = _state.TypeToGenerateIn;
if (namedType == null)
{
return null;
}
// There was a best match. Call it directly.
var provider = _document.Project.Solution.Workspace.Services.GetLanguageServices(_state.TypeToGenerateIn.Language);
var syntaxFactory = provider.GetService<SyntaxGenerator>();
var codeGenerationService = provider.GetService<ICodeGenerationService>();
var isThis = namedType.Equals(delegatedConstructor.ContainingType);
var delegatingArguments = syntaxFactory.CreateArguments(delegatedConstructor.Parameters);
var baseConstructorArguments = isThis ? default : delegatingArguments;
var thisConstructorArguments = isThis ? delegatingArguments : default;
var constructor = CodeGenerationSymbolFactory.CreateConstructorSymbol(
attributes: default,
accessibility: Accessibility.Public,
modifiers: default,
typeName: _state.TypeToGenerateIn.Name,
parameters: delegatedConstructor.Parameters,
baseConstructorArguments: baseConstructorArguments,
thisConstructorArguments: thisConstructorArguments);
var result = await codeGenerationService.AddMembersAsync(
_document.Project.Solution,
_state.TypeToGenerateIn,
new List<ISymbol> { constructor },
new CodeGenerationOptions(_state.Token.GetLocation()),
_cancellationToken)
.ConfigureAwait(false);
return result;
}
private async Task<Document> GenerateDelegatingConstructorAsync(
int argumentCount,
INamedTypeSymbol namedType)
......
......@@ -29,8 +29,6 @@ protected internal class State
public IList<RefKind> ParameterRefKinds { get; private set; }
public ImmutableArray<ITypeSymbol> ParameterTypes { get; private set; }
public IMethodSymbol DelegatedConstructorOpt { get; private set; }
public SyntaxToken Token { get; private set; }
public bool IsConstructorInitializerGeneration { get; private set; }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册