mirror of https://github.com/grpc/grpc.git
parent
889ea7cd09
commit
81f0b2f30f
2 changed files with 153 additions and 1 deletions
@ -0,0 +1,146 @@ |
||||
#region Copyright notice and license |
||||
|
||||
// Copyright 2015-2016 gRPC authors. |
||||
// |
||||
// Licensed under the Apache License, Version 2.0 (the "License"); |
||||
// you may not use this file except in compliance with the License. |
||||
// You may obtain a copy of the License at |
||||
// |
||||
// http://www.apache.org/licenses/LICENSE-2.0 |
||||
// |
||||
// Unless required by applicable law or agreed to in writing, software |
||||
// distributed under the License is distributed on an "AS IS" BASIS, |
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
// See the License for the specific language governing permissions and |
||||
// limitations under the License. |
||||
|
||||
#endregion |
||||
|
||||
namespace System.Diagnostics.CodeAnalysis |
||||
{ |
||||
/// <summary> |
||||
/// Indicates that certain members on a specified <see cref="Type"/> are accessed dynamically, |
||||
/// for example through <see cref="System.Reflection"/>. |
||||
/// </summary> |
||||
/// <remarks> |
||||
/// This allows tools to understand which members are being accessed during the execution |
||||
/// of a program. |
||||
/// |
||||
/// This attribute is valid on members whose type is <see cref="Type"/> or <see cref="string"/>. |
||||
/// |
||||
/// When this attribute is applied to a location of type <see cref="string"/>, the assumption is |
||||
/// that the string represents a fully qualified type name. |
||||
/// |
||||
/// If the attribute is applied to a method it's treated as a special case and it implies |
||||
/// the attribute should be applied to the "this" parameter of the method. As such the attribute |
||||
/// should only be used on instance methods of types assignable to System.Type (or string, but no methods |
||||
/// will use it there). |
||||
/// </remarks> |
||||
[AttributeUsage( |
||||
AttributeTargets.Field | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter | |
||||
AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.Method, |
||||
Inherited = false)] |
||||
internal sealed class DynamicallyAccessedMembersAttribute : Attribute |
||||
{ |
||||
/// <summary> |
||||
/// Initializes a new instance of the <see cref="DynamicallyAccessedMembersAttribute"/> class |
||||
/// with the specified member types. |
||||
/// </summary> |
||||
/// <param name="memberTypes">The types of members dynamically accessed.</param> |
||||
public DynamicallyAccessedMembersAttribute(DynamicallyAccessedMemberTypes memberTypes) |
||||
{ |
||||
MemberTypes = memberTypes; |
||||
} |
||||
|
||||
/// <summary> |
||||
/// Gets the <see cref="DynamicallyAccessedMemberTypes"/> which specifies the type |
||||
/// of members dynamically accessed. |
||||
/// </summary> |
||||
public DynamicallyAccessedMemberTypes MemberTypes { get; } |
||||
} |
||||
|
||||
/// <summary> |
||||
/// Specifies the types of members that are dynamically accessed. |
||||
/// |
||||
/// This enumeration has a <see cref="FlagsAttribute"/> attribute that allows a |
||||
/// bitwise combination of its member values. |
||||
/// </summary> |
||||
[Flags] |
||||
internal enum DynamicallyAccessedMemberTypes |
||||
{ |
||||
/// <summary> |
||||
/// Specifies no members. |
||||
/// </summary> |
||||
None = 0, |
||||
|
||||
/// <summary> |
||||
/// Specifies the default, parameterless public constructor. |
||||
/// </summary> |
||||
PublicParameterlessConstructor = 0x0001, |
||||
|
||||
/// <summary> |
||||
/// Specifies all public constructors. |
||||
/// </summary> |
||||
PublicConstructors = 0x0002 | PublicParameterlessConstructor, |
||||
|
||||
/// <summary> |
||||
/// Specifies all non-public constructors. |
||||
/// </summary> |
||||
NonPublicConstructors = 0x0004, |
||||
|
||||
/// <summary> |
||||
/// Specifies all public methods. |
||||
/// </summary> |
||||
PublicMethods = 0x0008, |
||||
|
||||
/// <summary> |
||||
/// Specifies all non-public methods. |
||||
/// </summary> |
||||
NonPublicMethods = 0x0010, |
||||
|
||||
/// <summary> |
||||
/// Specifies all public fields. |
||||
/// </summary> |
||||
PublicFields = 0x0020, |
||||
|
||||
/// <summary> |
||||
/// Specifies all non-public fields. |
||||
/// </summary> |
||||
NonPublicFields = 0x0040, |
||||
|
||||
/// <summary> |
||||
/// Specifies all public nested types. |
||||
/// </summary> |
||||
PublicNestedTypes = 0x0080, |
||||
|
||||
/// <summary> |
||||
/// Specifies all non-public nested types. |
||||
/// </summary> |
||||
NonPublicNestedTypes = 0x0100, |
||||
|
||||
/// <summary> |
||||
/// Specifies all public properties. |
||||
/// </summary> |
||||
PublicProperties = 0x0200, |
||||
|
||||
/// <summary> |
||||
/// Specifies all non-public properties. |
||||
/// </summary> |
||||
NonPublicProperties = 0x0400, |
||||
|
||||
/// <summary> |
||||
/// Specifies all public events. |
||||
/// </summary> |
||||
PublicEvents = 0x0800, |
||||
|
||||
/// <summary> |
||||
/// Specifies all non-public events. |
||||
/// </summary> |
||||
NonPublicEvents = 0x1000, |
||||
|
||||
/// <summary> |
||||
/// Specifies all members. |
||||
/// </summary> |
||||
All = ~None |
||||
} |
||||
} |
Loading…
Reference in new issue