Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/xamarin/NRefactory.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Krüger <mkrueger@xamarin.com>2014-02-28 11:54:38 +0400
committerMike Krüger <mkrueger@xamarin.com>2014-02-28 11:54:38 +0400
commit2b5476034d8dcfd18e99b717583bffdd36169b1c (patch)
treec06f3c430468804792359a618988bff96109ed5f /ICSharpCode.NRefactory.CSharp.Refactoring
parentbae55fb22f609e0107c9e1b931938ea70a11c728 (diff)
Fixed bug in 'DelegateSubtractionIssue'.
Diffstat (limited to 'ICSharpCode.NRefactory.CSharp.Refactoring')
-rw-r--r--ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/DelegateSubtractionIssue.cs14
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")));
}
}