@@ -4128,6 +4128,7 @@ class C
41284128 validator: g =>
41294129 {
41304130 g.VerifyTypeDefNames("<Module>", "C");
4131+ g.VerifyFieldDefNames();
41314132 g.VerifyMethodDefNames("get_P", "set_P", ".ctor");
41324133 })
41334134
@@ -4137,15 +4138,16 @@ class C
41374138 {
41384139 }
41394140 """,
4140- edits: new[]
4141- {
4141+ edits:
4142+ [
41424143 Edit(SemanticEditKind.Delete, c => c.GetMember("C.get_P"), newSymbolProvider: c => c.GetMember("C")),
41434144 Edit(SemanticEditKind.Delete, c => c.GetMember("C.set_P"), newSymbolProvider: c => c.GetMember("C")),
41444145 Edit(SemanticEditKind.Delete, c => c.GetMember("C.P"), newSymbolProvider: c => c.GetMember("C")),
4145- } ,
4146+ ] ,
41464147 validator: g =>
41474148 {
41484149 g.VerifyTypeDefNames("HotReloadException");
4150+ g.VerifyFieldDefNames("Code");
41494151 g.VerifyMethodDefNames("get_P", "set_P", ".ctor");
41504152
41514153 // Set the property name to "_deleted"
@@ -4202,16 +4204,17 @@ class C
42024204 public string P { get; set; }
42034205 }
42044206 """,
4205- edits: new[] {
4207+ edits: [
42064208 Edit(SemanticEditKind.Insert, symbolProvider: c => c.GetMember("C.P")),
4207- } ,
4209+ ] ,
42084210 validator: g =>
42094211 {
42104212 g.VerifyTypeDefNames();
4213+ g.VerifyFieldDefNames("<P>k__BackingField");
42114214 g.VerifyMethodDefNames("get_P", "set_P");
42124215 g.VerifyMemberRefNames(".ctor", ".ctor");
4213- g.VerifyEncLogDefinitions(new[]
4214- {
4216+ g.VerifyEncLogDefinitions(
4217+ [
42154218 Row(2, TableIndex.TypeDef, EditAndContinueOperation.AddField),
42164219 Row(2, TableIndex.Field, EditAndContinueOperation.Default),
42174220 Row(1, TableIndex.MethodDef, EditAndContinueOperation.Default),
@@ -4224,9 +4227,9 @@ class C
42244227 Row(8, TableIndex.CustomAttribute, EditAndContinueOperation.Default),
42254228 Row(3, TableIndex.MethodSemantics, EditAndContinueOperation.Default),
42264229 Row(4, TableIndex.MethodSemantics, EditAndContinueOperation.Default)
4227- } );
4228- g.VerifyEncMapDefinitions(new[]
4229- {
4230+ ] );
4231+ g.VerifyEncMapDefinitions(
4232+ [
42304233 Handle(2, TableIndex.Field),
42314234 Handle(1, TableIndex.MethodDef),
42324235 Handle(2, TableIndex.MethodDef),
@@ -4238,7 +4241,7 @@ class C
42384241 Handle(1, TableIndex.Property),
42394242 Handle(3, TableIndex.MethodSemantics),
42404243 Handle(4, TableIndex.MethodSemantics)
4241- } );
4244+ ] );
42424245
42434246 var expectedIL = """
42444247 {
@@ -4539,6 +4542,258 @@ .maxstack 8
45394542 .Verify();
45404543 }
45414544
4545+ [Fact]
4546+ public void Property_ChangeToAutoProp()
4547+ {
4548+ using var _ = new EditAndContinueTest()
4549+ .AddBaseline(
4550+ source: $$"""
4551+ class C
4552+ {
4553+ public string P { get { return "1"; } set { } }
4554+ }
4555+ """,
4556+ validator: g =>
4557+ {
4558+ g.VerifyTypeDefNames("<Module>", "C");
4559+ g.VerifyFieldDefNames();
4560+ g.VerifyMethodDefNames("get_P", "set_P", ".ctor");
4561+ })
4562+
4563+ .AddGeneration(
4564+ source: """
4565+ class C
4566+ {
4567+ public string P { get; set; }
4568+ }
4569+ """,
4570+ edits: [
4571+ Edit(SemanticEditKind.Insert, symbolProvider: c => c.GetMember("C.P")),
4572+ ],
4573+ validator: g =>
4574+ {
4575+ g.VerifyTypeDefNames();
4576+ g.VerifyFieldDefNames("<P>k__BackingField");
4577+ g.VerifyMethodDefNames("get_P", "set_P");
4578+ g.VerifyMemberRefNames(".ctor", ".ctor");
4579+ g.VerifyEncLogDefinitions(
4580+ [
4581+ Row(2, TableIndex.TypeDef, EditAndContinueOperation.AddField),
4582+ Row(1, TableIndex.Field, EditAndContinueOperation.Default),
4583+ Row(1, TableIndex.MethodDef, EditAndContinueOperation.Default),
4584+ Row(2, TableIndex.MethodDef, EditAndContinueOperation.Default),
4585+ Row(1, TableIndex.Property, EditAndContinueOperation.Default),
4586+ Row(1, TableIndex.Param, EditAndContinueOperation.Default),
4587+ Row(4, TableIndex.CustomAttribute, EditAndContinueOperation.Default),
4588+ Row(5, TableIndex.CustomAttribute, EditAndContinueOperation.Default),
4589+ Row(6, TableIndex.CustomAttribute, EditAndContinueOperation.Default),
4590+ Row(7, TableIndex.CustomAttribute, EditAndContinueOperation.Default),
4591+ Row(3, TableIndex.MethodSemantics, EditAndContinueOperation.Default),
4592+ Row(4, TableIndex.MethodSemantics, EditAndContinueOperation.Default)
4593+ ]);
4594+ g.VerifyEncMapDefinitions(
4595+ [
4596+ Handle(1, TableIndex.Field),
4597+ Handle(1, TableIndex.MethodDef),
4598+ Handle(2, TableIndex.MethodDef),
4599+ Handle(1, TableIndex.Param),
4600+ Handle(4, TableIndex.CustomAttribute),
4601+ Handle(5, TableIndex.CustomAttribute),
4602+ Handle(6, TableIndex.CustomAttribute),
4603+ Handle(7, TableIndex.CustomAttribute),
4604+ Handle(1, TableIndex.Property),
4605+ Handle(3, TableIndex.MethodSemantics),
4606+ Handle(4, TableIndex.MethodSemantics)
4607+ ]);
4608+
4609+ var expectedIL = """
4610+ {
4611+ // Code size 7 (0x7)
4612+ .maxstack 8
4613+ IL_0000: ldarg.0
4614+ IL_0001: ldfld 0x04000001
4615+ IL_0006: ret
4616+ }
4617+ {
4618+ // Code size 8 (0x8)
4619+ .maxstack 8
4620+ IL_0000: ldarg.0
4621+ IL_0001: ldarg.1
4622+ IL_0002: stfld 0x04000001
4623+ IL_0007: ret
4624+ }
4625+ """;
4626+
4627+ g.VerifyIL(expectedIL);
4628+ })
4629+ .Verify();
4630+ }
4631+
4632+ [Fact]
4633+ public void Property_ChangeToAutoProp_FieldAccess()
4634+ {
4635+ using var _ = new EditAndContinueTest(parseOptions: TestOptions.RegularPreview.WithNoRefSafetyRulesAttribute())
4636+ .AddBaseline(
4637+ source: $$"""
4638+ class C
4639+ {
4640+ public string P { get { return "1"; } set { } }
4641+ }
4642+ """,
4643+ validator: g =>
4644+ {
4645+ g.VerifyTypeDefNames("<Module>", "C");
4646+ g.VerifyFieldDefNames();
4647+ g.VerifyMethodDefNames("get_P", "set_P", ".ctor");
4648+ })
4649+
4650+ .AddGeneration(
4651+ source: """
4652+ class C
4653+ {
4654+ public string P { get; set => field = value; }
4655+ }
4656+ """,
4657+ edits: [
4658+ Edit(SemanticEditKind.Insert, symbolProvider: c => c.GetMember("C.P")),
4659+ ],
4660+ validator: g =>
4661+ {
4662+ g.VerifyTypeDefNames();
4663+ g.VerifyFieldDefNames("<P>k__BackingField");
4664+ g.VerifyMethodDefNames("get_P", "set_P");
4665+ g.VerifyMemberRefNames(".ctor", ".ctor");
4666+ g.VerifyEncLogDefinitions(
4667+ [
4668+ Row(2, TableIndex.TypeDef, EditAndContinueOperation.AddField),
4669+ Row(1, TableIndex.Field, EditAndContinueOperation.Default),
4670+ Row(1, TableIndex.MethodDef, EditAndContinueOperation.Default),
4671+ Row(2, TableIndex.MethodDef, EditAndContinueOperation.Default),
4672+ Row(1, TableIndex.Property, EditAndContinueOperation.Default),
4673+ Row(1, TableIndex.Param, EditAndContinueOperation.Default),
4674+ Row(4, TableIndex.CustomAttribute, EditAndContinueOperation.Default),
4675+ Row(5, TableIndex.CustomAttribute, EditAndContinueOperation.Default),
4676+ Row(6, TableIndex.CustomAttribute, EditAndContinueOperation.Default),
4677+ Row(3, TableIndex.MethodSemantics, EditAndContinueOperation.Default),
4678+ Row(4, TableIndex.MethodSemantics, EditAndContinueOperation.Default)
4679+ ]);
4680+ g.VerifyEncMapDefinitions(
4681+ [
4682+ Handle(1, TableIndex.Field),
4683+ Handle(1, TableIndex.MethodDef),
4684+ Handle(2, TableIndex.MethodDef),
4685+ Handle(1, TableIndex.Param),
4686+ Handle(4, TableIndex.CustomAttribute),
4687+ Handle(5, TableIndex.CustomAttribute),
4688+ Handle(6, TableIndex.CustomAttribute),
4689+ Handle(1, TableIndex.Property),
4690+ Handle(3, TableIndex.MethodSemantics),
4691+ Handle(4, TableIndex.MethodSemantics)
4692+ ]);
4693+
4694+ var expectedIL = """
4695+ {
4696+ // Code size 7 (0x7)
4697+ .maxstack 8
4698+ IL_0000: ldarg.0
4699+ IL_0001: ldfld 0x04000001
4700+ IL_0006: ret
4701+ }
4702+ {
4703+ // Code size 8 (0x8)
4704+ .maxstack 8
4705+ IL_0000: ldarg.0
4706+ IL_0001: ldarg.1
4707+ IL_0002: stfld 0x04000001
4708+ IL_0007: ret
4709+ }
4710+ """;
4711+
4712+ g.VerifyIL(expectedIL);
4713+ })
4714+ .Verify();
4715+ }
4716+
4717+ [Fact]
4718+ public void Property_AutoProp_AddFieldAccess()
4719+ {
4720+ using var _ = new EditAndContinueTest(parseOptions: TestOptions.RegularPreview.WithNoRefSafetyRulesAttribute())
4721+ .AddBaseline(
4722+ source: $$"""
4723+ class C
4724+ {
4725+ public string P { get; set; }
4726+ }
4727+ """,
4728+ validator: g =>
4729+ {
4730+ g.VerifyTypeDefNames("<Module>", "C");
4731+ g.VerifyFieldDefNames("<P>k__BackingField");
4732+ g.VerifyMethodDefNames("get_P", "set_P", ".ctor");
4733+ })
4734+
4735+ .AddGeneration(
4736+ source: """
4737+ class C
4738+ {
4739+ public string P { get; set => field = value; }
4740+ }
4741+ """,
4742+ edits: [
4743+ Edit(SemanticEditKind.Insert, symbolProvider: c => c.GetMember("C.P")),
4744+ ],
4745+ validator: g =>
4746+ {
4747+ g.VerifyTypeDefNames();
4748+ g.VerifyFieldDefNames();
4749+ g.VerifyMethodDefNames("get_P", "set_P");
4750+ g.VerifyMemberRefNames(".ctor", ".ctor");
4751+ g.VerifyEncLogDefinitions(
4752+ [
4753+ Row(1, TableIndex.MethodDef, EditAndContinueOperation.Default),
4754+ Row(2, TableIndex.MethodDef, EditAndContinueOperation.Default),
4755+ Row(1, TableIndex.Property, EditAndContinueOperation.Default),
4756+ Row(1, TableIndex.Param, EditAndContinueOperation.Default),
4757+ Row(1, TableIndex.CustomAttribute, EditAndContinueOperation.Default),
4758+ Row(7, TableIndex.CustomAttribute, EditAndContinueOperation.Default),
4759+ Row(3, TableIndex.MethodSemantics, EditAndContinueOperation.Default),
4760+ Row(4, TableIndex.MethodSemantics, EditAndContinueOperation.Default)
4761+ ]);
4762+ g.VerifyEncMapDefinitions(
4763+ [
4764+ Handle(1, TableIndex.MethodDef),
4765+ Handle(2, TableIndex.MethodDef),
4766+ Handle(1, TableIndex.Param),
4767+ Handle(1, TableIndex.CustomAttribute),
4768+ Handle(7, TableIndex.CustomAttribute),
4769+ Handle(1, TableIndex.Property),
4770+ Handle(3, TableIndex.MethodSemantics),
4771+ Handle(4, TableIndex.MethodSemantics)
4772+ ]);
4773+
4774+ var expectedIL = """
4775+ {
4776+ // Code size 7 (0x7)
4777+ .maxstack 8
4778+ IL_0000: ldarg.0
4779+ IL_0001: ldfld 0x04000001
4780+ IL_0006: ret
4781+ }
4782+ {
4783+ // Code size 8 (0x8)
4784+ .maxstack 8
4785+ IL_0000: ldarg.0
4786+ IL_0001: ldarg.1
4787+ IL_0002: stfld 0x04000001
4788+ IL_0007: ret
4789+ }
4790+ """;
4791+
4792+ g.VerifyIL(expectedIL);
4793+ })
4794+ .Verify();
4795+ }
4796+
45424797 [Fact]
45434798 public void Property_ChangeReturnType()
45444799 {
0 commit comments