Skip to content

Commit f3ecd54

Browse files
Edit & Continue support for field access in auto-properties (#78289)
Fixes #77951 Field access in auto-properties mostly already worked in EnC. - Update the EnC unit testing infrastructure to always run C# tests with the "preview" language version and VB tests with the "latest" language version. - Add unit test coverage - Fix small issue in the `AbstractEditAndContinueAnalyzer` to allow auto-properties to be detected from a set accessor. cc @tmat
2 parents 9041fb0 + 52ab133 commit f3ecd54

File tree

8 files changed

+607
-18
lines changed

8 files changed

+607
-18
lines changed

src/Compilers/CSharp/Test/Emit2/Emit/EditAndContinue/EditAndContinueTests.cs

Lines changed: 266 additions & 11 deletions
Large diffs are not rendered by default.

src/Features/CSharpTest/EditAndContinue/ActiveStatementTests.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2199,6 +2199,52 @@ class C
21992199
capabilities: EditAndContinueCapabilities.AddMethodToExistingType);
22002200
}
22012201

2202+
[Fact]
2203+
public void Property_Update_ExpressionBodyToAutoProp_FieldAccess()
2204+
{
2205+
var src1 = @"
2206+
class C
2207+
{
2208+
public int P => <AS:0>1</AS:0>;
2209+
}
2210+
";
2211+
var src2 = @"
2212+
class C
2213+
{
2214+
public int P => <AS:0>field</AS:0>;
2215+
}
2216+
";
2217+
var edits = GetTopEdits(src1, src2);
2218+
var active = GetActiveStatements(src1, src2);
2219+
2220+
edits.VerifySemanticDiagnostics(
2221+
active,
2222+
capabilities: EditAndContinueCapabilities.AddInstanceFieldToExistingType);
2223+
}
2224+
2225+
[Fact]
2226+
public void Property_Update_Accessor_ExpressionBodyToAutoProp_FieldAccess()
2227+
{
2228+
var src1 = @"
2229+
class C
2230+
{
2231+
public int P { get => <AS:0>1</AS:0>; }
2232+
}
2233+
";
2234+
var src2 = @"
2235+
class C
2236+
{
2237+
public int P { get => <AS:0>field</AS:0>; }
2238+
}
2239+
";
2240+
var edits = GetTopEdits(src1, src2);
2241+
var active = GetActiveStatements(src1, src2);
2242+
2243+
edits.VerifySemanticDiagnostics(
2244+
active,
2245+
capabilities: EditAndContinueCapabilities.AddInstanceFieldToExistingType);
2246+
}
2247+
22022248
[Fact]
22032249
public void Property_Auto_Record_ReplacingNonPrimaryWithPrimary_Getter()
22042250
{

src/Features/CSharpTest/EditAndContinue/Helpers/CSharpEditAndContinueTestVerifier.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ internal sealed class CSharpEditAndContinueTestVerifier(Action<SyntaxNode>? faul
1717
public override string ProjectFileExtension => ".csproj";
1818
public override TreeComparer<SyntaxNode> TopSyntaxComparer => SyntaxComparer.TopLevel;
1919
public override string? TryGetResource(string keyword) => EditingTestBase.TryGetResource(keyword);
20+
public override ParseOptions ParseOptions => CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.Preview);
2021

2122
public override ImmutableArray<SyntaxNode> GetDeclarators(ISymbol method)
2223
{

src/Features/CSharpTest/EditAndContinue/Helpers/EditingTestBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ internal static string GetDocumentFilePath(int documentIndex)
134134
private static SyntaxTree ParseSource(string markedSource, int documentIndex = 0)
135135
=> SyntaxFactory.ParseSyntaxTree(
136136
SourceMarkers.Clear(markedSource),
137-
CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp12),
137+
CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.Preview),
138138
path: GetDocumentFilePath(documentIndex));
139139

140140
internal static EditScriptDescription GetTopEdits(string methodBody1, string methodBody2, MethodKind kind)

0 commit comments

Comments
 (0)