Skip to content

Commit f6d0732

Browse files
committed
Add event-specific diagnostic to fix incorrect 'required' suggestion in CS8618 for events
Signed-off-by: lakshay122007 <[email protected]>
1 parent f5d4be7 commit f6d0732

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

src/Compilers/CSharp/Portable/CSharpResources.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5639,6 +5639,9 @@ To remove the warning, you can use /reference instead (set the Embed Interop Typ
56395639
<data name="WRN_UninitializedNonNullableField" xml:space="preserve">
56405640
<value>Non-nullable {0} '{1}' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the {0} as nullable.</value>
56415641
</data>
5642+
<data name="ERR_NonNullableEventNotInitialized" xml:space="preserve">
5643+
<value>Non-nullable event '{0}' must contain a non-null value when exiting constructor. Consider declaring the event as nullable or initializing it.</value>
5644+
</data>
56425645
<data name="WRN_UninitializedNonNullableField_Title" xml:space="preserve">
56435646
<value>Non-nullable field must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring as nullable.</value>
56445647
</data>

src/Compilers/CSharp/Portable/Errors/ErrorCode.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1741,6 +1741,8 @@ internal enum ErrorCode
17411741

17421742
ERR_DuplicateNullSuppression = 8715,
17431743
ERR_DefaultLiteralNoTargetType = 8716,
1744+
ERR_NonNullableEventNotInitialized = 8717,
1745+
17441746

17451747
ERR_ReAbstractionInNoPIAType = 8750,
17461748

src/Compilers/CSharp/Portable/FlowAnalysis/NullableWalker.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -822,9 +822,21 @@ void checkMemberStateOnConstructorExit(MethodSymbol constructor, Symbol member,
822822
: NullableFlowState.MaybeNull;
823823
if (memberState >= badState) // is 'memberState' as bad as or worse than 'badState'?
824824
{
825-
var errorCode = usesFieldKeyword ? ErrorCode.WRN_UninitializedNonNullableBackingField : ErrorCode.WRN_UninitializedNonNullableField;
826-
var info = new CSDiagnosticInfo(errorCode, new object[] { symbol.Kind.Localize(), symbol.Name }, ImmutableArray<Symbol>.Empty, additionalLocations: symbol.Locations);
827-
Diagnostics.Add(info, exitLocation ?? symbol.GetFirstLocationOrNone());
825+
var errorCode =
826+
symbol.Kind == SymbolKind.Event
827+
? ErrorCode.ERR_NonNullableEventNotInitialized
828+
: (usesFieldKeyword
829+
? ErrorCode.WRN_UninitializedNonNullableBackingField
830+
: ErrorCode.WRN_UninitializedNonNullableField);
831+
832+
var info = new CSDiagnosticInfo(
833+
errorCode,
834+
new object[] { symbol.Kind.Localize(), symbol.Name },
835+
ImmutableArray<Symbol>.Empty,
836+
additionalLocations);
837+
838+
Diagnostics.Add(info, exitLocation ?? symbol.GetFirstLocationOrNone());
839+
828840
}
829841
}
830842

0 commit comments

Comments
 (0)