コード例 #1
0
        private void ProcessMembers(CodeGeneratorProxy codeGenerator, MixinLevelCodeGeneratorPipelineState manager)
        {
            var proxyMemberHelper =
                new CodeGeneratorProxyMemberHelper(
                    codeGenerator,
                    manager.CommonState.Context.TypeResolver.Compilation);

            proxyMemberHelper.CreateMembers(
                members:
                manager.MixinGenerationPlan.ProtectedWrapperPlan.Members,
                generateMemberModifier:
                m => "public new " + (m.Member.IsStatic ? " static" : ""),
                baseObjectIdentifierFunc:
                m =>
                (m.Member.IsStatic)
                        ? m.MixinAttribute.Mixin.GetOriginalFullNameWithGlobal()
                        : "base");
        }
        private void ProcessMembers(ICodeGeneratorProxy wrapperClass, pMixinGeneratorPipelineState manager)
        {
            var proxyMemberHelper = new CodeGeneratorProxyMemberHelper(wrapperClass,
                                                                       manager.BaseState.Context.TypeResolver.Compilation);

            proxyMemberHelper.CreateMembers(
                manager.CurrentMixinMembers.GetUnimplementedAbstractMembers(),
                generateMemberModifier: member => member.IsPublic ? "public override" : "protected override",
                generateReturnTypeFunc: member => member.ReturnType.GetOriginalFullNameWithGlobal(),
                baseObjectIdentifierFunc: member => RequirementsVariable,
                baseObjectMemberNameFunc: member => GenerateMixinImplementationRequirementsInterface.GetAbstractMemberImplementationName(member));


            //Create public wrappers for the protected methods
            proxyMemberHelper.CreateMembers(
                manager.CurrentMixinMembers.GetUnimplementedAbstractMembers().Where(m => m.IsProtected),
                generateMemberModifier: member => "public",
                generateReturnTypeFunc: member => member.ReturnType.GetOriginalFullNameWithGlobal(),
                generateMemberNameFunc: member => GetProtectedMemberWrapperMemberName(member),
                baseObjectIdentifierFunc: member => "this");
        }
コード例 #3
0
        private void ProcessMembers(
            ICodeGeneratorProxy abstractWrapperCodeGenerator,
            MixinLevelCodeGeneratorPipelineState manager)
        {
            var proxyMemberHelper =
                new CodeGeneratorProxyMemberHelper(
                    abstractWrapperCodeGenerator,
                    manager.CommonState.Context.TypeResolver.Compilation);

            proxyMemberHelper.CreateMembers(
                manager.MixinGenerationPlan.AbstractWrapperPlan.Members,
                generateMemberModifier: member => member.Member.GetModifiersString(overrideModifiers: "override"),
                generateReturnTypeFunc: member => member.Member.ReturnType.GetOriginalFullNameWithGlobal(),
                baseObjectIdentifierFunc: member => RequirementsVariable,
                baseObjectMemberNameFunc: member => member.ImplementationDetails.RequirementsInterfaceImplementationName);


            //There is a special case for protected abstract method.
            //Abstract methods can not have their access modifier
            //changed directly, so it is necessary to create
            //a public wrapper method.

            var abstractMembersToCreateAPublicWrapper =
                manager.MixinGenerationPlan.AbstractWrapperPlan.Members
                .Where(m =>
                       !string.IsNullOrEmpty(
                           m.ImplementationDetails.ProtectedAbstractMemberPromotedToPublicMemberName));

            proxyMemberHelper.CreateMembers(
                abstractMembersToCreateAPublicWrapper,
                generateMemberModifier: m => "public",
                generateReturnTypeFunc: m => m.Member.ReturnType.GetOriginalFullNameWithGlobal(),
                generateMemberNameFunc: m => m.ImplementationDetails.ProtectedAbstractMemberPromotedToPublicMemberName,
                //proxy to the protected member created above
                baseObjectIdentifierFunc: m => "this");
        }