diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2014-02-28 11:54:38 +0400 |
---|---|---|
committer | Mike Krüger <mkrueger@xamarin.com> | 2014-02-28 11:54:38 +0400 |
commit | 2b5476034d8dcfd18e99b717583bffdd36169b1c (patch) | |
tree | c06f3c430468804792359a618988bff96109ed5f /ICSharpCode.NRefactory.CSharp.Refactoring | |
parent | bae55fb22f609e0107c9e1b931938ea70a11c728 (diff) |
Fixed bug in 'DelegateSubtractionIssue'.
Diffstat (limited to 'ICSharpCode.NRefactory.CSharp.Refactoring')
-rw-r--r-- | ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/DelegateSubtractionIssue.cs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/DelegateSubtractionIssue.cs b/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/DelegateSubtractionIssue.cs index 3ffe2446..5f574ee6 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/DelegateSubtractionIssue.cs +++ b/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/DelegateSubtractionIssue.cs @@ -26,6 +26,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory.Semantics; namespace ICSharpCode.NRefactory.CSharp.Refactoring { @@ -52,9 +53,16 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring base.VisitBinaryOperatorExpression(binaryOperatorExpression); if (binaryOperatorExpression.Operator != BinaryOperatorType.Subtract) return; - var rr = ctx.Resolve(binaryOperatorExpression); - if (rr.Type.Kind == ICSharpCode.NRefactory.TypeSystem.TypeKind.Delegate) + var rr = ctx.Resolve(binaryOperatorExpression.Right); + if (rr.Type.Kind == ICSharpCode.NRefactory.TypeSystem.TypeKind.Delegate && !IsEvent (binaryOperatorExpression.Left)) { AddIssue(new CodeIssue(binaryOperatorExpression, ctx.TranslateString("Delegate subtraction has unpredictable result"))); + } + } + + bool IsEvent(AstNode node) + { + var rr = ctx.Resolve(node) as MemberResolveResult; + return rr != null && rr.Member.SymbolKind == ICSharpCode.NRefactory.TypeSystem.SymbolKind.Event; } public override void VisitAssignmentExpression(AssignmentExpression assignmentExpression) @@ -63,7 +71,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring if (assignmentExpression.Operator != AssignmentOperatorType.Subtract) return; var rr = ctx.Resolve(assignmentExpression.Right); - if (rr.Type.Kind == ICSharpCode.NRefactory.TypeSystem.TypeKind.Delegate) + if (rr.Type.Kind == ICSharpCode.NRefactory.TypeSystem.TypeKind.Delegate && !IsEvent (assignmentExpression.Left)) AddIssue(new CodeIssue(assignmentExpression, ctx.TranslateString("Delegate subtraction has unpredictable result"))); } } |