Skip to content

Commit

Permalink
Update UseExceptionThrowHelpers to only recommend ANE for classes (#6314
Browse files Browse the repository at this point in the history
)

* Update UseExceptionThrowHelpers to only recommend ANE for classes

* Address PR feedback
  • Loading branch information
stephentoub authored Dec 9, 2022
1 parent 4d30a72 commit 8af25d7
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,8 @@ aooreThrowIfGreaterThan is not null || aooreThrowIfGreaterThanOrEqual is not nul
if (SymbolEqualityComparer.Default.Equals(objectCreationOperation.Type, ane))
{
if (aneThrowIfNull is not null &&
IsParameterNullCheck(condition.Condition, out IParameterReferenceOperation? nullCheckParameter))
IsParameterNullCheck(condition.Condition, out IParameterReferenceOperation? nullCheckParameter) &&
nullCheckParameter.Type.IsReferenceType)
{
context.ReportDiagnostic(condition.CreateDiagnostic(
UseArgumentNullExceptionThrowIfNullRule,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,39 @@ string this[string name]
return name;
}
}
void NullableArg(int? arg)
{
if (arg is null) throw new ArgumentNullException(nameof(arg));
}
void GenericMethod<T>(T arg)
{
if (arg is null) throw new ArgumentNullException(nameof(arg));
}
void GenericMethodWithClassConstraint<T>(T arg) where T : class
{
{|CA1510:if (arg is null) throw new ArgumentNullException(nameof(arg));|}
}
void GenericMethodWithTypeConstraint<T>(T arg) where T : C
{
{|CA1510:if (arg is null) throw new ArgumentNullException(nameof(arg));|}
}
void GenericMethodWithInterfaceConstraint<T>(T arg) where T : IDisposable
{
if (arg is null) throw new ArgumentNullException(nameof(arg));
}
}
class GenericType<T>
{
void M(T arg)
{
if (arg is null) throw new ArgumentNullException(nameof(arg));
}
}
",
FixedCode =
Expand Down Expand Up @@ -260,6 +293,39 @@ string this[string name]
return name;
}
}
void NullableArg(int? arg)
{
if (arg is null) throw new ArgumentNullException(nameof(arg));
}
void GenericMethod<T>(T arg)
{
if (arg is null) throw new ArgumentNullException(nameof(arg));
}
void GenericMethodWithClassConstraint<T>(T arg) where T : class
{
ArgumentNullException.ThrowIfNull(arg);
}
void GenericMethodWithTypeConstraint<T>(T arg) where T : C
{
ArgumentNullException.ThrowIfNull(arg);
}
void GenericMethodWithInterfaceConstraint<T>(T arg) where T : IDisposable
{
if (arg is null) throw new ArgumentNullException(nameof(arg));
}
}
class GenericType<T>
{
void M(T arg)
{
if (arg is null) throw new ArgumentNullException(nameof(arg));
}
}
"
}.RunAsync();
Expand Down

0 comments on commit 8af25d7

Please sign in to comment.