当前位置: 首页>>代码示例>>C#>>正文


C# MethodDefinition.HasAttribute方法代码示例

本文整理汇总了C#中Mono.Cecil.MethodDefinition.HasAttribute方法的典型用法代码示例。如果您正苦于以下问题:C# MethodDefinition.HasAttribute方法的具体用法?C# MethodDefinition.HasAttribute怎么用?C# MethodDefinition.HasAttribute使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Mono.Cecil.MethodDefinition的用法示例。


在下文中一共展示了MethodDefinition.HasAttribute方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: CheckMethod

		public RuleResult CheckMethod (MethodDefinition method)
		{
			// we only check non static, non virtual methods and not constructors
			if (method.IsStatic || method.IsVirtual || method.IsConstructor)
				return RuleResult.DoesNotApply;

			// we only check methods with a body
			if (!method.HasBody)
				return RuleResult.DoesNotApply;

			// we also don't check event callbacks, as they usually bring a lot of false positive,
			// and that developers are tied to their signature
			if (method.IsEventCallback ())
				return RuleResult.DoesNotApply;

			// that aren't compiler generated (e.g. anonymous methods) or generated by a tool (e.g. web services)
			if (method.IsGeneratedCode ())
				return RuleResult.DoesNotApply;

			// methods with [Conditional] can be empty (not using 'this') IL-wise but not source-wise, ignore them
			if (method.HasCustomAttributes) {
				if (method.HasAttribute ("System.Diagnostics", "ConditionalAttribute"))
					return RuleResult.DoesNotApply;
			}

			// rule applies

			// if we find a use of the "this" reference, it's ok

			// in most (all?) case "this" is used with the ldarg_0 instruction
			if (OpCodeEngine.GetBitmask (method).Get (Code.Ldarg_0))
				return RuleResult.Success;

			// but it's also valid to have an ldarg with a 0 value operand
			foreach (Instruction instr in method.Body.Instructions) {
				if (instr.OpCode.Code == Code.Ldarg) {
					ParameterDefinition pd = (instr.Operand as ParameterDefinition);
					if (pd.Index == -1)
						return RuleResult.Success;
				}
			}

			Runner.Report (method, Severity.Low, Confidence.Total);
			return RuleResult.Failure;
		}
开发者ID:FreeBSD-DotNet,项目名称:mono-tools,代码行数:45,代码来源:MethodCanBeMadeStaticRule.cs

示例2: CheckMethod

        // Method		Visible		Non-Visible
        // ------------------------------------------------
        // Parameters		High		Medium
        // ReturnType		High		Medium
        // Variables		Low		Low
        // Method calls		Medium*		Low*
        // Fields access	Medium*		Low*
        // * target visibility
        public RuleResult CheckMethod(MethodDefinition method)
        {
            // [Obsolete] cannot be applied to property or event accessors
            if (method.IsProperty () || method.IsAddOn || method.IsRemoveOn || method.IsFire)
                return RuleResult.DoesNotApply;

            // if the method is obsolete (directly or because it's type is)
            if (method.HasAttribute ("System", "ObsoleteAttribute") || method.DeclaringType.HasAttribute ("System", "ObsoleteAttribute"))
                return RuleResult.DoesNotApply;

            // check method signature (parameters, return value)
            if (method.HasParameters)
                CheckParameters (method);

            CheckReturnType (method);

            // then check what the IL calls/access
            if (method.HasBody) {
                MethodBody body = method.Body;
                if (body.HasVariables)
                    CheckVariables (method);

                foreach (Instruction ins in body.Instructions) {
                    switch (ins.OpCode.Code) {
                    case Code.Newarr:
                    case Code.Newobj:
                    case Code.Call:
                    case Code.Callvirt:
                        CheckMethodCall (method, ins, (ins.Operand as MethodReference));
                        break;
                    case Code.Initobj:
                        CheckTypeCreation (method, ins, (ins.Operand as TypeReference));
                        break;
                    case Code.Ldfld:
                    case Code.Ldflda:
                    case Code.Ldsfld:
                    case Code.Ldsflda:
                    case Code.Stfld:
                    case Code.Stsfld:
                        CheckFieldAccess (method, ins, (ins.Operand as FieldReference));
                        break;
                    }
                }
            }

            return Runner.CurrentRuleResult;
        }
