Mercurial > pub > bltoolkit
comparison Source/Properties/JetBrains.Annotations.cs @ 0:f990fcb411a9
Копия текущей версии из github
| author | cin |
|---|---|
| date | Thu, 27 Mar 2014 21:46:09 +0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:f990fcb411a9 |
|---|---|
| 1 using System; | |
| 2 using System.Collections.Generic; | |
| 3 | |
| 4 namespace JetBrains.Annotations | |
| 5 { | |
| 6 /// <summary> | |
| 7 /// Indicates that marked method builds string by format pattern and (optional) arguments. | |
| 8 /// Parameter, which contains format string, should be given in constructor. | |
| 9 /// The format string should be in <see cref="string.Format(IFormatProvider,string,object[])"/> -like form | |
| 10 /// </summary> | |
| 11 [AttributeUsage(AttributeTargets.Constructor | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] | |
| 12 internal sealed class StringFormatMethodAttribute : Attribute | |
| 13 { | |
| 14 private readonly string _formatParameterName; | |
| 15 | |
| 16 /// <summary> | |
| 17 /// Initializes new instance of StringFormatMethodAttribute | |
| 18 /// </summary> | |
| 19 /// <param name="formatParameterName">Specifies which parameter of an annotated method should be treated as format-string</param> | |
| 20 public StringFormatMethodAttribute(string formatParameterName) | |
| 21 { | |
| 22 _formatParameterName = formatParameterName; | |
| 23 } | |
| 24 | |
| 25 /// <summary> | |
| 26 /// Gets format parameter name | |
| 27 /// </summary> | |
| 28 public string FormatParameterName | |
| 29 { | |
| 30 get { return _formatParameterName; } | |
| 31 } | |
| 32 } | |
| 33 | |
| 34 /// <summary> | |
| 35 /// Indicates that the function argument should be string literal and match one of the parameters of the caller function. | |
| 36 /// For example, <see cref="ArgumentNullException"/> has such parameter. | |
| 37 /// </summary> | |
| 38 [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)] | |
| 39 internal sealed class InvokerParameterNameAttribute : Attribute | |
| 40 { | |
| 41 } | |
| 42 | |
| 43 /// <summary> | |
| 44 /// Indicates that the marked method is assertion method, i.e. it halts control flow if one of the conditions is satisfied. | |
| 45 /// To set the condition, mark one of the parameters with <see cref="AssertionConditionAttribute"/> attribute | |
| 46 /// </summary> | |
| 47 /// <seealso cref="AssertionConditionAttribute"/> | |
| 48 [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] | |
| 49 internal sealed class AssertionMethodAttribute : Attribute | |
| 50 { | |
| 51 } | |
| 52 | |
| 53 /// <summary> | |
| 54 /// Indicates the condition parameter of the assertion method. | |
| 55 /// The method itself should be marked by <see cref="AssertionMethodAttribute"/> attribute. | |
| 56 /// The mandatory argument of the attribute is the assertion type. | |
| 57 /// </summary> | |
| 58 /// <seealso cref="AssertionConditionType"/> | |
| 59 [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)] | |
| 60 internal sealed class AssertionConditionAttribute : Attribute | |
| 61 { | |
| 62 private readonly AssertionConditionType _conditionType; | |
| 63 | |
| 64 /// <summary> | |
| 65 /// Initializes new instance of AssertionConditionAttribute | |
| 66 /// </summary> | |
| 67 /// <param name="conditionType">Specifies condition type</param> | |
| 68 public AssertionConditionAttribute(AssertionConditionType conditionType) | |
| 69 { | |
| 70 _conditionType = conditionType; | |
| 71 } | |
| 72 | |
| 73 /// <summary> | |
| 74 /// Gets condition type | |
| 75 /// </summary> | |
| 76 public AssertionConditionType ConditionType | |
| 77 { | |
| 78 get { return _conditionType; } | |
| 79 } | |
| 80 } | |
| 81 | |
| 82 /// <summary> | |
| 83 /// Specifies assertion type. If the assertion method argument satisifes the condition, then the execution continues. | |
| 84 /// Otherwise, execution is assumed to be halted | |
| 85 /// </summary> | |
| 86 internal enum AssertionConditionType | |
| 87 { | |
| 88 /// <summary> | |
| 89 /// Indicates that the marked parameter should be evaluated to true | |
| 90 /// </summary> | |
| 91 IS_TRUE = 0, | |
| 92 | |
| 93 /// <summary> | |
| 94 /// Indicates that the marked parameter should be evaluated to false | |
| 95 /// </summary> | |
| 96 IS_FALSE = 1, | |
| 97 | |
| 98 /// <summary> | |
| 99 /// Indicates that the marked parameter should be evaluated to null value | |
| 100 /// </summary> | |
| 101 IS_NULL = 2, | |
| 102 | |
| 103 /// <summary> | |
| 104 /// Indicates that the marked parameter should be evaluated to not null value | |
| 105 /// </summary> | |
| 106 IS_NOT_NULL = 3, | |
| 107 } | |
| 108 | |
| 109 /// <summary> | |
| 110 /// Indicates that the marked method unconditionally terminates control flow execution. | |
| 111 /// For example, it could unconditionally throw exception | |
| 112 /// </summary> | |
| 113 [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] | |
| 114 internal sealed class TerminatesProgramAttribute : Attribute | |
| 115 { | |
| 116 } | |
| 117 | |
| 118 /// <summary> | |
| 119 /// Indicates that the value of marked element could be <c>null</c> sometimes, so the check for <c>null</c> is necessary before its usage | |
| 120 /// </summary> | |
| 121 [AttributeUsage(AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.Delegate | AttributeTargets.Field, AllowMultiple = false, Inherited = true)] | |
| 122 internal sealed class CanBeNullAttribute : Attribute | |
| 123 { | |
| 124 } | |
| 125 | |
| 126 /// <summary> | |
| 127 /// Indicates that the value of marked element could never be <c>null</c> | |
| 128 /// </summary> | |
| 129 [AttributeUsage(AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.Delegate | AttributeTargets.Field, AllowMultiple = false, Inherited = true)] | |
| 130 internal sealed class NotNullAttribute : Attribute | |
| 131 { | |
| 132 } | |
| 133 | |
| 134 /// <summary> | |
| 135 /// Indicates that the value of marked type (or its derivatives) cannot be compared using '==' or '!=' operators. | |
| 136 /// There is only exception to compare with <c>null</c>, it is permitted | |
| 137 /// </summary> | |
| 138 [AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false, Inherited = true)] | |
| 139 internal sealed class CannotApplyEqualityOperatorAttribute : Attribute | |
| 140 { | |
| 141 } | |
| 142 | |
| 143 /// <summary> | |
| 144 /// When applied to target attribute, specifies a requirement for any type which is marked with | |
| 145 /// target attribute to implement or inherit specific type or types | |
| 146 /// </summary> | |
| 147 /// <example> | |
| 148 /// <code> | |
| 149 /// [BaseTypeRequired(typeof(IComponent)] // Specify requirement | |
| 150 /// public class ComponentAttribute : Attribute | |
| 151 /// {} | |
| 152 /// | |
| 153 /// [Component] // ComponentAttribute requires implementing IComponent interface | |
| 154 /// public class MyComponent : IComponent | |
| 155 /// {} | |
| 156 /// </code> | |
| 157 /// </example> | |
| 158 [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] | |
| 159 [BaseTypeRequired(typeof(Attribute))] | |
| 160 internal sealed class BaseTypeRequiredAttribute : Attribute | |
| 161 { | |
| 162 private readonly Type[] _baseTypes; | |
| 163 | |
| 164 /// <summary> | |
| 165 /// Initializes new instance of BaseTypeRequiredAttribute | |
| 166 /// </summary> | |
| 167 /// <param name="baseType">Specifies which types are required</param> | |
| 168 public BaseTypeRequiredAttribute(Type baseType) | |
| 169 : this(new Type[] { baseType }) | |
| 170 { | |
| 171 } | |
| 172 | |
| 173 /// <summary> | |
| 174 /// Initializes new instance of BaseTypeRequiredAttribute | |
| 175 /// </summary> | |
| 176 /// <param name="baseTypes">Specifies which types are required</param> | |
| 177 public BaseTypeRequiredAttribute(params Type[] baseTypes) | |
| 178 { | |
| 179 _baseTypes = baseTypes; | |
| 180 } | |
| 181 | |
| 182 /// <summary> | |
| 183 /// Gets enumerations of specified base types | |
| 184 /// </summary> | |
| 185 public IEnumerable<Type> BaseTypes | |
| 186 { | |
| 187 get { return _baseTypes; } | |
| 188 } | |
| 189 } | |
| 190 | |
| 191 /// <summary> | |
| 192 /// Indicates that the marked symbol is used implicitly (e.g. via reflection, in external library), | |
| 193 /// so this symbol will not be marked as unused (as well as by other usage inspections) | |
| 194 /// </summary> | |
| 195 [AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = false)] | |
| 196 internal class UsedImplicitlyAttribute : Attribute | |
| 197 { | |
| 198 readonly ImplicitUseFlags _flags; | |
| 199 /// <summary> | |
| 200 /// Gets value indicating what is meant to be used | |
| 201 /// </summary> | |
| 202 [UsedImplicitly] | |
| 203 public ImplicitUseFlags Flags | |
| 204 { | |
| 205 get { return _flags; } | |
| 206 } | |
| 207 | |
| 208 /// <summary> | |
| 209 /// Initializes new instance of UsedImplicitlyAttribute | |
| 210 /// </summary> | |
| 211 public UsedImplicitlyAttribute() | |
| 212 : this(ImplicitUseFlags.Default) | |
| 213 { | |
| 214 } | |
| 215 | |
| 216 /// <summary> | |
| 217 /// Initializes new instance of UsedImplicitlyAttribute with specified flags | |
| 218 /// </summary> | |
| 219 /// <param name="flags">Value of type <see cref="ImplicitUseFlags"/> indicating usage kind</param> | |
| 220 public UsedImplicitlyAttribute(ImplicitUseFlags flags) | |
| 221 { | |
| 222 _flags = flags; | |
| 223 } | |
| 224 } | |
| 225 | |
| 226 /// <summary> | |
| 227 /// 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) | |
| 228 /// </summary> | |
| 229 [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] | |
| 230 internal class MeansImplicitUseAttribute : Attribute | |
| 231 { | |
| 232 readonly ImplicitUseFlags _flags; | |
| 233 /// <summary> | |
| 234 /// Gets value indicating what is meant to be used | |
| 235 /// </summary> | |
| 236 [UsedImplicitly] | |
| 237 public ImplicitUseFlags Flags | |
| 238 { | |
| 239 get { return _flags; } | |
| 240 } | |
| 241 | |
| 242 /// <summary> | |
| 243 /// Initializes new instance of MeansImplicitUseAttribute | |
| 244 /// </summary> | |
| 245 [UsedImplicitly] | |
| 246 public MeansImplicitUseAttribute() | |
| 247 : this(ImplicitUseFlags.Default) | |
| 248 { | |
| 249 } | |
| 250 | |
| 251 /// <summary> | |
| 252 /// Initializes new instance of MeansImplicitUseAttribute with specified flags | |
| 253 /// </summary> | |
| 254 /// <param name="flags">Value of type <see cref="ImplicitUseFlags"/> indicating usage kind</param> | |
| 255 [UsedImplicitly] | |
| 256 public MeansImplicitUseAttribute(ImplicitUseFlags flags) | |
| 257 { | |
| 258 _flags = flags; | |
| 259 } | |
| 260 } | |
| 261 | |
| 262 /// <summary> | |
| 263 /// Specify what is considered used implicitly when marked with <see cref="MeansImplicitUseAttribute"/> or <see cref="UsedImplicitlyAttribute"/> | |
| 264 /// </summary> | |
| 265 [Flags] | |
| 266 internal enum ImplicitUseFlags | |
| 267 { | |
| 268 /// <summary> | |
| 269 /// Only entity marked with attribute considered used | |
| 270 /// </summary> | |
| 271 Default = 0, | |
| 272 | |
| 273 /// <summary> | |
| 274 /// Entity marked with attribute and all its members considered used | |
| 275 /// </summary> | |
| 276 IncludeMembers = 1 | |
| 277 } | |
| 278 | |
| 279 [AttributeUsage(AttributeTargets.Parameter, Inherited = true)] | |
| 280 internal sealed class InstantHandleAttribute : Attribute { } | |
| 281 } |
