Skip to content

Commit

Permalink
dotnet#1638: use SpecialType for checking parameter type string
Browse files Browse the repository at this point in the history
thanks @mavasani for the hint.
  • Loading branch information
jongleur1983 committed Oct 13, 2018
1 parent 967d87b commit 8dc25ab
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 64 deletions.
Expand Up @@ -89,7 +89,7 @@ private void Action(OperationAnalysisContext context)
&& invokedMethod.Name == nameof(StringBuilder.Append))
{
var parameters = invokedMethod.Parameters;
if (parameters.Length == 1 && parameters[0].Type.Name == nameof(String))
if (parameters.Length == 1 && parameters[0].Type.SpecialType == SpecialType.System_String)
{
IArgumentOperation argument = invocation.Arguments.FirstOrDefault();
if (argument.Value is IInvocationOperation invocationExpression
Expand Down
@@ -1,16 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CodeFixes;
using Microsoft.CodeAnalysis.Diagnostics;
using Test.Utilities;
using Xunit;

namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.UnitTests
{
public class StringBuilderAppendShouldNotTakeSubstringFixerTests : CodeFixTestBase
public class StringBuilderAppendShouldNotTakeSubstringFixerTestsCsharp : CodeFixTestBase
{
protected override DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer()
{
Expand All @@ -24,12 +20,12 @@ protected override DiagnosticAnalyzer GetBasicDiagnosticAnalyzer()

protected override CodeFixProvider GetCSharpCodeFixProvider()
{
return new StringBuilderAppendShouldNotTakeSubstringFixer();
return new StringBuilderAppendShouldNotTakeSubstringCsharpFixer();
}

protected override CodeFixProvider GetBasicCodeFixProvider()
{
return new StringBuilderAppendShouldNotTakeSubstringFixer();
throw new NotSupportedException();
}

[Fact]
Expand Down Expand Up @@ -62,34 +58,6 @@ public string Append(string text)
VerifyCSharpFix(Code, FixedCode);
}

[Fact]
public void FixesExample1FromTicketBasic()
{
const string Code = @"
Imports System.Text
Public Class C
Public Function Append(ByVal text As String) As String
Dim sb = New StringBuilder()
sb.Append(text.Substring(0, 6))
Return sb.ToString()
End Function
End Class
";
const string FixedCode = @"
Imports System.Text
Public Class C
Public Function Append(ByVal text As String) As String
Dim sb = New StringBuilder()
sb.Append(text, 0, 6)
Return sb.ToString()
End Function
End Class
";
VerifyBasicFix(Code, FixedCode);
}

[Fact]
public void FixesExample2FromTicket()
{
Expand Down Expand Up @@ -120,34 +88,6 @@ public string Append(string text)
VerifyCSharpFix(Code, FixedCode);
}

[Fact]
public void FixesExample2FromTicketBasic()
{
const string Code = @"
Imports System.Text
Public Class C
Public Function Append(ByVal text As String) As String
Dim sb = New StringBuilder()
sb.Append(text.Substring(2))
Return sb.ToString()
End Function
End Class
";
const string FixedCode = @"
Imports System.Text
Public Class C
Public Function Append(ByVal text As String) As String
Dim sb = New StringBuilder()
sb.Append(text, 2, text.Length - 2)
Return sb.ToString()
End Function
End Class
";
VerifyBasicFix(Code, FixedCode);
}

[Fact(Skip = "not working yet")]
public void FixesAllExamplesFromTicket()
{
Expand Down Expand Up @@ -180,6 +120,85 @@ public string Append(string text)
}";
VerifyCSharpFixAll(Code, FixedCode);
}
}

public class StringBuilderAppendShouldNotTakeSubstringFixerTestsBasic : CodeFixTestBase
{
protected override DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer()
{
return new StringBuilderAppendShouldNotTakeSubstring();
}

protected override DiagnosticAnalyzer GetBasicDiagnosticAnalyzer()
{
return new StringBuilderAppendShouldNotTakeSubstring();
}

protected override CodeFixProvider GetCSharpCodeFixProvider()
{
throw new NotSupportedException();
}

protected override CodeFixProvider GetBasicCodeFixProvider()
{
return new StringBuilderAppendShouldNotTakeSubstringBasicFixer();
}

[Fact]
public void FixesExample1FromTicket()
{
const string Code = @"
Imports System.Text
Public Class C
Public Function Append(ByVal text As String) As String
Dim sb = New StringBuilder()
sb.Append(text.Substring(0, 6))
Return sb.ToString()
End Function
End Class
";
const string FixedCode = @"
Imports System.Text
Public Class C
Public Function Append(ByVal text As String) As String
Dim sb = New StringBuilder()
sb.Append(text, 0, 6)
Return sb.ToString()
End Function
End Class
";
VerifyBasicFix(Code, FixedCode);
}

[Fact]
public void FixesExample2FromTicketBasic()
{
const string Code = @"
Imports System.Text
Public Class C
Public Function Append(ByVal text As String) As String
Dim sb = New StringBuilder()
sb.Append(text.Substring(2))
Return sb.ToString()
End Function
End Class
";
const string FixedCode = @"
Imports System.Text
Public Class C
Public Function Append(ByVal text As String) As String
Dim sb = New StringBuilder()
sb.Append(text, 2, text.Length - 2)
Return sb.ToString()
End Function
End Class
";
VerifyBasicFix(Code, FixedCode);
}

[Fact(Skip = "not working yet")]
public void FixesAllExamplesFromTicketBasic()
Expand Down Expand Up @@ -212,4 +231,5 @@ End Class
VerifyBasicFixAll(Code, FixedCode);
}
}

}

0 comments on commit 8dc25ab

Please sign in to comment.