Skip to content

Commit 66b4fd6

Browse files
authored
Do not report 'no-effect' warning when active top-level code is updated (#79746)
1 parent 9c6403e commit 66b4fd6

File tree

2 files changed

+67
-2
lines changed

2 files changed

+67
-2
lines changed

src/Features/CSharpTest/EditAndContinue/ActiveStatementTests.cs

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,71 @@ static void Main(string[] args)
326326
edits.VerifySemanticDiagnostics(active);
327327
}
328328

329+
[Fact]
330+
public void Update_TopLevel()
331+
{
332+
var src1 = """
333+
<AS:0>F();</AS:0>
334+
Map(1, () => 1);
335+
""";
336+
337+
var src2 = """
338+
<AS:0>F();</AS:0>
339+
Map(2, () => 1);
340+
""";
341+
342+
var active = GetActiveStatements(src1, src2);
343+
var edits = GetTopEdits(src1, src2);
344+
345+
edits.VerifySemanticDiagnostics(active);
346+
}
347+
348+
[Fact]
349+
public void Update_TopLevel_ActiveStatementInLambda()
350+
{
351+
var src1 = """
352+
Map(1, () => <AS:0>1</AS:0>);
353+
""";
354+
355+
var src2 = """
356+
Map(2, () => <AS:0>1</AS:0>);
357+
""";
358+
359+
var active = GetActiveStatements(src1, src2);
360+
var edits = GetTopEdits(src1, src2);
361+
362+
edits.VerifySemanticDiagnostics(active,
363+
Diagnostic(RudeEditKind.UpdateMightNotHaveAnyEffect, "2", GetResource("top-level code")));
364+
}
365+
366+
[Fact]
367+
public void Update_RestartRequiredAttribute()
368+
{
369+
var src1 = RestartRequiredOnMetadataUpdateAttributeSrc + """
370+
public class C
371+
{
372+
[RestartRequiredOnMetadataUpdateAttribute]
373+
public int F()
374+
=> <AS:0>1</AS:0>;
375+
}
376+
377+
""";
378+
379+
var src2 = RestartRequiredOnMetadataUpdateAttributeSrc + """
380+
public class C
381+
{
382+
[RestartRequiredOnMetadataUpdateAttribute]
383+
public int F()
384+
=> <AS:0>2</AS:0>;
385+
}
386+
""";
387+
388+
var active = GetActiveStatements(src1, src2);
389+
var edits = GetTopEdits(src1, src2);
390+
391+
edits.VerifySemanticDiagnostics(active);
392+
}
393+
329394
#endregion
330395

331396
#region Delete in Method Body

src/Features/Core/Portable/EditAndContinue/AbstractEditAndContinueAnalyzer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,8 +1275,8 @@ private void AnalyzeChangedMemberBody(
12751275

12761276
// Updating an entry point, a method marked with RestartRequiredOnMetadataUpdateAttribute,
12771277
// a static constructor or a static member with an initializer will most likely have no effect,
1278-
// unless the update is in a lambda body.
1279-
if (IsRestartRequired(oldMember, oldDeclaration, oldModel.Compilation, newMember, newDeclaration, cancellationToken))
1278+
// unless the update is in a lambda body or the member body is an active frame.
1279+
if (!bodyHasActiveStatement && IsRestartRequired(oldMember, oldDeclaration, oldModel.Compilation, newMember, newDeclaration, cancellationToken))
12801280
{
12811281
var oldTokens = oldMemberBody?.GetUserCodeTokens(DescendantTokensIgnoringLambdaBodies) ?? [];
12821282
var newTokens = newMemberBody?.GetUserCodeTokens(DescendantTokensIgnoringLambdaBodies) ?? [];

0 commit comments

Comments
 (0)