提交 a89d7716 编写于 作者: I Ivan Basov

Allow opening showing change signature for parameterless methods

上级 d69225a4
......@@ -136,7 +136,7 @@ internal ChangeSignatureResult ChangeSignature(Document document, int position,
return new ChangeSignatureAnalyzedContext(CannotChangeSignatureReason.IncorrectKind);
}
var parameterConfiguration = ParameterConfiguration.Create(symbol.GetParameters().Select(p => new ExistingParameter(p)).ToList<CoolParameter>(), symbol is IMethodSymbol && (symbol as IMethodSymbol).IsExtensionMethod, selectedIndex);
var parameterConfiguration = ParameterConfiguration.Create(symbol.GetParameters().Select(p => new ExistingParameter(p)).ToList<ParameterBase>(), symbol is IMethodSymbol && (symbol as IMethodSymbol).IsExtensionMethod, selectedIndex);
if (!parameterConfiguration.IsChangeable())
{
return new ChangeSignatureAnalyzedContext(CannotChangeSignatureReason.InsufficientParameters);
......
......@@ -2,14 +2,14 @@
namespace Microsoft.CodeAnalysis.ChangeSignature
{
internal abstract class CoolParameter
internal abstract class ParameterBase
{
public abstract bool HasExplicitDefaultValue { get; }
public abstract string Name { get; }
public abstract IParameterSymbol Symbol { get; }
}
internal class ExistingParameter : CoolParameter
internal class ExistingParameter : ParameterBase
{
public override IParameterSymbol Symbol { get; }
......@@ -22,7 +22,7 @@ public ExistingParameter(IParameterSymbol param)
public override string Name => Symbol.Name;
}
internal class AddedParameter : CoolParameter
internal class AddedParameter : ParameterBase
{
public AddedParameter(string type, string parameter, string callsite)
{
......
......@@ -8,13 +8,13 @@ namespace Microsoft.CodeAnalysis.ChangeSignature
{
internal sealed class ParameterConfiguration
{
public readonly CoolParameter ThisParameter;
public readonly List<CoolParameter> ParametersWithoutDefaultValues;
public readonly List<CoolParameter> RemainingEditableParameters;
public readonly CoolParameter ParamsParameter;
public readonly ParameterBase ThisParameter;
public readonly List<ParameterBase> ParametersWithoutDefaultValues;
public readonly List<ParameterBase> RemainingEditableParameters;
public readonly ParameterBase ParamsParameter;
public readonly int SelectedIndex;
public ParameterConfiguration(CoolParameter thisParameter, List<CoolParameter> parametersWithoutDefaultValues, List<CoolParameter> remainingEditableParameters, CoolParameter paramsParameter, int selectedIndex)
public ParameterConfiguration(ParameterBase thisParameter, List<ParameterBase> parametersWithoutDefaultValues, List<ParameterBase> remainingEditableParameters, ParameterBase paramsParameter, int selectedIndex)
{
ThisParameter = thisParameter;
ParametersWithoutDefaultValues = parametersWithoutDefaultValues;
......@@ -23,12 +23,12 @@ public ParameterConfiguration(CoolParameter thisParameter, List<CoolParameter> p
SelectedIndex = selectedIndex;
}
public static ParameterConfiguration Create(List<CoolParameter> parameters, bool isExtensionMethod, int selectedIndex)
public static ParameterConfiguration Create(List<ParameterBase> parameters, bool isExtensionMethod, int selectedIndex)
{
CoolParameter thisParameter = null;
var parametersWithoutDefaultValues = new List<CoolParameter>();
var remainingReorderableParameters = new List<CoolParameter>();
CoolParameter paramsParameter = null;
ParameterBase thisParameter = null;
var parametersWithoutDefaultValues = new List<ParameterBase>();
var remainingReorderableParameters = new List<ParameterBase>();
ParameterBase paramsParameter = null;
if (parameters.Count > 0 && isExtensionMethod)
{
......@@ -58,12 +58,12 @@ public static ParameterConfiguration Create(List<CoolParameter> parameters, bool
internal ParameterConfiguration WithoutAddedParameters()
{
return Create(ToListOfParameters().OfType<ExistingParameter>().ToList<CoolParameter>(), ThisParameter != null, selectedIndex: 0);
return Create(ToListOfParameters().OfType<ExistingParameter>().ToList<ParameterBase>(), ThisParameter != null, selectedIndex: 0);
}
public List<CoolParameter> ToListOfParameters()
public List<ParameterBase> ToListOfParameters()
{
var list = new List<CoolParameter>();
var list = new List<ParameterBase>();
if (ThisParameter != null)
{
......@@ -81,9 +81,11 @@ public List<CoolParameter> ToListOfParameters()
return list;
}
// TODO probably remove thiis check. It was created when we didn't support Add Parameters to parameterless methods.
public bool IsChangeable()
{
return ParametersWithoutDefaultValues.Count > 0 || RemainingEditableParameters.Count > 0 || ParamsParameter != null;
return true;
}
}
}
......@@ -86,6 +86,11 @@ public bool CanRemove
{
get
{
if (!AllParameters.Any())
{
return false;
}
if (!SelectedIndex.HasValue)
{
return false;
......@@ -108,6 +113,11 @@ public bool CanRestore
{
get
{
if (!AllParameters.Any())
{
return false;
}
if (!SelectedIndex.HasValue)
{
return false;
......@@ -189,9 +199,9 @@ internal ParameterConfiguration GetParameterConfiguration()
{
return new ParameterConfiguration(
_originalParameterConfiguration.ThisParameter,
_parameterGroup1.Where(p => !p.IsRemoved).Select(p => p.MakeCoolParameter()).ToList(),
_parameterGroup2.Where(p => !p.IsRemoved).Select(p => p.MakeCoolParameter()).ToList(),
(_paramsParameter == null || _paramsParameter.IsRemoved) ? null : (_paramsParameter as ExistingParameterViewModel).MakeCoolParameter(),
_parameterGroup1.Where(p => !p.IsRemoved).Select(p => p.CreateParameter()).ToList(),
_parameterGroup2.Where(p => !p.IsRemoved).Select(p => p.CreateParameter()).ToList(),
(_paramsParameter == null || _paramsParameter.IsRemoved) ? null : (_paramsParameter as ExistingParameterViewModel).CreateParameter(),
selectedIndex: -1);
}
......@@ -513,7 +523,7 @@ public ParameterViewModel(ChangeSignatureDialogViewModel changeSignatureDialogVi
this.changeSignatureDialogViewModel = changeSignatureDialogViewModel;
}
internal abstract CoolParameter MakeCoolParameter();
internal abstract ParameterBase CreateParameter();
public abstract string InitialIndex { get; }
}
......@@ -538,10 +548,8 @@ public AddedParameterViewModel(ChangeSignatureDialogViewModel changeSignatureDia
public override bool IsDisabled => false;
public override string Callsite => _addParameterViewModel.CallsiteValue;
internal override CoolParameter MakeCoolParameter()
{
return new AddedParameter(Type, Parameter, Callsite);
}
internal override ParameterBase CreateParameter()
=> new AddedParameter(Type, Parameter, Callsite);
public override string InitialIndex => "NEW";
}
......@@ -550,14 +558,14 @@ public class ExistingParameterViewModel : ParameterViewModel
{
public IParameterSymbol ParameterSymbol { get; }
public ExistingParameterViewModel(ChangeSignatureDialogViewModel changeSignatureDialogViewModel, CoolParameter parameter, int initialIndex)
public ExistingParameterViewModel(ChangeSignatureDialogViewModel changeSignatureDialogViewModel, ParameterBase parameter, int initialIndex)
: base(changeSignatureDialogViewModel)
{
ParameterSymbol = (parameter as ExistingParameter).Symbol;
InitialIndex = initialIndex.ToString();
}
internal override CoolParameter MakeCoolParameter()
internal override ParameterBase CreateParameter()
{
return new ExistingParameter(ParameterSymbol);
}
......
......@@ -436,7 +436,7 @@ class MyClass
Dim viewModel = New ChangeSignatureDialogViewModel(
New TestNotificationService(),
ParameterConfiguration.Create(symbol.GetParameters().Select(Function(p) DirectCast(New ExistingParameter(p), CoolParameter)).ToList(), symbol.IsExtensionMethod(), selectedIndex:=0),
ParameterConfiguration.Create(symbol.GetParameters().Select(Function(p) DirectCast(New ExistingParameter(p), ParameterBase)).ToList(), symbol.IsExtensionMethod(), selectedIndex:=0),
symbol,
workspace.ExportProvider.GetExportedValue(Of IClassificationFormatMapService)().GetClassificationFormatMap("text"),
workspace.ExportProvider.GetExportedValue(Of ClassificationTypeMap)())
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册