Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit 281d132

Browse files
fix #316: Error when running Search for issues with Automatically Fix enabled.
Disable "Fix issues" feature once an "unfixable" issue is selected.
1 parent 11c3eb3 commit 281d132

1 file changed

Lines changed: 43 additions & 7 deletions

File tree

src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/SearchForIssuesDialog.xaml.cs

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public SearchForIssuesDialog()
4343
{
4444
InitializeComponent();
4545
FixCheckBox_Unchecked(null, null);
46-
treeView.Root = new RootTreeNode(IssueManager.IssueProviders);
46+
treeView.Root = new RootTreeNode(IssueManager.IssueProviders, TreeNodeCheckedChanged);
4747
searchInRBG.SelectedValue = SearchForIssuesTarget.WholeSolution;
4848
LoadPreviousSelectionFromSettings();
4949
}
@@ -75,7 +75,15 @@ public bool FixIssues {
7575
return fixCheckBox.IsChecked == true;
7676
}
7777
}
78-
78+
79+
void TreeNodeCheckedChanged()
80+
{
81+
if (treeView.Root == null) return;
82+
fixCheckBox.IsEnabled = !treeView.Root.DescendantsAndSelf()
83+
.OfType<IssueTreeNode>()
84+
.Any(n => n.IsChecked == true && !n.Provider.Attribute.SupportsAutoFix);
85+
}
86+
7987
void searchButton_Click(object sender, RoutedEventArgs e)
8088
{
8189
DialogResult = true;
@@ -109,12 +117,16 @@ abstract class BaseTreeNode : SharpTreeNode
109117

110118
sealed class RootTreeNode : BaseTreeNode
111119
{
112-
internal RootTreeNode(IEnumerable<IssueManager.IssueProvider> providers)
120+
readonly Action checkedChanged;
121+
122+
internal RootTreeNode(IEnumerable<IssueManager.IssueProvider> providers, Action checkedChanged)
113123
{
114124
this.Children.AddRange(providers.Where(p => p.Attribute != null)
115-
.GroupBy(p => p.Attribute.Category, (key, g) => new CategoryTreeNode(key, g)));
125+
.GroupBy(p => p.Attribute.Category, (key, g) => new CategoryTreeNode(key, g, checkedChanged)));
116126
this.IsChecked = false;
117127
this.IsExpanded = true;
128+
this.checkedChanged = checkedChanged;
129+
this.PropertyChanged += OnPropertyChanged;
118130
}
119131

120132
public override string Key {
@@ -128,17 +140,26 @@ public override object Text {
128140
public override bool IsCheckable {
129141
get { return true; }
130142
}
143+
144+
void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
145+
{
146+
if (checkedChanged != null && e.PropertyName == "IsChecked")
147+
checkedChanged();
148+
}
131149
}
132150

133151
sealed class CategoryTreeNode : BaseTreeNode
134152
{
135153
readonly string categoryName;
154+
readonly Action checkedChanged;
136155

137-
internal CategoryTreeNode(string categoryName, IEnumerable<IssueManager.IssueProvider> providers)
156+
internal CategoryTreeNode(string categoryName, IEnumerable<IssueManager.IssueProvider> providers, Action checkedChanged)
138157
{
139158
this.categoryName = categoryName;
140-
this.Children.AddRange(providers.Select(p => new IssueTreeNode(p)));
159+
this.Children.AddRange(providers.Select(p => new IssueTreeNode(p, checkedChanged)));
141160
this.IsExpanded = true;
161+
this.checkedChanged = checkedChanged;
162+
this.PropertyChanged += OnPropertyChanged;
142163
}
143164

144165
public override string Key {
@@ -152,17 +173,26 @@ public override object Text {
152173
public override bool IsCheckable {
153174
get { return true; }
154175
}
176+
177+
void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
178+
{
179+
if (checkedChanged != null && e.PropertyName == "IsChecked")
180+
checkedChanged();
181+
}
155182
}
156183

157184
sealed class IssueTreeNode : BaseTreeNode
158185
{
159186
internal readonly IssueManager.IssueProvider Provider;
160187
readonly IssueDescriptionAttribute attribute;
188+
readonly Action checkedChanged;
161189

162-
internal IssueTreeNode(IssueManager.IssueProvider provider)
190+
internal IssueTreeNode(IssueManager.IssueProvider provider, Action checkedChanged)
163191
{
164192
this.Provider = provider;
165193
this.attribute = provider.Attribute;
194+
this.checkedChanged = checkedChanged;
195+
this.PropertyChanged += OnPropertyChanged;
166196
}
167197

168198
public override string Key {
@@ -180,6 +210,12 @@ public override object Text {
180210
public override object ToolTip {
181211
get { return attribute.Description; }
182212
}
213+
214+
void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
215+
{
216+
if (checkedChanged != null && e.PropertyName == "IsChecked")
217+
checkedChanged();
218+
}
183219
}
184220
}
185221
}

0 commit comments

Comments
 (0)