提交 6f30d11d 编写于 作者: D David Poeschl

Show warning in ChangeSig dialog for duplicated param names

No warning in AddParam dialog yet
上级 0603145d
......@@ -211,13 +211,20 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn x:Name="parameterHeader" Binding="{Binding ParameterName, Mode=OneWay}" Width="*" IsReadOnly="True">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="Padding" Value="{StaticResource ResourceKey=cellPadding}" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTemplateColumn x:Name="parameterHeader" Width="*" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<imaging:CrispImage
Moniker="{x:Static imagecatalog:KnownMonikers.StatusWarning}"
Visibility="{Binding HasParameterNameConflict, Mode=TwoWay}"
vs2:ImageThemingUtilities.ImageBackgroundColor="White"
Margin="0,0,5,0"/>
<TextBlock Text="{Binding ParameterName, Mode=OneWay}"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn x:Name="defaultHeader" Binding="{Binding DefaultValue, Mode=OneWay}" Width="*" IsReadOnly="True">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
......
......@@ -29,14 +29,16 @@ public abstract class ParameterViewModel
public abstract bool IsRequired { get; }
public abstract string DefaultValue { get; }
public abstract string InitialIndex { get; }
public abstract string Modifier { get; }
public abstract string Default { get; }
public ParameterViewModel(ChangeSignatureDialogViewModel changeSignatureDialogViewModel)
{
ChangeSignatureDialogViewModel = changeSignatureDialogViewModel;
}
public abstract string InitialIndex { get; }
public abstract string Modifier { get; }
public abstract string Default { get; }
public Visibility HasParameterNameConflict { get; set; }
public virtual Visibility TypeWarningVisibility => Visibility.Collapsed;
......
......@@ -9,6 +9,7 @@
using System.Collections.Immutable;
using System.Diagnostics;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.ChangeSignature;
......@@ -41,6 +42,8 @@ internal partial class ChangeSignatureDialogViewModel : AbstractNotifyPropertyCh
private ImmutableArray<SymbolDisplayPart> _declarationParts;
private bool _previewChanges;
private readonly Dictionary<string, List<ParameterViewModel>> _parameterNameOverlapMap = new Dictionary<string, List<ParameterViewModel>>();
/// <summary>
/// The document where the symbol we are changing signature is defined.
/// </summary>
......@@ -82,6 +85,8 @@ internal partial class ChangeSignatureDialogViewModel : AbstractNotifyPropertyCh
_paramsParameter = new ExistingParameterViewModel(this, parameters.ParamsParameter, initialDisplayIndex++);
}
UpdateNameConflictMarkers();
var selectedIndex = parameters.SelectedIndex;
// Currently, we do not support editing the ThisParameter.
// Therefore, if there is such parameter, we should move the selectedIndex.
......@@ -104,6 +109,42 @@ internal partial class ChangeSignatureDialogViewModel : AbstractNotifyPropertyCh
}
}
private void UpdateNameConflictMarkers()
{
var parameterNameOverlapMap = new Dictionary<string, List<ParameterViewModel>>();
foreach (var parameter in AllParameters)
{
if (!parameter.IsRemoved)
{
parameterNameOverlapMap
.GetOrAdd(parameter.ParameterName, _ => new List<ParameterViewModel>())
.Add(parameter);
}
else
{
parameter.HasParameterNameConflict = Visibility.Collapsed;
}
}
foreach (var parameterName in parameterNameOverlapMap.Keys)
{
var matchingParameters = parameterNameOverlapMap[parameterName];
if (matchingParameters.Count > 1)
{
foreach (var matchingParameter in matchingParameters)
{
matchingParameter.HasParameterNameConflict = Visibility.Visible;
}
}
else
{
matchingParameters.Single().HasParameterNameConflict = Visibility.Collapsed;
}
}
NotifyPropertyChanged(nameof(AllParameters));
}
public AddParameterDialogViewModel CreateAddParameterDialogViewModel()
=> new AddParameterDialogViewModel(_document, _insertPosition);
......@@ -209,12 +250,14 @@ internal void Remove()
AllParameters[_selectedIndex!.Value].IsRemoved = true;
}
UpdateNameConflictMarkers();
RemoveRestoreNotifyPropertyChanged();
}
internal void Restore()
{
AllParameters[_selectedIndex!.Value].IsRemoved = false;
UpdateNameConflictMarkers();
RemoveRestoreNotifyPropertyChanged();
}
......@@ -229,6 +272,7 @@ internal void AddParameter(AddedParameter addedParameter)
_parametersWithDefaultValues.Add(new AddedParameterViewModel(this, addedParameter));
}
UpdateNameConflictMarkers();
RemoveRestoreNotifyPropertyChanged();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册