diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ParameterCanBeDemotedIssue/ParameterCanBeDemotedIssue.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ParameterCanBeDemotedIssue/ParameterCanBeDemotedIssue.cs
index a4d35e5dca..d9cc0c7297 100644
--- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ParameterCanBeDemotedIssue/ParameterCanBeDemotedIssue.cs
+++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ParameterCanBeDemotedIssue/ParameterCanBeDemotedIssue.cs
@@ -148,6 +148,10 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
orderby GetInheritanceDepth(type) ascending
select type).ToList();
if (validTypes.Any()) {
+ // don't demote an array to IList
+ if (variable.Type.Kind == TypeKind.Array && validTypes.Any (t => t.Namespace == "System.Collections" && t.Name == "IList")) {
+ return;
+ }
AddIssue(parameter, ctx.TranslateString("Parameter can be demoted to base class"), GetActions(parameter, validTypes));
MembersWithIssues++;
}
diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ParameterCanBeDemotedIssue/ParameterCanBeDemotedTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ParameterCanBeDemotedIssue/ParameterCanBeDemotedTests.cs
index 108287a15e..b7dec0b42c 100644
--- a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ParameterCanBeDemotedIssue/ParameterCanBeDemotedTests.cs
+++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ParameterCanBeDemotedIssue/ParameterCanBeDemotedTests.cs
@@ -921,6 +921,21 @@ class Test : TestBase
}
}");
}
+
+ ///
+ /// Bug 9617 - Incorrect "parameter can be demoted to base class" warning for arrays
+ ///
+ [Test]
+ public void TestBug9617()
+ {
+ Test(@"class Test
+{
+ object Foo (object[] arr)
+ {
+ return arr [0];
+ }
+}", 0);
+ }
}
}