Browse Source

[CodeIssues] RedundantFieldInitializerIssue: handle some number type initializer cases

newNRvisualizers
Mansheng Yang 14 years ago
parent
commit
6f063c60a6
  1. 51
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/RedundantFieldInitializerIssue.cs
  2. 22
      ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/RedundantFieldInitializerIssueTests.cs

51
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/RedundantFieldInitializerIssue.cs

@ -26,6 +26,7 @@ @@ -26,6 +26,7 @@
using System.Collections.Generic;
using ICSharpCode.NRefactory.PatternMatching;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.NRefactory.CSharp.Refactoring
{
@ -52,7 +53,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -52,7 +53,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
{
base.VisitFieldDeclaration (fieldDeclaration);
var defaultValueExpr = ctx.GetDefaultValueExpression (fieldDeclaration.ReturnType);
var defaultValueExpr = GetDefaultValueExpression (fieldDeclaration.ReturnType);
if (defaultValueExpr == null)
return;
@ -66,6 +67,54 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -66,6 +67,54 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
}
}
Expression GetDefaultValueExpression (AstType astType)
{
var type = ctx.ResolveType (astType);
if ((type.IsReferenceType ?? false) || type.Kind == TypeKind.Dynamic)
return new NullReferenceExpression ();
var typeDefinition = type.GetDefinition ();
if (typeDefinition != null) {
switch (typeDefinition.KnownTypeCode) {
case KnownTypeCode.Boolean:
return new PrimitiveExpression (false);
case KnownTypeCode.Char:
return new PrimitiveExpression ('\0');
case KnownTypeCode.SByte:
case KnownTypeCode.Byte:
case KnownTypeCode.Int16:
case KnownTypeCode.UInt16:
case KnownTypeCode.Int32:
return new PrimitiveExpression (0);
case KnownTypeCode.Int64:
return new Choice { new PrimitiveExpression (0), new PrimitiveExpression (0L) };
case KnownTypeCode.UInt32:
return new Choice { new PrimitiveExpression (0), new PrimitiveExpression (0U) };
case KnownTypeCode.UInt64:
return new Choice {
new PrimitiveExpression (0), new PrimitiveExpression (0U), new PrimitiveExpression (0UL)
};
case KnownTypeCode.Single:
return new Choice { new PrimitiveExpression (0), new PrimitiveExpression (0F) };
case KnownTypeCode.Double:
return new Choice {
new PrimitiveExpression (0), new PrimitiveExpression (0F), new PrimitiveExpression (0D)
};
case KnownTypeCode.Decimal:
return new Choice { new PrimitiveExpression (0), new PrimitiveExpression (0M) };
case KnownTypeCode.NullableOfT:
return new NullReferenceExpression ();
}
if (type.Kind == TypeKind.Struct)
return new ObjectCreateExpression (astType.Clone ());
}
return new DefaultValueExpression (astType.Clone ());
}
}
}

22
ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/RedundantFieldInitializerIssueTests.cs

@ -33,19 +33,37 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues @@ -33,19 +33,37 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues
public class RedundantFieldInitializerIssueTests : InspectionActionTestBase
{
[Test]
public void TestRedundantNumberInitializer ()
public void TestRedundantIntInitializer ()
{
var input = @"
class TestClass
{
int i = 0;
double d = 0;
long l = 0L;
}";
var output = @"
class TestClass
{
int i;
long l;
}";
Test<RedundantFieldInitializerIssue> (input, 2, output);
}
[Test]
public void TestRedundantFloatInitializer ()
{
var input = @"
class TestClass
{
double d = 0;
double d2 = 0.0;
}";
var output = @"
class TestClass
{
double d;
double d2;
}";
Test<RedundantFieldInitializerIssue> (input, 2, output);
}

Loading…
Cancel
Save