diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2013-08-29 22:17:52 +0400 |
---|---|---|
committer | Mike Krüger <mkrueger@xamarin.com> | 2013-08-29 22:18:32 +0400 |
commit | 1b91d1aeeb350eff4f10cc5f263ec7f6553888b6 (patch) | |
tree | a92997fe58e711885f82ecbcce1edd47ce64b527 /main | |
parent | 3f593b27461ce6f5283a8c9389bfe779e79d1106 (diff) |
Fixed 'Bug 14303 - Fixes should be listed before actions '.
Diffstat (limited to 'main')
4 files changed, 35 insertions, 5 deletions
diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring.CodeActions/NRefactoryCodeAction.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring.CodeActions/NRefactoryCodeAction.cs index d6efe363f0..183501f893 100644 --- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring.CodeActions/NRefactoryCodeAction.cs +++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Refactoring.CodeActions/NRefactoryCodeAction.cs @@ -45,6 +45,7 @@ namespace MonoDevelop.CSharp.Refactoring.CodeActions this.Title = title; this.act = act; this.SiblingKey = siblingKey; + this.Severity = act.Severity; this.DocumentRegion = new Mono.TextEditor.DocumentRegion (act.Start, act.End); } diff --git a/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.CodeActions/CodeAction.cs b/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.CodeActions/CodeAction.cs index 288afeeda5..7824ed044a 100644 --- a/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.CodeActions/CodeAction.cs +++ b/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.CodeActions/CodeAction.cs @@ -27,6 +27,7 @@ using ICSharpCode.NRefactory; using System; using Mono.TextEditor; using ICSharpCode.NRefactory.CSharp.Refactoring; +using ICSharpCode.NRefactory.Refactoring; namespace MonoDevelop.CodeActions { @@ -73,7 +74,13 @@ namespace MonoDevelop.CodeActions /// <value>The sibling key.</value> public object SiblingKey { get; set; } - public CodeAction () + /// <summary> + /// Gets or sets the severity of the code action. + /// </summary> + /// <value>The severity.</value> + public Severity Severity { get; set; } + + protected CodeAction () { IdString = GetType ().FullName; } diff --git a/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.CodeActions/CodeActionWidget.cs b/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.CodeActions/CodeActionWidget.cs index 859127bd6c..5dba323203 100644 --- a/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.CodeActions/CodeActionWidget.cs +++ b/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.CodeActions/CodeActionWidget.cs @@ -109,7 +109,7 @@ namespace MonoDevelop.CodeActions usages.Set (id, CodeActionUsages [id]); } - int GetUsage (string id) + internal static int GetUsage (string id) { int result; if (!CodeActionUsages.TryGetValue (id, out result)) @@ -117,10 +117,23 @@ namespace MonoDevelop.CodeActions return result; } + internal static bool IsAnalysisOrErrorFix (CodeAction act) + { + return act is AnalysisContextActionProvider.AnalysisCodeAction || act.Severity == Severity.Error; + } + public void PopulateFixes (Gtk.Menu menu, ref int items) { int mnemonic = 1; - foreach (var fix_ in fixes.OrderByDescending (i => GetUsage (i.IdString))) { + bool gotImportantFix = false, addedSeparator = false; + foreach (var fix_ in fixes.OrderByDescending (i => Tuple.Create (IsAnalysisOrErrorFix(i), (int)i.Severity, GetUsage (i.IdString)))) { + if (IsAnalysisOrErrorFix (fix_)) + gotImportantFix = true; + if (!addedSeparator && gotImportantFix && !IsAnalysisOrErrorFix(fix_)) { + menu.Add (new Gtk.SeparatorMenuItem ()); + addedSeparator = true; + } + var fix = fix_; var escapedLabel = fix.Title.Replace ("_", "__"); var label = (mnemonic <= 10) @@ -135,7 +148,8 @@ namespace MonoDevelop.CodeActions menu.Add (thisInstanceMenuItem); items++; } - var first = true; + + bool first = true; var alreadyInserted = new HashSet<BaseCodeIssueProvider> (); foreach (var analysisFix_ in fixes.OfType <AnalysisContextActionProvider.AnalysisCodeAction>().Where (f => f.Result is InspectorResults)) { var analysisFix = analysisFix_; diff --git a/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring/RefactoryCommands.cs b/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring/RefactoryCommands.cs index bf11b98f2c..2817ad7e7f 100644 --- a/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring/RefactoryCommands.cs +++ b/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring/RefactoryCommands.cs @@ -286,13 +286,21 @@ namespace MonoDevelop.Refactoring } if (refactoringInfo.validActions != null) { var context = refactoringInfo.lastDocument.CreateRefactoringContext (doc, CancellationToken.None); - foreach (var fix_ in refactoringInfo.validActions) { + bool gotImportantFix = false, addedSeparator = false; + + foreach (var fix_ in refactoringInfo.validActions.OrderByDescending (i => Tuple.Create (CodeActionWidget.IsAnalysisOrErrorFix(i), (int)i.Severity, CodeActionWidget.GetUsage (i.IdString)))) { var fix = fix_; if (first) { first = false; if (ciset.CommandInfos.Count > 0) ciset.CommandInfos.AddSeparator (); } + if (CodeActionWidget.IsAnalysisOrErrorFix (fix_)) + gotImportantFix = true; + if (!addedSeparator && gotImportantFix && !CodeActionWidget.IsAnalysisOrErrorFix(fix_)) { + ciset.CommandInfos.AddSeparator (); + addedSeparator = true; + } ciset.CommandInfos.Add (fix.Title, new Action (() => RefactoringService.ApplyFix (fix, context))); } } |