Browse Source

Fixed some issues with issue options.

newNRvisualizers
Daniel Grunwald 14 years ago
parent
commit
0cdeb1d5f4
  1. 47
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/IssueManager.cs
  2. 12
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/IssueOptions.xaml.cs
  3. 14
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/IssueOptionsViewModel.cs
  4. 6
      src/Main/Core/Project/Src/Services/PropertyService/Properties.cs

47
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/IssueManager.cs

@ -48,15 +48,19 @@ namespace CSharpBinding.Refactoring @@ -48,15 +48,19 @@ namespace CSharpBinding.Refactoring
this.provider = provider;
this.ProviderType = provider.GetType();
var attributes = ProviderType.GetCustomAttributes(typeof(IssueDescriptionAttribute), true);
if (attributes.Length == 1)
Severity defaultSeverity = Severity.Hint;
if (attributes.Length == 1) {
this.Attribute = (IssueDescriptionAttribute)attributes[0];
defaultSeverity = this.Attribute.Severity;
}
public Severity DefaultSeverity {
get { return Attribute != null ? Attribute.Severity : Severity.Hint; }
var properties = PropertyService.NestedProperties("CSharpIssueSeveritySettings");
this.CurrentSeverity = properties.Get(ProviderType.FullName, defaultSeverity);
}
public IssueMarker DefaultMarker {
public Severity CurrentSeverity { get; set; }
public IssueMarker MarkerType {
get { return Attribute != null ? Attribute.IssueMarker : IssueMarker.Underline; }
}
@ -66,22 +70,16 @@ namespace CSharpBinding.Refactoring @@ -66,22 +70,16 @@ namespace CSharpBinding.Refactoring
}
}
public static IReadOnlyDictionary<Type, Severity> GetIssueSeveritySettings()
internal static void SaveIssueSeveritySettings()
{
// TODO: cache the result
var dict = new Dictionary<Type, Severity>();
var prop = PropertyService.NestedProperties("CSharpIssueSeveritySettings");
var properties = PropertyService.NestedProperties("CSharpIssueSeveritySettings");
foreach (var provider in issueProviders.Value) {
dict[provider.ProviderType] = prop.Get(provider.ProviderType.FullName, provider.DefaultSeverity);
}
return dict;
if (provider.Attribute != null) {
if (provider.CurrentSeverity == provider.Attribute.Severity)
properties.Remove(provider.ProviderType.FullName);
else
properties.Set(provider.ProviderType.FullName, provider.CurrentSeverity);
}
public static void SetIssueSeveritySettings(IReadOnlyDictionary<Type, Severity> dict)
{
var prop = PropertyService.NestedProperties("CSharpIssueSeveritySettings");
foreach (var pair in dict) {
prop.Set(pair.Key.FullName, pair.Value);
}
}
@ -116,7 +114,7 @@ namespace CSharpBinding.Refactoring @@ -116,7 +114,7 @@ namespace CSharpBinding.Refactoring
public readonly IReadOnlyList<IContextAction> Actions;
public readonly Severity Severity;
public InspectionTag(IssueManager manager, IssueProvider provider, ITextSourceVersion inspectedVersion, string description, int startOffset, int endOffset, Severity severity, IEnumerable<CodeAction> actions)
public InspectionTag(IssueManager manager, IssueProvider provider, ITextSourceVersion inspectedVersion, string description, int startOffset, int endOffset, IEnumerable<CodeAction> actions)
{
this.manager = manager;
this.Provider = provider;
@ -124,7 +122,7 @@ namespace CSharpBinding.Refactoring @@ -124,7 +122,7 @@ namespace CSharpBinding.Refactoring
this.Description = description;
this.StartOffset = startOffset;
this.EndOffset = endOffset;
this.Severity = severity;
this.Severity = provider.CurrentSeverity;
this.Actions = actions.Select(Wrap).ToList();
}
@ -170,7 +168,7 @@ namespace CSharpBinding.Refactoring @@ -170,7 +168,7 @@ namespace CSharpBinding.Refactoring
color.A = 186;
marker.MarkerColor = color;
marker.MarkerTypes = TextMarkerTypes.ScrollBarRightTriangle;
switch (Provider.DefaultMarker) {
switch (Provider.MarkerType) {
case IssueMarker.Underline:
marker.MarkerTypes |= TextMarkerTypes.SquigglyUnderline;
break;
@ -248,12 +246,8 @@ namespace CSharpBinding.Refactoring @@ -248,12 +246,8 @@ namespace CSharpBinding.Refactoring
var compilation = ParserService.GetCompilationForFile(parseInfo.FileName);
var resolver = parseInfo.GetResolver(compilation);
var context = new SDRefactoringContext(textSource, resolver, new TextLocation(0, 0), 0, 0, cancellationToken);
var settings = GetIssueSeveritySettings();
foreach (var issueProvider in issueProviders.Value) {
Severity severity;
if (!settings.TryGetValue(issueProvider.ProviderType, out severity))
severity = Severity.Hint;
if (severity == Severity.None)
if (issueProvider.CurrentSeverity == Severity.None)
continue;
foreach (var issue in issueProvider.GetIssues(context)) {
@ -264,7 +258,6 @@ namespace CSharpBinding.Refactoring @@ -264,7 +258,6 @@ namespace CSharpBinding.Refactoring
issue.Desription,
context.GetOffset(issue.Start),
context.GetOffset(issue.End),
severity,
issue.Action != null ? new [] { issue.Action } : new CodeAction[0]));
}
}

12
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/IssueOptions.xaml.cs

@ -33,7 +33,7 @@ namespace CSharpBinding.Refactoring @@ -33,7 +33,7 @@ namespace CSharpBinding.Refactoring
viewModels = new ObservableCollection<IssueOptionsViewModel>(
from p in IssueManager.IssueProviders
where p.Attribute != null
select new IssueOptionsViewModel(p.ProviderType, p.Attribute)
select new IssueOptionsViewModel(p)
);
ICollectionView view = CollectionViewSource.GetDefaultView(viewModels);
if (viewModels.Any(p => !string.IsNullOrEmpty(p.Category)))
@ -44,21 +44,17 @@ namespace CSharpBinding.Refactoring @@ -44,21 +44,17 @@ namespace CSharpBinding.Refactoring
public override void LoadOptions()
{
base.LoadOptions();
var settings = IssueManager.GetIssueSeveritySettings();
foreach (var m in viewModels) {
Severity severity;
if (settings.TryGetValue(m.ProviderType, out severity))
m.Severity = severity;
m.Severity = m.Provider.CurrentSeverity;
}
}
public override bool SaveOptions()
{
Dictionary<Type, Severity> dict = new Dictionary<Type, Severity>();
foreach (var m in viewModels) {
dict[m.ProviderType] = m.Severity;
m.Provider.CurrentSeverity = m.Severity;
}
IssueManager.SetIssueSeveritySettings(dict);
IssueManager.SaveIssueSeveritySettings();
return base.SaveOptions();
}

14
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/IssueOptionsViewModel.cs

@ -8,22 +8,18 @@ using ICSharpCode.SharpDevelop.Widgets; @@ -8,22 +8,18 @@ using ICSharpCode.SharpDevelop.Widgets;
namespace CSharpBinding.Refactoring
{
public class IssueOptionsViewModel : ViewModelBase
sealed class IssueOptionsViewModel : ViewModelBase
{
readonly Type providerType;
internal readonly IssueManager.IssueProvider Provider;
readonly IssueDescriptionAttribute attribute;
public IssueOptionsViewModel(Type providerType, IssueDescriptionAttribute attribute)
internal IssueOptionsViewModel(IssueManager.IssueProvider provider)
{
this.providerType = providerType;
this.attribute = attribute;
this.Provider = provider;
this.attribute = provider.Attribute;
this.Severity = attribute.Severity;
}
public Type ProviderType {
get { return providerType; }
}
// TODO: Translate
public string Title {
get { return attribute.Title; }

6
src/Main/Core/Project/Src/Services/PropertyService/Properties.cs

@ -326,10 +326,7 @@ namespace ICSharpCode.Core @@ -326,10 +326,7 @@ namespace ICSharpCode.Core
return null;
XElement element = serializedVal as XElement;
if (element != null) {
using (var xmlReader = element.CreateReader()) {
xmlReader.MoveToContent();
xmlReader.Read(); // skip <SerializedObject>
xmlReader.MoveToContent();
using (var xmlReader = element.Elements().Single().CreateReader()) {
return XamlServices.Load(xmlReader);
}
} else {
@ -355,6 +352,7 @@ namespace ICSharpCode.Core @@ -355,6 +352,7 @@ namespace ICSharpCode.Core
removed = true;
HandleOldValue(oldValue);
MakeDirty();
dict.Remove(key);
}
}
if (removed)

Loading…
Cancel
Save