Browse Source

Merge pull request #159 from leoowen19/master

Two new Code issues added.
pull/32/merge
Mike Krüger 13 years ago
parent
commit
ce506cc09a
  1. 3
      ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj
  2. 72
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ConstructorIssues/StaticConstructorAccessModifierIssue.cs
  3. 70
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ConstructorIssues/StaticConstructorParameterIssue.cs
  4. 3
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/RedundantNullCheckIssue.cs
  5. 21
      ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/RedundantNullCheckTests.cs
  6. 86
      ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/StaticConstructorAccessModifierTest.cs
  7. 1
      ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj

3
ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj

@ -529,6 +529,8 @@ @@ -529,6 +529,8 @@
<Compile Include="Formatter\FormattingVisitor_Expressions.cs" />
<Compile Include="Formatter\FormattingChanges.cs" />
<Compile Include="Refactoring\CodeIssues\RedundantNullCheckIssue.cs" />
<Compile Include="Refactoring\CodeIssues\ConstructorIssues\StaticConstructorParameterIssue.cs" />
<Compile Include="Refactoring\CodeIssues\ConstructorIssues\StaticConstructorAccessModifierIssue.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj">
@ -545,6 +547,7 @@ @@ -545,6 +547,7 @@
<Folder Include="Refactoring\CodeActions\ConvertToInitializer\" />
<Folder Include="Refactoring\CodeIssues\FormatStringIssues\" />
<Folder Include="Refactoring\CodeIssues\CompilerErrors\" />
<Folder Include="Refactoring\CodeIssues\ConstructorIssues\" />
</ItemGroup>
<ProjectExtensions>
<MonoDevelop>

72
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ConstructorIssues/StaticConstructorAccessModifierIssue.cs

@ -0,0 +1,72 @@ @@ -0,0 +1,72 @@
//
// StaticConstructorModifierIssue.cs.cs
//
// Author:
// Ji Kun <jikun.nus@gmail.com>
//
// Copyright (c) 2013 Ji Kun
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.NRefactory.CSharp.Refactoring
{
[IssueDescription("Static constructor should be without access modifier",
Description = "Static constructor should be without access modifier",
Category = IssueCategories.CompilerErrors,
Severity = Severity.Error,
ResharperDisableKeyword = "StaticConstructorAccessModifier",
IssueMarker = IssueMarker.Underline)]
public class StaticConstructorAccessModifierIssue : ICodeIssueProvider
{
public IEnumerable<CodeIssue> GetIssues(BaseRefactoringContext context)
{
var unit = context.RootNode as SyntaxTree;
if (unit == null)
return Enumerable.Empty<CodeIssue>();
return new GatherVisitor(context).GetIssues();
}
class GatherVisitor : GatherVisitorBase<StaticConstructorAccessModifierIssue>
{
public GatherVisitor(BaseRefactoringContext ctx)
: base(ctx)
{
}
public override void VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration)
{
if (!constructorDeclaration.HasModifier(Modifiers.Static))
return;
if (constructorDeclaration.HasModifier(Modifiers.Public) ||
constructorDeclaration.HasModifier(Modifiers.Private) ||
constructorDeclaration.HasModifier(Modifiers.Protected))
{
AddIssue(constructorDeclaration, ctx.TranslateString("Static constructor cannot take access modifier"));
}
}
}
}
}

70
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ConstructorIssues/StaticConstructorParameterIssue.cs

@ -0,0 +1,70 @@ @@ -0,0 +1,70 @@
//
// StaticConstructorParameterIssue.cs
//
// Author:
// Ji Kun <jikun.nus@gmail.com>
//
// Copyright (c) 2013 Ji Kun
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.NRefactory.CSharp.Refactoring
{
[IssueDescription("Static constructor should be parameterless",
Description = "Static constructor should be parameterless",
Category = IssueCategories.CompilerErrors,
Severity = Severity.Error,
ResharperDisableKeyword = "StaticConstructorParameterless",
IssueMarker = IssueMarker.Underline)]
public class StaticConstructorParameterIssue : ICodeIssueProvider
{
public IEnumerable<CodeIssue> GetIssues(BaseRefactoringContext context)
{
var unit = context.RootNode as SyntaxTree;
if (unit == null)
return Enumerable.Empty<CodeIssue>();
return new GatherVisitor(context).GetIssues();
}
class GatherVisitor : GatherVisitorBase<StaticConstructorParameterIssue>
{
public GatherVisitor(BaseRefactoringContext ctx)
: base(ctx)
{
}
public override void VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration)
{
if (!constructorDeclaration.HasModifier(Modifiers.Static))
return;
if (constructorDeclaration.Parameters.Count != 0)
{
AddIssue(constructorDeclaration, ctx.TranslateString("Static constructor cannot take parameters"));
}
}
}
}
}

