ReSharper Web Help

The JetBrains.Annotations framework provides the following attributes:

To use these attributes in your code, you need to reference JetBrains.Annotations as described in the Annotations in Source Code section.

AspMvcActionAttribute

ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is an MVC action. If applied to a method, the MVC action name is calculated implicitly from the context. Use this attribute for custom wrappers similar to System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String)

AspMvcActionSelectorAttribute

ASP.NET MVC attribute. When applied to a parameter of an attribute, indicates that this parameter is an MVC action name.

Example:

            [ActionName("Foo")]
            public ActionResult Login(string returnUrl)
            {
              ViewBag.ReturnUrl = Url.Action("Foo"); // OK
              return RedirectToAction("Bar"); // Error: Cannot resolve action
            }
            

AspMvcAreaAttribute

ASP.NET MVC attribute. Indicates that a parameter is an MVC araa. Use this attribute for custom wrappers similar to System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String)

AspMvcControllerAttribute

ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is an MVC controller. If applied to a method, the MVC controller name is calculated implicitly from the context. Use this attribute for custom wrappers similar to System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String, String)

AspMvcDisplayTemplateAttribute

ASP.NET MVC attribute. Indicates that a parameter is an MVC display template. Use this attribute for custom wrappers similar to System.Web.Mvc.Html.DisplayExtensions.DisplayForModel(HtmlHelper, String)

AspMvcEditorTemplateAttribute

ASP.NET MVC attribute. Indicates that a parameter is an MVC editor template. Use this attribute for custom wrappers similar to System.Web.Mvc.Html.EditorExtensions.EditorForModel(HtmlHelper, String)

AspMvcMasterAttribute

ASP.NET MVC attribute. Indicates that a parameter is an MVC Master. Use this attribute for custom wrappers similar to System.Web.Mvc.Controller.View(String, String)

AspMvcModelTypeAttribute

ASP.NET MVC attribute. Indicates that a parameter is an MVC model type. Use this attribute for custom wrappers similar to System.Web.Mvc.Controller.View(String, Object)

AspMvcPartialViewAttribute

ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is an MVC partial view. If applied to a method, the MVC partial view name is calculated implicitly from the context. Use this attribute for custom wrappers similar to System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial(HtmlHelper, String)

AspMvcSupressViewErrorAttribute

ASP.NET MVC attribute. Allows disabling all inspections for MVC views within a class or a method.

AspMvcViewAttribute

ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is an MVC view. If applied to a method, the MVC view name is calculated implicitly from the context. Use this attribute for custom wrappers similar to System.Web.Mvc.Controller.View(Object)

BaseTypeRequiredAttribute

When applied to a target attribute, specifies a requirement for any type marked with the target attribute to implement or inherit specific type or types.

