Browse Source

[CodeIssues] Use IsKnownType to check for System.Object.

newNRvisualizers
Simon Lindgren 14 years ago
parent
commit
264c4c17e3
  1. 5
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CallToObjectEqualsViaBaseIssue.cs
  2. 7
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/IncorrectCallToObjectGetHashCodeIssue.cs

5
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CallToObjectEqualsViaBaseIssue.cs

@ -44,11 +44,8 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
class GatherVisitor : GatherVisitorBase class GatherVisitor : GatherVisitorBase
{ {
ITypeDefinition objectTypeDefinition;
public GatherVisitor(BaseRefactoringContext context) : base (context) public GatherVisitor(BaseRefactoringContext context) : base (context)
{ {
objectTypeDefinition = context.Compilation.FindType(KnownTypeCode.Object).GetDefinition();
} }
public override void VisitInvocationExpression(InvocationExpression invocationExpression) public override void VisitInvocationExpression(InvocationExpression invocationExpression)
@ -59,7 +56,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
return; return;
} }
var resolveResult = ctx.Resolve(invocationExpression) as InvocationResolveResult; var resolveResult = ctx.Resolve(invocationExpression) as InvocationResolveResult;
if (resolveResult == null || !objectTypeDefinition.Equals(resolveResult.Member.DeclaringTypeDefinition)) { if (resolveResult == null || !resolveResult.Member.DeclaringTypeDefinition.IsKnownType(KnownTypeCode.Object)) {
return; return;
} }
var title = ctx.TranslateString("Call to base.Equals resolves to Object.Equals, which is reference equality"); var title = ctx.TranslateString("Call to base.Equals resolves to Object.Equals, which is reference equality");

7
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/IncorrectCallToObjectGetHashCodeIssue.cs

@ -42,16 +42,13 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
class GatherVisitor : GatherVisitorBase class GatherVisitor : GatherVisitorBase
{ {
ITypeDefinition objectTypeDefinition;
public GatherVisitor(BaseRefactoringContext context) : base (context) public GatherVisitor(BaseRefactoringContext context) : base (context)
{ {
objectTypeDefinition = context.Compilation.FindType(KnownTypeCode.Object).GetDefinition();
} }
public override void VisitMethodDeclaration(MethodDeclaration methodDeclaration) public override void VisitMethodDeclaration(MethodDeclaration methodDeclaration)
{ {
// Check that this declaration is a GetHashCode override, _then_ recurse // Check that this declaration is a GetHashCode override, _then_ continue traversing
if (methodDeclaration.Name != "GetHashCode") { if (methodDeclaration.Name != "GetHashCode") {
return; return;
@ -68,7 +65,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
base.VisitInvocationExpression(invocationExpression); base.VisitInvocationExpression(invocationExpression);
var resolveResult = ctx.Resolve(invocationExpression) as InvocationResolveResult; var resolveResult = ctx.Resolve(invocationExpression) as InvocationResolveResult;
if (resolveResult == null || !objectTypeDefinition.Equals(resolveResult.Member.DeclaringTypeDefinition)) { if (resolveResult == null || !resolveResult.Member.DeclaringTypeDefinition.IsKnownType(KnownTypeCode.Object)) {
return; return;
} }
AddIssue(invocationExpression, ctx.TranslateString("Call resolves to Object.GetHashCode, which is reference based")); AddIssue(invocationExpression, ctx.TranslateString("Call resolves to Object.GetHashCode, which is reference based"));

Loading…
Cancel
Save