开发者ID:alfredodev,项目名称:mono-tools,代码行数:55,代码来源:RemoveDependenceOnObsoleteCodeRule.cs

示例3: CheckMethod

		public RuleResult CheckMethod (MethodDefinition method)
		{
			if (!method.HasAttribute (SUCS))
				return RuleResult.Success;

			Runner.Report (method, Severity.Audit, Confidence.Total);
			return RuleResult.Failure;
		}
开发者ID:boothead,项目名称:mono-tools,代码行数:8,代码来源:ReviewSuppressUnmanagedCodeSecurityUsageRule.cs

示例4: CheckMethod

        public RuleResult CheckMethod(MethodDefinition method)
        {
            // catch abstract, pinvoke and icalls - where rule does not apply
            if (!method.HasBody)
                return RuleResult.DoesNotApply;

            // skip methods without parameters
            if (!method.HasParameters)
                return RuleResult.DoesNotApply;

            // rule doesn't apply to virtual, overrides or generated code
            // doesn't apply to code referenced by delegates (note: more complex check moved last)
            if (method.IsVirtual || method.HasOverrides || method.IsGeneratedCode ())
                return RuleResult.DoesNotApply;

            // Also EventArgs parameters are often required in method signatures,
            // but often not required. Reduce "false positives"(*) for GUI apps
            // (*) it's more a "don't report things outside developer's control"
            if (method.IsEventCallback () || IsReferencedByDelegate (method))
                return RuleResult.DoesNotApply;

            // methods with [Conditional] can be empty (not using any parameter) IL-wise but not source-wise, ignore them
            if (method.HasAttribute ("System.Diagnostics", "ConditionalAttribute"))
                return RuleResult.DoesNotApply;

            // rule applies

            // we limit ourselves to the first 64 parameters (so we can use a bitmask)
            IList<ParameterDefinition> pdc = method.Parameters;
            int pcount = pdc.Count;
            if (pcount > 64)
                pcount = 64;
            ulong mask = 0;

            // scan IL to see which parameter is being used
            foreach (Instruction ins in method.Body.Instructions) {
                ParameterDefinition parameter = ins.GetParameter (method);
                if (parameter == null)
                    continue;
                mask |= ((ulong)1 << parameter.Index);
            }

            // quick out based on value - i.e. every parameter is being used
            int shift = 64 - pcount;
            if ((mask << shift) == (UInt64.MaxValue << shift))
                return RuleResult.Success;

            for (int i = 0; i < pcount; i++) {
                if ((mask & ((ulong) 1 << i)) == 0) {
                    ParameterDefinition parameter = pdc [i];
                    string text = String.Format (CultureInfo.InvariantCulture,
                        "Parameter '{0}' of type '{1}' is never used in the method.",
                        parameter.Name, parameter.ParameterType);
                    Runner.Report (parameter, Severity.Medium, Confidence.Normal, text);
                }
            }

            return Runner.CurrentRuleResult;
        }
开发者ID:alfredodev,项目名称:mono-tools,代码行数:59,代码来源:AvoidUnusedParametersRule.cs

示例5: IsExtension

		// rock-ify
		// not 100% bullet-proof against buggy compilers (or IL)
		static bool IsExtension (MethodDefinition method)
		{
			if (!method.IsStatic)
				return false;

			if (!method.HasParameters)
				return false;

			return method.HasAttribute ("System.Runtime.CompilerServices.ExtensionAttribute");
		}
开发者ID:nolanlum,项目名称:mono-tools,代码行数:12,代码来源:AvoidExtensionMethodOnSystemObjectRule.cs

示例6: CheckMethod

		public RuleResult CheckMethod (MethodDefinition method)
		{
			if (!method.HasAttribute ("System.Security", "SuppressUnmanagedCodeSecurityAttribute"))
				return RuleResult.Success;

			Runner.Report (method, Severity.Audit, Confidence.Total);
			return RuleResult.Failure;
		}
开发者ID:FreeBSD-DotNet,项目名称:mono-tools,代码行数:8,代码来源:ReviewSuppressUnmanagedCodeSecurityUsageRule.cs


注:本文中的Mono.Cecil.MethodDefinition.HasAttribute方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。