Example:

            [BaseTypeRequired(typeof(IComponent)] // Specify requirement
            public class ComponentAttribute : Attribute 
            {}
            
            [Component] // ComponentAttribute requires implementing IComponent interface
            public class MyComponent : IComponent
            {}
            

CanBeNullAttribute

Indicates that the value of the marked element could be null sometimes, so the check for null is necessary before its usage.

Example:

            [CanBeNull]
            public object Test()
            {
              return null;
            }
            
            public void UseTest()
            {
              var p = Test(); 
              var s = p.ToString(); // Warning: Possible 'System.NullReferenceException' 
            }
            

CannotApplyEqualityOperatorAttribute

Indicates that the value of the marked type (or its derivatives) cannot be compared using '==' or '!=' operators and Equals() should be used instead. However, using '==' or '!=' for comparison with null is always permitted.

Example:

            [CannotApplyEqualityOperator]
            class NoEquality
            {
            }
            
            class UsesNoEquality
            {
              public void Test()
              {
                var ca1 = new NoEquality();
                var ca2 = new NoEquality();
            
                if (ca1 != null) // OK
                {
                  bool condition = ca1 == ca2; // Warning
                }
              }
            }
            

ContractAnnotationAttribute

Describes dependency between method input and output.

Syntax:

Function Definition Table syntax:

  • FDT ::= FDTRow [;FDTRow]*
  • FDTRow ::= Input => Output | Output <= Input
  • Input ::= ParameterName: Value [, Input]*
  • Output ::= [ParameterName: Value]* {halt|stop|void|nothing|Value}
  • Value ::= true | false | null | notnull | canbenull
If method has single input parameter, it's name could be omitted.
Using halt (or void/nothing, which is the same) for method output means that the methos doesn't return normally.
canbenull annotation is only applicable for output parameters.
You can use multiple [ContractAnnotation] for each FDT row, or use single attribute with rows separated by semicolon.

Examples:

  •             [ContractAnnotation("=> halt")]
                public void TerminationMethod()
                
  •             [ContractAnnotation("halt <= condition: false")]
                public void Assert(bool condition, string text) // Regular Assertion method
                
  •             [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("s:null=>false; =>true,result:notnull; =>false, result:null")]
                public bool TryParse(string s, out Person result)
                

ImplicitUseTargetFlags

Specifies what is considered used implicitly when marked with MeansImplicitUseAttribute or UsedImplicitlyAttribute

InstantHandleAttribute

Tells code analysis engine if the parameter is completely handled when the invoked method is on stack. If the parameter is a delegate, indicates that a delegate is executed while the method is executed. If the parameter is an enumerable, indicates that it is enumerated while the method is executed.

InvokerParameterNameAttribute

Indicates that the function argument should be string literal and match one of the parameters of the caller function. For example, ReSharper annotates the parameter of System.ArgumentNullException.

Example:

            public void Foo(string param)
            {
              if (param == null)
                throw new ArgumentNullException("par"); // Warning: Cannot resolve symbol
            }
            

LocalizationRequiredAttribute

Indicates that marked element should be localized or not.

Example:

            [LocalizationRequiredAttribute(true)]
            public class Foo
            {
              private string str = "my string"; // Warning: Localizable string
            }
            

MeansImplicitUseAttribute

Should be used on attributes and causes ReSharper to not mark symbols marked with such attributes as unused (as well as by other usage inspections)

NotifyPropertyChangedInvocatorAttribute

Indicates that the method is contained in a type that implements System.ComponentModel.INotifyPropertyChanged interface and this method is used to notify that some property value changed.

Remarks:

The method should be non-static and conform to one of the supported signatures:

  • NotifyChanged(string)
  • NotifyChanged(params string[])
  • NotifyChanged{T}(Expression{Func{T}})
  • NotifyChanged{T,U}(Expression{Func{T,U}})
  • SetProperty{T}(ref T, T, string)

Example:

             public class Foo : INotifyPropertyChanged
             {
               public event PropertyChangedEventHandler PropertyChanged;
            
               [NotifyPropertyChangedInvocator]
               protected virtual void NotifyChanged(string propertyName)
               {}
            
               private string _name;
               public string Name
               {
                 get { return _name; }
                 set
                 {
                   _name = value;
                   NotifyChanged("Name"); //OK 
                   NotifyChanged("LastName"); // Warning
                 }
               }
             }
             
Examples of generated notifications:
  • NotifyChanged("Property")
  • NotifyChanged(() => Property)
  • NotifyChanged((VM x) => x.Property)
  • SetProperty(ref myField, value, "Property")

NotNullAttribute

Indicates that the value of marked element could never be null

Example:

            [NotNull]
            public object Foo()
            {
              return null; // Warning: Possible 'null' assignment
            } 
            

PathReferenceAttribute

Indicates that a parameter is a path to a file or a folder within a web project. Path can be relative or absolute, starting from web root (~).

PublicAPIAttribute

This attribute is intended to mark publicly available API which should not be removed and so is treated as used.

PureAttribute

Indicates that a method does not make any observable state changes. The same as System.Diagnostics.Contracts.PureAttribute

Example:

             [Pure]
             private int Multiply(int x, int y)
             {
               return x*y;
             }
            
             public void Foo()
             {
               const int a=2, b=2;
               Multiply(a, b); // Waring: Return value of pure method is not used
             }
             

RazorSectionAttribute

Razor attribute. Indicates that a parameter or a method is a Razor section. Use this attribute for custom wrappers similar to System.Web.WebPages.WebPageBase.RenderSection(String)

StringFormatMethodAttribute

Indicates that marked method builds string by format pattern and (optional) arguments. Parameter, which contains format string, should be given in constructor. The format string should be in System.String.Format(System.IFormatProvider,System.String,System.Object[]) -like form

Example:

            [StringFormatMethod("message")]
            public void ShowError(string message, params object[] args)
            {
              //Do something
            }
            public void Foo()
            {
              ShowError("Failed: {0}"); // Warning: Non-existing argument in format string
            }
            

UsedImplicitlyAttribute

Indicates that the marked symbol is used implicitly (e.g. via reflection, in external library), so this symbol will not be marked as unused (as well as by other usage inspections).

See Also

Concepts

Procedures

Reference