Mono.CSharp.Method.ApplyAttributeBuilder C# (CSharp) Method

ApplyAttributeBuilder() public method

public ApplyAttributeBuilder ( Attribute a, MethodSpec ctor, byte cdata, Mono.CSharp.PredefinedAttributes pa ) : void
a Attribute
ctor MethodSpec
cdata byte
pa Mono.CSharp.PredefinedAttributes
return void
        public override void ApplyAttributeBuilder(Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa)
        {
            if (a.Type == pa.Conditional) {
                if (IsExplicitImpl) {
                    Error_ConditionalAttributeIsNotValid ();
                    return;
                }

                if ((ModFlags & Modifiers.OVERRIDE) != 0) {
                    Report.Error (243, Location, "Conditional not valid on `{0}' because it is an override method", GetSignatureForError ());
                    return;
                }

                if (ReturnType != TypeManager.void_type) {
                    Report.Error (578, Location, "Conditional not valid on `{0}' because its return type is not void", GetSignatureForError ());
                    return;
                }

                if (IsInterface) {
                    Report.Error (582, Location, "Conditional not valid on interface members");
                    return;
                }

                if (MethodData.implementing != null) {
                    Report.SymbolRelatedToPreviousError (MethodData.implementing.DeclaringType);
                    Report.Error (629, Location, "Conditional member `{0}' cannot implement interface member `{1}'",
                        GetSignatureForError (), TypeManager.CSharpSignature (MethodData.implementing));
                    return;
                }

                for (int i = 0; i < parameters.Count; ++i) {
                    if (parameters.FixedParameters [i].ModFlags == Parameter.Modifier.OUT) {
                        Report.Error (685, Location, "Conditional method `{0}' cannot have an out parameter", GetSignatureForError ());
                        return;
                    }
                }
            }

            if (a.Type == pa.Extension) {
                a.Error_MisusedExtensionAttribute ();
                return;
            }

            base.ApplyAttributeBuilder (a, ctor, cdata, pa);
        }