Code annotation attributes
The JetBrains.Annotations
framework provides a number of attributes described below.
To use these attributes in your code, you need to reference JetBrains.Annotations
as described in the Annotations in source code section.
Annotation attributes
CanBeNullAttribute
Indicates that the value of the marked element could be null
sometimes, so checking for null
is required before its usage.
Example
For more information, see Value and nullability analysis.
NotNullAttribute
Indicates that the value of the marked element can never be null
.
Example
For more information, see Value and nullability analysis.
ItemNotNullAttribute
Can be applied to symbols of types derived from IEnumerable as well as to symbols of Task and Lazy classes to indicate that the value of a collection item, of the Task.Result property or of the Lazy.Value property can never be null.
Example
For more information, see Value and nullability analysis.
ItemCanBeNullAttribute
Can be applied to symbols of types derived from IEnumerable as well as to symbols of Task and Lazy classes to indicate that the value of a collection item, of the Task.Result property or of the Lazy.Value property can be null.
Example
For more information, see Value and nullability analysis.
StringFormatMethodAttribute
Indicates that the marked method builds string by the format pattern and (optional) arguments. The parameter, which contains the format string, should be given in the constructor. The format string should be in System.String.Format(System.IFormatProvider,System.String,System.Object[]) -like form.
Example
Members
#ctor(System.String)
Specifies which parameter of an annotated method should be treated as the format string
For more information, see In custom string formatting methods.
ValueProviderAttribute
Use this annotation to specify a type that contains static or const fields with values for the annotated property/field/parameter. The specified type will be used to improve completion suggestions.
Example
ValueRangeAttribute
Indicates that the integral value falls into the specified interval. It's allowed to specify multiple non-intersecting intervals. Values of interval boundaries are inclusive.
Example
NonNegativeValueAttribute
Indicates that the integral value never falls below zero.
Example
InvokerParameterNameAttribute
Indicates that the function argument should be a string literal and match one of the parameters of the caller function. For example, ReSharper annotates the parameter of System.ArgumentNullException.
Example
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.
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
Examples of generated notifications:
NotifyChanged("Property")
NotifyChanged(() => Property)
NotifyChanged((VM x) => x.Property)
SetProperty(ref myField, value, "Property")
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 the method has a single input parameter, its name could be omitted.
Using halt
(or void
/ nothing
, which is the same) for the method output means that the method doesn't return normally (throws or terminates the process).
Value canbenull
is only applicable for output parameters.
You can use multiple [ContractAnnotation]
for each FDT row, or use single attribute with rows separated by the semicolon. There is no notion of order rows, all rows are checked for applicability and applied per each program state tracked by the analysis engine.
Examples
- [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)
For more information, see Contract annotations.
LocalizationRequiredAttribute
Indicates whether the marked element should be localized.
Example
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
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
UsedImplicitlyAttribute
Indicates that the marked symbol is used implicitly (e.g. via reflection, in external library), so this symbol will be ignored by usage-checking inspections.
You can use ImplicitUseKindFlags and ImplicitUseTargetFlags to configure how this attribute is applied.
Example
MeansImplicitUseAttribute
Can be applied to attributes, type parameters, and parameters of a type assignable from System.Type. When applied to an attribute, the decorated attribute behaves the same as UsedImplicitlyAttribute. When applied to a type parameter or to a parameter of type System.Type, indicates that the corresponding type is used implicitly.
PublicAPIAttribute
This attribute is intended to mark publicly available API, which should not be removed and so is treated as used.
InstantHandleAttribute
Tells the code analysis engine if the parameter is completely handled when the invoked method is on stack. If the parameter is a delegate, indicates that delegate is executed while the method is executed. If the parameter is an enumerable, indicates that it is enumerated while the method is executed.
PureAttribute
Indicates that a method does not make any observable state changes. The same as System.Diagnostics.Contracts.PureAttribute
.
Example
MustUseReturnValueAttribute
Indicates that the return value of the method invocation must be used.
Methods decorated with this attribute (in contrast to pure methods) might change state, but make no sense without using their return value.
Similarly to PureAttribute, this attribute will help to detect usages of the method when the return value is not used. Additionally, you can optionally specify a custom message, which will be used when showing warnings, e.g.
ProvidesContextAttribute
Indicates the type member or parameter of some type, that should be used instead of all other ways to get the value of that type. This annotation is useful when you have some "context" value evaluated and stored somewhere, meaning that all other ways to get this value must be consolidated with existing one.
Example
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 (~).
SourceTemplateAttribute
An extension method marked with this attribute is processed by code completion as a 'Source Template'. When the extension method is completed over some expression, its source code is automatically expanded like a template at call site.
Template method body can contain valid source code and/or special comments starting with '$'. Text inside these comments is added as source code when the template is applied. Template parameters can be used either as additional method parameters or as identifiers wrapped in two '$' signs. Use the MacroAttribute attribute to specify macros for parameters.
Example
In this example, the 'forEach' method is a source template available over all values of enumerable types, producing ordinary C# 'foreach' statement and placing caret inside block:
MacroAttribute
Allows specifying a macro for a parameter of a SourceTemplateAttribute.
You can apply the attribute on the whole method or on any of its additional parameters. The macro expression is defined in the Expression property. When applied on a method, the target template parameter is defined in the Target property. To apply the macro silently for the parameter, set the Editable property value = -1.
Example
Applying the attribute on a source template method:
Applying the attribute on a template method parameter:
Members
Expression
Allows specifying a macro that will be executed for a SourceTemplateAttribute parameter when the template is expanded.
Editable
Allows specifying which occurrence of the target parameter becomes editable when the template is deployed.
If the target parameter is used several times in the template, only one occurrence becomes editable; other occurrences are changed synchronously. To specify the zero-based index of the editable occurrence, use values >= 0. To make the parameter non-editable when the template is expanded, use -1.
Target
Identifies the target parameter of a SourceTemplateAttribute if the MacroAttribute is applied on a template method.
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)
.
AspMvcAreaAttribute
ASP.NET MVC attribute. Indicates that the marked parameter is an MVC area. 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)
.
AspMvcMasterAttribute
ASP.NET MVC attribute. Indicates that the marked 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 the marked 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)
.
AspMvcSuppressViewErrorAttribute
ASP.NET MVC attribute. Allows disabling inspections for MVC views within a class or a method.
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 the marked parameter is an MVC editor template. Use this attribute for custom wrappers similar to System.Web.Mvc.Html.EditorExtensions.EditorForModel(HtmlHelper, String)
.
AspMvcTemplateAttribute
ASP.NET MVC attribute. Indicates that the marked parameter is an MVC template. Use this attribute for custom wrappers similar to System.ComponentModel.DataAnnotations.UIHintAttribute(System.String)
.
AspMvcViewAttribute
ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is an MVC view component. 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)
.
AspMvcViewComponentAttribute
ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is an MVC view component name.
AspMvcViewComponentViewAttribute
ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter is an MVC view component view. If applied to a method, the MVC view component view name is default.
AspMvcActionSelectorAttribute
ASP.NET MVC attribute. When applied to a parameter of an attribute, indicates that this parameter is an MVC action name.
Example
RazorSectionAttribute
Razor attribute. Indicates that the marked parameter or method is a Razor section. Use this attribute for custom wrappers similar to System.Web.WebPages.WebPageBase.RenderSection(String)
.
CollectionAccessAttribute
Indicates how method, constructor invocation, or property access over collection type affects the contents of the collection. Use CollectionAccessType to specify the access type.
Using this attribute only makes sense if all collection methods are marked with this attribute.
Example
AssertionMethodAttribute
Indicates that the marked method is assertion method, i.e. it halts the control flow if one of the conditions is satisfied. To set the condition, mark one of the parameters with AssertionConditionAttribute attribute.
AssertionConditionAttribute
Indicates the condition parameter of the assertion method. The method itself should be marked by AssertionMethodAttribute attribute. The mandatory argument of the attribute is the assertion type.
TerminatesProgramAttribute
Indicates that the marked method unconditionally terminates control flow execution. For example, it could unconditionally throw exception.
LinqTunnelAttribute
Indicates that the method is a pure LINQ method, with postponed enumeration (like Enumerable.Select, .Where). This annotation allows inference of [InstantHandle] annotation for parameters of delegate type by analyzing LINQ method chains.
NoEnumerationAttribute
Indicates that IEnumerable passed as a parameter is not enumerated. Use this annotation to suppress the 'Possible multiple enumeration of IEnumerable' inspection.
Example
RegexPatternAttribute
Indicates that the marked parameter, field, or property is a regular expression pattern.
For more information, see Regular expressions assistance.
NoReorderAttribute
Prevents the Member Reordering feature from tossing members of the marked class.
The attribute must be mentioned in your member reordering patterns.
For more information, see Rearrange members with file and type layout patterns
XamlItemsControlAttribute
XAML attribute. Indicates the type that has ItemsSource
property and should be treated as ItemsControl
-derived type, to enable inner items DataContext
type resolve.
XamlItemBindingOfItemsControlAttribute
XAML attribute. Indicates the property of some BindingBase
-derived type, that is used to bind some item of ItemsControl
-derived type. This annotation will enable the DataContext
type resolve for XAML bindings for such properties.
Property should have the tree ancestor of the ItemsControl
type or marked with the XamlItemsControlAttribute attribute.
XamlItemStyleOfItemsControlAttribute
XAML attribute. Indicates the property of some Style
-derived type, that is used to style items of ItemsControl
-derived type. This annotation will enable the DataContext
type resolve for XAML bindings for such properties.
Property should have the tree ancestor of the ItemsControl
type or marked with the XamlItemsControlAttribute attribute.
Helper types
ImplicitUseKindFlags
Specifies the details of implicitly used symbol when it is marked with MeansImplicitUseAttribute or UsedImplicitlyAttribute.
Members
Access
Only entity marked with attribute considered used.
Assign
Indicates implicit assignment to a member.
InstantiatedWithFixedConstructorSignature
Indicates implicit instantiation of a type with fixed constructor signature. That means any unused constructor parameters won't be reported as such.
InstantiatedNoFixedConstructorSignature
Indicates implicit instantiation of a type.
ImplicitUseTargetFlags
Specifies what is considered to be used implicitly when marked with MeansImplicitUseAttribute or UsedImplicitlyAttribute.
Members
Members
Members of the type marked with the attribute are considered used.
WithInheritors
Inherited entities are considered used.
WithMembers
Entity marked with the attribute and all its members considered used.
CollectionAccessType
Provides a value for the CollectionAccessAttribute to define how the collection method invocation affects the contents of the collection.
Members
None
Method does not use or modify content of the collection.
Read
Method only reads content of the collection but does not modify it.
ModifyExistingContent
Method can change content of the collection but does not add new elements.
UpdatedContent
Method can add new elements to the collection.
AssertionConditionType
Specifies assertion type. If the assertion method argument satisfies the condition, then the execution continues. Otherwise, execution is assumed to be halted.
Members
IS_TRUE
Marked parameter should be evaluated to true.
IS_FALSE
Marked parameter should be evaluated to false.
IS_NULL
Marked parameter should be evaluated to null value.
IS_NOT_NULL
Marked parameter should be evaluated to not null value.