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"); }
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"); }