3
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/RedundantNullCheckIssue.cs

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
//
// RedundantToStringIssue.cs
// RedundantNullCheckIssue.cs
//
// Author:
// Ji Kun <jikun.nus@gmail.com>
@ -37,6 +37,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -37,6 +37,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
Description = "When 'is' keyword is used, which implicitly check null.",
Category = IssueCategories.Redundancies,
Severity = Severity.Suggestion,
ResharperDisableKeyword = "RedundantNullCheck",
IssueMarker = IssueMarker.GrayOut)]
public class RedundantNullCheckIssue : ICodeIssueProvider
{

21
ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/RedundantNullCheckTests.cs

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
//
// RedundantPrivateInspectorTests.cs
// RedundantNullCheckTests.cs
//
// Author:
// Ji Kun <jikun.nus@gmail.com>
@ -49,6 +49,25 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues @@ -49,6 +49,25 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues
}}}");
}
[Test]
public void TestResharperDisable()
{
var input = @"using System;
class Test {
public void test(){
int a = 0;
//Resharper disable RedundantNullCheck
if(a is int && a != null)
{a = 1;}
//Resharper restore RedundantNullCheck
}
}";
TestRefactoringContext context;
var issues = GetIssues(new RedundantNullCheckIssue(), input, out context);
Assert.AreEqual(0, issues.Count);
}
[Test]
public void TestInspectorCase2()
{

86
ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/StaticConstructorAccessModifierTest.cs

@ -0,0 +1,86 @@ @@ -0,0 +1,86 @@
//
// StaticConstructorAccessModifierTest.cs
//
// Author:
// Ji Kun <jikun.nus@gmail.com>
//
// Copyright (c) 2013 Ji Kun
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
using System;
using NUnit.Framework;
using ICSharpCode.NRefactory.CSharp.Refactoring;
using ICSharpCode.NRefactory.CSharp.CodeActions;
namespace ICSharpCode.NRefactory.CSharp.CodeIssues
{
[TestFixture]
public class StaticConstructorAccessModifer : InspectionActionTestBase
{
[Test]
public void TestInspectorCase1()
{
var input = @"using System;
class Test {
static int a;
public static Test(){a = 100;}
}";
TestRefactoringContext context;
var issues = GetIssues(new StaticConstructorAccessModifierIssue(), input, out context);
Assert.AreEqual(1, issues.Count);
}
[Test]
public void TestInspectorCase2()
{
var input = @"using System;
class Test {
static int a;
static private Test(){
a = 1;
}
public Test()
{}
}";
TestRefactoringContext context;
var issues = GetIssues(new StaticConstructorAccessModifierIssue(), input, out context);
Assert.AreEqual(1, issues.Count);
}
[Test]
public void TestResharperDisableCase()
{
var input =
@"using System;
class Test {
private int a;
//Resharper disable StaticConstructorAccessModifier
public static Test(){
}
//Resharper restore StaticConstructorAccessModifier
}";
TestRefactoringContext context;
var issues = GetIssues(new StaticConstructorAccessModifierIssue(), input, out context);
Assert.AreEqual(0, issues.Count);
}
}
}

1
ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj

@ -404,6 +404,7 @@ @@ -404,6 +404,7 @@
<Compile Include="CSharp\CodeActions\InvertIfAndSimplifyTests.cs" />
<Compile Include="FormattingTests\TestExpressionFormatting.cs" />
<Compile Include="CSharp\CodeIssues\RedundantNullCheckTests.cs" />
<Compile Include="CSharp\CodeIssues\StaticConstructorAccessModifierTest.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\cecil\Mono.Cecil.csproj">

Loading…
Cancel
Save