== Why is this an issue? Methods declared as `Public`, `Protected`, or `Protected Friend` can be accessed from other assemblies, which means you should validate parameters to be within the expected constraints. In general, checking against `Nothing` is recommended in defensive programming. This rule raises an issue when a parameter of a publicly accessible method is not validated against `Nothing` before being dereferenced. === Noncompliant code example [source,vbnet] ---- Public Class Sample Public Property Message As String Public Sub PublicMethod(Arg As Exception) Message = Arg.Message ' Noncompliant End Sub Protected Sub ProtectedMethod(Arg As Exception) Message = Arg.Message ' Noncompliant End Sub End Class ---- === Compliant solution [source,vbnet] ---- Public Class Sample Public Property Message As String Public Sub PublicMethod(Arg As Exception) If Arg IsNot Nothing Then Message = Arg.Message ' Noncompliant End Sub Protected Sub ProtectedMethod(Arg As Exception) ArgumentNullException.ThrowIfNull(Arg) Message = Arg.Message ' Noncompliant End Sub Private Sub PrivateMethod(Arg As Exception) Message = Arg.Message ' Compliant: method is not publicly accessible End Sub End Class ---- === Exceptions * Arguments validated for `Nothing` via helper methods should be annotated with the https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/attributes/nullable-analysis#postconditions-maybenull-and-notnull[`[NotNull]`] attribute. * Method parameters marked with the `[NotNull]` https://www.jetbrains.com/help/resharper/Reference__Code_Annotation_Attributes.html#ItemNotNullAttribute[Resharper code annotation attribute] are supported as well. * To create a custom null validation method declare an attribute with name `ValidatedNotNullAttribute` and mark the parameter that is validated for null in your method declaration with it: [source,vbnet] ---- Imports System.Runtime.CompilerServices Public NotInheritable Class ValidatedNotNullAttribute Inherits Attribute End Class Public Module Guard Public Sub NotNull(Of T As Class)( Value As T, Optional Name As String = "") If Value Is Nothing Then Throw New ArgumentNullException(Name) End Sub End Module Public Module SampleUsage Public Function CustomToUpper(Value As String) As String Guard.NotNull(Value) Return Value.ToUpper End Function End Module ---- include::../rspecator.adoc[]