The JetBrains.Annotations framework provides the following attributes:
- AspMvcActionAttribute
- AspMvcActionSelectorAttribute
- AspMvcAreaAttribute
- AspMvcControllerAttribute
- AspMvcDisplayTemplateAttribute
- AspMvcEditorTemplateAttribute
- AspMvcMasterAttribute
- AspMvcModelTypeAttribute
- AspMvcPartialViewAttribute
- AspMvcSupressViewErrorAttribute
- AspMvcViewAttribute
- BaseTypeRequiredAttribute
- CanBeNullAttribute
- CannotApplyEqualityOperatorAttribute
- ContractAnnotationAttribute
- ImplicitUseTargetFlags
- InstantHandleAttribute
- InvokerParameterNameAttribute
- LocalizationRequiredAttribute
- MeansImplicitUseAttribute
- NotifyPropertyChangedInvocatorAttribute
- NotNullAttribute
- PathReferenceAttribute
- PublicAPIAttribute
- PureAttribute
- RazorSectionAttribute
- StringFormatMethodAttribute
- UsedImplicitlyAttribute
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
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
}
}
}
- 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).
