@@ -2823,7 +2823,9 @@ protected C(C other)
28232823 new[]
28242824 {
28252825 Diagnostic(RudeEditKind.ExplicitRecordMethodParameterNamesMustMatch, "protected virtual bool PrintMembers(System.Text.StringBuilder sb)", "PrintMembers(System.Text.StringBuilder builder)"),
2826+ Diagnostic(RudeEditKind.RenamingNotSupportedByRuntime, "System.Text.StringBuilder sb", FeaturesResources.parameter),
28262827 Diagnostic(RudeEditKind.ExplicitRecordMethodParameterNamesMustMatch, "public virtual bool Equals(C rhs)", "Equals(C other)"),
2828+ Diagnostic(RudeEditKind.RenamingNotSupportedByRuntime, "C rhs", FeaturesResources.parameter),
28272829 Diagnostic(RudeEditKind.ExplicitRecordMethodParameterNamesMustMatch, "protected C(C other)", "C(C original)")
28282830 },
28292831 capabilities: EditAndContinueCapabilities.Baseline);
@@ -6907,6 +6909,27 @@ public void Method_ReturnType_Update_RuntimeTypeChanged(string oldType, string n
69076909 capabilities: EditAndContinueCapabilities.Baseline);
69086910 }
69096911
6912+ [Fact]
6913+ public void Method_ReturnType_Update_AndBodyChange()
6914+ {
6915+ var src1 = "class C { int M() => 1; }";
6916+ var src2 = "class C { char M() => 'a'; }";
6917+
6918+ var edits = GetTopEdits(src1, src2);
6919+
6920+ edits.VerifySemantics(
6921+ new[]
6922+ {
6923+ SemanticEdit(SemanticEditKind.Delete, c => c.GetMember("C.M"), deletedSymbolContainerProvider: c => c.GetMember("C")),
6924+ SemanticEdit(SemanticEditKind.Insert, c => c.GetMember("C.M"))
6925+ },
6926+ capabilities: EditAndContinueCapabilities.AddMethodToExistingType);
6927+
6928+ edits.VerifySemanticDiagnostics(
6929+ new[] { Diagnostic(RudeEditKind.ChangingTypeNotSupportedByRuntime, "char M()", FeaturesResources.method) },
6930+ capabilities: EditAndContinueCapabilities.Baseline);
6931+ }
6932+
69106933 [Fact]
69116934 public void Method_Update()
69126935 {
@@ -16606,12 +16629,23 @@ event Action F { add {} remove {} }
1660616629 [Fact]
1660716630 public void ParameterRename_Method1()
1660816631 {
16609- var src1 = @"class C { public void M(int a) {} }";
16610- var src2 = @"class C { public void M(int b) {} } ";
16632+ var src1 = @"class C { public void M(int a) { a.ToString(); } }";
16633+ var src2 = @"class C { public void M(int b) { b.ToString(); } } ";
1661116634
1661216635 var edits = GetTopEdits(src1, src2);
1661316636 edits.VerifyEdits(
16637+ "Update [public void M(int a) { a.ToString(); }]@10 -> [public void M(int b) { b.ToString(); }]@10",
1661416638 "Update [int a]@24 -> [int b]@24");
16639+
16640+ edits.VerifySemantics(
16641+ new[] {
16642+ SemanticEdit(SemanticEditKind.Update, c => c.GetMember("C.M"))
16643+ },
16644+ capabilities: EditAndContinueCapabilities.UpdateParameters);
16645+
16646+ edits.VerifySemanticDiagnostics(
16647+ new[] { Diagnostic(RudeEditKind.RenamingNotSupportedByRuntime, "int b", FeaturesResources.parameter) },
16648+ capabilities: EditAndContinueCapabilities.Baseline);
1661516649 }
1661616650
1661716651 [Fact]
@@ -16662,11 +16696,19 @@ public void ParameterRename_Indexer2()
1666216696 public void ParameterInsert1()
1666316697 {
1666416698 var src1 = @"class C { public void M() {} }";
16665- var src2 = @"class C { public void M(int a) {} } ";
16699+ var src2 = @"class C { public void M(int a) { a.ToString(); } } ";
1666616700
1666716701 var edits = GetTopEdits(src1, src2);
1666816702 edits.VerifyEdits(
16703+ "Update [public void M() {}]@10 -> [public void M(int a) { a.ToString(); }]@10",
1666916704 "Insert [int a]@24");
16705+
16706+ edits.VerifySemantics(
16707+ new[] {
16708+ SemanticEdit(SemanticEditKind.Delete, c => c.GetMembers("C.M").FirstOrDefault(m => m.GetParameterCount() == 0)?.ISymbol, deletedSymbolContainerProvider: c => c.GetMember("C")),
16709+ SemanticEdit(SemanticEditKind.Insert, c => c.GetMembers("C.M").FirstOrDefault(m => m.GetParameterCount() == 1)?.ISymbol)
16710+ },
16711+ capabilities: EditAndContinueCapabilities.AddMethodToExistingType);
1667016712 }
1667116713
1667216714 [Fact]
@@ -16679,6 +16721,32 @@ public void ParameterInsert2()
1667916721 edits.VerifyEdits(
1668016722 "Update [(int a)]@23 -> [(int a, ref int b)]@23",
1668116723 "Insert [ref int b]@31");
16724+
16725+ edits.VerifySemantics(
16726+ new[] {
16727+ SemanticEdit(SemanticEditKind.Delete, c => c.GetMembers("C.M").FirstOrDefault(m => m.GetParameterCount() == 1)?.ISymbol, deletedSymbolContainerProvider: c => c.GetMember("C")),
16728+ SemanticEdit(SemanticEditKind.Insert, c => c.GetMembers("C.M").FirstOrDefault(m => m.GetParameterCount() == 2)?.ISymbol)
16729+ },
16730+ capabilities: EditAndContinueCapabilities.AddMethodToExistingType);
16731+ }
16732+
16733+ [Fact]
16734+ public void ParameterInsert3()
16735+ {
16736+ var src1 = @"class C { public void M() {} }";
16737+ var src2 = @"class C { public int M(int a) { return a; } } ";
16738+
16739+ var edits = GetTopEdits(src1, src2);
16740+ edits.VerifyEdits(
16741+ "Update [public void M() {}]@10 -> [public int M(int a) { return a; }]@10",
16742+ "Insert [int a]@23");
16743+
16744+ edits.VerifySemantics(
16745+ new[] {
16746+ SemanticEdit(SemanticEditKind.Delete, c => c.GetMembers("C.M").FirstOrDefault(m => m.GetParameterCount() == 0)?.ISymbol, deletedSymbolContainerProvider: c => c.GetMember("C")),
16747+ SemanticEdit(SemanticEditKind.Insert, c => c.GetMembers("C.M").FirstOrDefault(m => m.GetParameterCount() == 1)?.ISymbol)
16748+ },
16749+ capabilities: EditAndContinueCapabilities.AddMethodToExistingType);
1668216750 }
1668316751
1668416752 [Fact]
@@ -16690,6 +16758,13 @@ public void ParameterDelete1()
1669016758 var edits = GetTopEdits(src1, src2);
1669116759 edits.VerifyEdits(
1669216760 "Delete [int a]@24");
16761+
16762+ edits.VerifySemantics(
16763+ new[] {
16764+ SemanticEdit(SemanticEditKind.Delete, c => c.GetMembers("C.M").FirstOrDefault(m => m.GetParameterCount() == 1)?.ISymbol, deletedSymbolContainerProvider: c => c.GetMember("C")),
16765+ SemanticEdit(SemanticEditKind.Insert, c => c.GetMembers("C.M").FirstOrDefault(m => m.GetParameterCount() == 0)?.ISymbol)
16766+ },
16767+ capabilities: EditAndContinueCapabilities.AddMethodToExistingType);
1669316768 }
1669416769
1669516770 [Fact]
@@ -16702,6 +16777,13 @@ public void ParameterDelete2()
1670216777 edits.VerifyEdits(
1670316778 "Update [(int a, int b)]@23 -> [(int b)]@23",
1670416779 "Delete [int a]@24");
16780+
16781+ edits.VerifySemantics(
16782+ new[] {
16783+ SemanticEdit(SemanticEditKind.Delete, c => c.GetMembers("C.M").FirstOrDefault(m => m.GetParameterCount() == 2)?.ISymbol, deletedSymbolContainerProvider: c => c.GetMember("C")),
16784+ SemanticEdit(SemanticEditKind.Insert, c => c.GetMembers("C.M").FirstOrDefault(m => m.GetParameterCount() == 1)?.ISymbol)
16785+ },
16786+ capabilities: EditAndContinueCapabilities.AddMethodToExistingType);
1670516787 }
1670616788
1670716789 [Fact]
@@ -16724,10 +16806,65 @@ public void ParameterReorder()
1672416806 var edits = GetTopEdits(src1, src2);
1672516807 edits.VerifyEdits(
1672616808 "Reorder [int b]@31 -> @24");
16809+
16810+ edits.VerifySemantics(
16811+ new[] {
16812+ SemanticEdit(SemanticEditKind.Update, c => c.GetMember("C.M"))
16813+ },
16814+ capabilities: EditAndContinueCapabilities.UpdateParameters);
16815+
16816+ edits.VerifySemanticDiagnostics(
16817+ new[] { Diagnostic(RudeEditKind.RenamingNotSupportedByRuntime, "int b", FeaturesResources.parameter) },
16818+ capabilities: EditAndContinueCapabilities.Baseline);
1672716819 }
1672816820
1672916821 [Fact]
1673016822 public void ParameterReorderAndUpdate()
16823+ {
16824+ var src1 = @"class C { public void M(int a, int b) { a.ToString(); } }";
16825+ var src2 = @"class C { public void M(int b, int a) { b.ToString(); } } ";
16826+
16827+ var edits = GetTopEdits(src1, src2);
16828+ edits.VerifyEdits(
16829+ "Update [public void M(int a, int b) { a.ToString(); }]@10 -> [public void M(int b, int a) { b.ToString(); }]@10",
16830+ "Reorder [int b]@31 -> @24");
16831+
16832+ edits.VerifySemantics(
16833+ new[] {
16834+ SemanticEdit(SemanticEditKind.Update, c => c.GetMember("C.M"))
16835+ },
16836+ capabilities: EditAndContinueCapabilities.UpdateParameters);
16837+
16838+ edits.VerifySemanticDiagnostics(
16839+ new[] { Diagnostic(RudeEditKind.RenamingNotSupportedByRuntime, "int b", FeaturesResources.parameter) },
16840+ capabilities: EditAndContinueCapabilities.Baseline);
16841+ }
16842+
16843+ [Fact]
16844+ public void ParameterReorderAndChangeTypes()
16845+ {
16846+ var src1 = @"class C { public void M(string a, int b) { a.ToString(); } }";
16847+ var src2 = @"class C { public void M(int b, string a) { b.ToString(); } } ";
16848+
16849+ var edits = GetTopEdits(src1, src2);
16850+ edits.VerifyEdits(
16851+ "Update [public void M(string a, int b) { a.ToString(); }]@10 -> [public void M(int b, string a) { b.ToString(); }]@10",
16852+ "Reorder [int b]@34 -> @24");
16853+
16854+ edits.VerifySemantics(
16855+ new[] {
16856+ SemanticEdit(SemanticEditKind.Delete, c => c.GetMembers("C.M").FirstOrDefault(m => m.GetParameterTypes()[0].SpecialType == SpecialType.System_String)?.ISymbol, deletedSymbolContainerProvider: c => c.GetMember("C")),
16857+ SemanticEdit(SemanticEditKind.Insert, c => c.GetMembers("C.M").FirstOrDefault(m => m.GetParameterTypes()[0].SpecialType == SpecialType.System_Int32)?.ISymbol)
16858+ },
16859+ capabilities: EditAndContinueCapabilities.AddMethodToExistingType);
16860+
16861+ edits.VerifySemanticDiagnostics(
16862+ new[] { Diagnostic(RudeEditKind.RenamingNotSupportedByRuntime, "int b", FeaturesResources.parameter) },
16863+ capabilities: EditAndContinueCapabilities.Baseline);
16864+ }
16865+
16866+ [Fact]
16867+ public void ParameterReorderAndRename()
1673116868 {
1673216869 var src1 = @"class C { public void M(int a, int b) {} }";
1673316870 var src2 = @"class C { public void M(int b, int c) {} } ";
@@ -16736,6 +16873,19 @@ public void ParameterReorderAndUpdate()
1673616873 edits.VerifyEdits(
1673716874 "Reorder [int b]@31 -> @24",
1673816875 "Update [int a]@24 -> [int c]@31");
16876+
16877+ edits.VerifySemantics(
16878+ new[] {
16879+ SemanticEdit(SemanticEditKind.Update, c => c.GetMember("C.M"))
16880+ },
16881+ capabilities: EditAndContinueCapabilities.UpdateParameters);
16882+
16883+ edits.VerifySemanticDiagnostics(
16884+ new[] {
16885+ Diagnostic(RudeEditKind.RenamingNotSupportedByRuntime, "int b", FeaturesResources.parameter),
16886+ Diagnostic(RudeEditKind.RenamingNotSupportedByRuntime, "int c", FeaturesResources.parameter)
16887+ },
16888+ capabilities: EditAndContinueCapabilities.Baseline);
1673916889 }
1674016890
1674116891 [Theory]
0 commit comments