diff --git a/src/EditorFeatures/CSharpTest/CSharpEditorServicesTest.csproj b/src/EditorFeatures/CSharpTest/CSharpEditorServicesTest.csproj
index e86ab125b8c027b84c4e96eb988f211895d8d773..b0d009a72562a1ca05fa67c3088214bac2fa19da 100644
--- a/src/EditorFeatures/CSharpTest/CSharpEditorServicesTest.csproj
+++ b/src/EditorFeatures/CSharpTest/CSharpEditorServicesTest.csproj
@@ -93,8 +93,10 @@
Roslyn.Services.Editor.CSharp.UnitTests
UnitTest
-
-
+
+
+
+
@@ -278,6 +280,7 @@
+
diff --git a/src/EditorFeatures/CSharpTest/UseCollectionInitializer/UseCollectionInitializerTests.cs b/src/EditorFeatures/CSharpTest/UseCollectionInitializer/UseCollectionInitializerTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4edda119ceb704133bf59c6b3361e0693076fac2
--- /dev/null
+++ b/src/EditorFeatures/CSharpTest/UseCollectionInitializer/UseCollectionInitializerTests.cs
@@ -0,0 +1,267 @@
+// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System;
+using System.Threading.Tasks;
+using Microsoft.CodeAnalysis.CodeFixes;
+using Microsoft.CodeAnalysis.CSharp.UseCollectionInitializer;
+using Microsoft.CodeAnalysis.Diagnostics;
+using Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.Diagnostics;
+using Roslyn.Test.Utilities;
+using Xunit;
+
+namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.UseCollectionInitializer
+{
+ public partial class UseCollectionInitializerTests : AbstractCSharpDiagnosticProviderBasedUserDiagnosticTest
+ {
+ internal override Tuple CreateDiagnosticProviderAndFixer(Workspace workspace)
+ {
+ return new Tuple(
+ new CSharpUseCollectionInitializerDiagnosticAnalyzer(),
+ new CSharpUseCollectionInitializerCodeFixProvider());
+ }
+
+ [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseCollectionInitializer)]
+ public async Task TestOnVariableDeclarator()
+ {
+ await TestAsync(
+@"
+using System.Collections.Generic;
+class C
+{
+ void M()
+ {
+ var c = [||]new List();
+ c.Add(1);
+ }
+}",
+@"
+using System.Collections.Generic;
+class C
+{
+ void M()
+ {
+ var c = new List()
+ {
+ 1
+ };
+ }
+}");
+ }
+
+ [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseCollectionInitializer)]
+ public async Task TestOnAssignmentExpression()
+ {
+ await TestAsync(
+@"
+using System.Collections.Generic;
+class C
+{
+ void M()
+ {
+ List c = null;
+ c = [||]new List();
+ c.Add(1);
+ }
+}",
+@"
+using System.Collections.Generic;
+class C
+{
+ void M()
+ {
+ List c = null;
+ c = new List()
+ {
+ 1
+ };
+ }
+}");
+ }
+
+ [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseCollectionInitializer)]
+ public async Task TestMissingOnRefAdd()
+ {
+ await TestMissingAsync(
+@"
+using System.Collections.Generic;
+class C
+{
+ void M()
+ {
+ var c = [||]new List();
+ c.Add(ref i);
+ }
+}");
+ }
+
+ [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseCollectionInitializer)]
+ public async Task TestComplexInitializer()
+ {
+ await TestAsync(
+@"
+using System.Collections.Generic;
+class C
+{
+ void M()
+ {
+ List[] array;
+
+ array[0] = [||]new List();
+ array[0].Add(1);
+ array[0].Add(2);
+ }
+}",
+@"
+using System.Collections.Generic;
+class C
+{
+ void M()
+ {
+ List[] array;
+
+ array[0] = new List()
+ {
+ 1,
+ 2
+ };
+ }
+}");
+ }
+
+ [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseCollectionInitializer)]
+ public async Task TestNotOnNamedArg()
+ {
+ await TestMissingAsync(
+@"
+using System.Collections.Generic;
+class C
+{
+ void M()
+ {
+ var c = [||]new List();
+ c.Add(arg: 1);
+ }
+}");
+ }
+
+ [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseCollectionInitializer)]
+ public async Task TestMissingWithExistingInitializer()
+ {
+ await TestMissingAsync(
+@"
+using System.Collections.Generic;
+class C
+{
+ void M()
+ {
+ var c = [||]new List() { 1 };
+ c.Add(1);
+ }
+}");
+ }
+
+ [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseCollectionInitializer)]
+ public async Task TestFixAllInDocument()
+ {
+ await TestAsync(
+@"
+using System.Collections.Generic;
+class C
+{
+ void M()
+ {
+ List[] array;
+
+ array[0] = {|FixAllInDocument:new|} List();
+ array[0].Add(1);
+ array[0].Add(2);
+
+ array[1] = new List();
+ array[1].Add(3);
+ array[1].Add(4);
+ }
+}",
+@"
+using System.Collections.Generic;
+class C
+{
+ void M()
+ {
+ List[] array;
+
+ array[0] = new List()
+ {
+ 1,
+ 2
+ };
+ array[1] = new List()
+ {
+ 3,
+ 4
+ };
+ }
+}");
+ }
+
+ [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseCollectionInitializer)]
+ public async Task TestTrivia1()
+ {
+ await TestAsync(
+@"
+using System.Collections.Generic;
+class C
+{
+ void M()
+ {
+ var c = [||]new List();
+ c.Add(1); // Foo
+ c.Add(2); // Bar
+ }
+}",
+@"
+using System.Collections.Generic;
+class C
+{
+ void M()
+ {
+ var c = new List()
+ {
+ 1, // Foo
+ 2 // Bar
+ };
+ }
+}",
+compareTokens: false);
+ }
+
+ [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseCollectionInitializer)]
+ public async Task TestComplexInitializer2()
+ {
+ await TestAsync(
+@"
+using System.Collections.Generic;
+class C
+{
+ void M()
+ {
+ var c = new [||]Dictionary();
+ c.Add(1, ""x"");
+ c.Add(2, ""y"");
+ }
+}",
+@"
+using System.Collections.Generic;
+class C
+{
+ void M()
+ {
+ var c = new Dictionary()
+ {
+ { 1, ""x"" },
+ { 2, ""y"" }
+ };
+ }
+}");
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/EditorFeatures/TestUtilities/Traits.cs b/src/EditorFeatures/TestUtilities/Traits.cs
index eb782d4f9855f5991bef685fad0040acdecf967b..142bf142b4686d9976615ac5ccfe57219aa2239d 100644
--- a/src/EditorFeatures/TestUtilities/Traits.cs
+++ b/src/EditorFeatures/TestUtilities/Traits.cs
@@ -84,6 +84,7 @@ public static class Features
public const string CodeActionsSpellcheck = "CodeActions.Spellcheck";
public const string CodeActionsSuppression = "CodeActions.Suppression";
public const string CodeActionsUseAutoProperty = "CodeActions.UseAutoProperty";
+ public const string CodeActionsUseCollectionInitializer = "CodeActions.UseCollectionInitializer";
public const string CodeActionsUseExpressionBody = "CodeActions.UseExpressionBody";
public const string CodeActionsUseImplicitType = "CodeActions.UseImplicitType";
public const string CodeActionsUseExplicitType = "CodeActions.UseExplicitType";