/// [CanBeNull] object Test() => null;
///
/// void UseTest() {
/// var p = Test();
/// var s = p.ToString(); // Warning: Possible 'System.NullReferenceException'
/// }
///
/// [NotNull] object Foo() {
/// return null; // Warning: Possible 'null' assignment
/// }
///
/// public void Foo([ItemNotNull]List<string> books)
/// {
/// foreach (var book in books) {
/// if (book != null) // Warning: Expression is always true
/// Console.WriteLine(book.ToUpper());
/// }
/// }
///
/// public void Foo([ItemCanBeNull]List<string> books)
/// {
/// foreach (var book in books)
/// {
/// // Warning: Possible 'System.NullReferenceException'
/// Console.WriteLine(book.ToUpper());
/// }
/// }
///
/// [StringFormatMethod("message")]
/// void ShowError(string message, params object[] args) { /* do something */ }
///
/// void Foo() {
/// ShowError("Failed: {0}"); // Warning: Non-existing argument in format string
/// }
///
/// namespace TestNamespace
/// {
/// public class Constants
/// {
/// public static int INT_CONST = 1;
/// public const string STRING_CONST = "1";
/// }
///
/// public class Class1
/// {
/// [ValueProvider("TestNamespace.Constants")] public int myField;
/// public void Foo([ValueProvider("TestNamespace.Constants")] string str) { }
///
/// public void Test()
/// {
/// Foo(/*try completion here*/);//
/// myField = /*try completion here*/
/// }
/// }
/// }
///
/// void Foo([ValueRange(0, 100)] int value) {
/// if (value == -1) { // Warning: Expression is always 'false'
/// ...
/// }
/// }
///
/// void Foo([NonNegativeValue] int value) {
/// if (value == -1) { // Warning: Expression is always 'false'
/// ...
/// }
/// }
///
/// void Foo(string param) {
/// if (param == null)
/// throw new ArgumentNullException("par"); // Warning: Cannot resolve symbol
/// }
///
/// public class Foo : INotifyPropertyChanged {
/// public event PropertyChangedEventHandler PropertyChanged;
///
/// [NotifyPropertyChangedInvocator]
/// protected virtual void NotifyChanged(string propertyName) { ... }
///
/// string _name;
///
/// public string Name {
/// get { return _name; }
/// set { _name = value; NotifyChanged("LastName"); /* Warning */ }
/// }
/// }
///
/// Examples of generated notifications:
/// Function Definition Table syntax:
///
/// [ContractAnnotation("=> halt")]
/// public void TerminationMethod()
///
/// [ContractAnnotation("null <= param:null")] // reverse condition syntax
/// public string GetName(string surname)
///
/// [ContractAnnotation("s:null => true")]
/// public bool IsNullOrEmpty(string s) // string.IsNullOrEmpty()
///
/// // A method that returns null if the parameter is null,
/// // and not null if the parameter is not null
/// [ContractAnnotation("null => null; notnull => notnull")]
/// public object Transform(object data)
///
/// [ContractAnnotation("=> true, result: notnull; => false, result: null")]
/// public bool TryParse(string s, out Person result)
///
/// [LocalizationRequiredAttribute(true)]
/// class Foo {
/// string str = "my string"; // Warning: Localizable string
/// }
///
/// [CannotApplyEqualityOperator]
/// class NoEquality { }
///
/// class UsesNoEquality {
/// void Test() {
/// var ca1 = new NoEquality();
/// var ca2 = new NoEquality();
/// if (ca1 != null) { // OK
/// bool condition = ca1 == ca2; // Warning
/// }
/// }
/// }
///
/// [BaseTypeRequired(typeof(IComponent)] // Specify requirement
/// class ComponentAttribute : Attribute { }
///
/// [Component] // ComponentAttribute requires implementing IComponent interface
/// class MyComponent : IComponent { }
///
/// [Pure] int Multiply(int x, int y) => x * y;
///
/// void M() {
/// Multiply(123, 42); // Warning: Return value of pure method is not used
/// }
///
[MustUseReturnValue("Use the return value to...")]
.
///
/// class Foo {
/// [ProvidesContext] IBarService _barService = ...;
///
/// void ProcessNode(INode node) {
/// DoSomething(node, node.GetGlobalServices().Bar);
/// // ^ Warning: use value of '_barService' field
/// }
/// }
///
/// [SourceTemplate]
/// public static void forEach<T>(this IEnumerable<T> xs) {
/// foreach (var x in xs) {
/// //$ $END$
/// }
/// }
///
///
/// [SourceTemplate, Macro(Target = "item", Expression = "suggestVariableName()")]
/// public static void forEach<T>(this IEnumerable<T> collection) {
/// foreach (var item in collection) {
/// //$ $END$
/// }
/// }
///
/// Applying the attribute on a template method parameter:
///
/// [SourceTemplate]
/// public static void something(this Entity x, [Macro(Expression = "guid()", Editable = -1)] string newguid) {
/// /*$ var $x$Id = "$newguid$" + x.ToString();
/// x.DoSomething($x$Id); */
/// }
///
///
/// [ActionName("Foo")]
/// public ActionResult Login(string returnUrl) {
/// ViewBag.ReturnUrl = Url.Action("Foo"); // OK
/// return RedirectToAction("Bar"); // Error: Cannot resolve action
/// }
///
/// public class MyStringCollection : List<string>
/// {
/// [CollectionAccess(CollectionAccessType.Read)]
/// public string GetFirstString()
/// {
/// return this.ElementAt(0);
/// }
/// }
/// class Test
/// {
/// public void Foo()
/// {
/// // Warning: Contents of the collection is never updated
/// var col = new MyStringCollection();
/// string x = col.GetFirstString();
/// }
/// }
///
/// static void ThrowIfNull<T>([NoEnumeration] T v, string n) where T : class
/// {
/// // custom check for null but no enumeration
/// }
///
/// void Foo(IEnumerable<string> values)
/// {
/// ThrowIfNull(values, nameof(values));
/// var x = values.ToList(); // No warnings about multiple enumeration
/// }
///