Mono.CSharp.PropertyBase.DefineBuilders C# (CSharp) Method

DefineBuilders() protected method

protected DefineBuilders ( MemberKind kind, ParametersCompiled parameters ) : void
kind MemberKind
parameters ParametersCompiled
return void
        protected void DefineBuilders(MemberKind kind, ParametersCompiled parameters)
        {
            PropertyBuilder = Parent.TypeBuilder.DefineProperty (
                GetFullName (MemberName), PropertyAttributes.None,
            #if !BOOTSTRAP_BASIC	// Requires trunk version mscorlib
                //IsStatic ? 0 : CallingConventions.HasThis,
            #endif
                MemberType.GetMetaInfo (), null, null,
                parameters.GetMetaInfo (), null, null);

            PropertySpec spec;
            if (kind == MemberKind.Indexer)
                spec = new IndexerSpec (Parent.Definition, this, MemberType, parameters, PropertyBuilder, ModFlags);
            else
                spec = new PropertySpec (kind, Parent.Definition, this, MemberType, PropertyBuilder, ModFlags);

            if (Get != null) {
                spec.Get = Get.Spec;

                var method = Get.Spec.GetMetaInfo () as MethodBuilder;
                if (method != null) {
                    PropertyBuilder.SetGetMethod (method);
                    Parent.MemberCache.AddMember (this, method.Name, Get.Spec);
                }
            } else {
                CheckMissingAccessor (kind, parameters, true);
            }

            if (Set != null) {
                spec.Set = Set.Spec;

                var method = Set.Spec.GetMetaInfo () as MethodBuilder;
                if (method != null) {
                    PropertyBuilder.SetSetMethod (method);
                    Parent.MemberCache.AddMember (this, method.Name, Set.Spec);
                }
            } else {
                CheckMissingAccessor (kind, parameters, false);
            }

            Parent.MemberCache.AddMember (this, PropertyBuilder.Name, spec);
        }