/// <summary>
        /// Create the code for the Initialize method after its call to base.Initialize
        /// </summary>
        private void GeneratePostInitCode(string nameValue, string typeValue, CodeMemberField field)
        {
            CodeStatementCollection          codeStatementCollection          = new CodeStatementCollection();
            CodeVariableDeclarationStatement codeVariableDeclarationStatement = new CodeVariableDeclarationStatement(typeof(bool).Ref(), nameValue + "ValueAcquired", false.Prim());
            CodeVariableReferenceExpression  codeVariableReferenceExpression  = codeVariableDeclarationStatement.Ref();
            CodeTypeReference typeReference    = new CodeTypeReference(typeValue, CodeTypeReferenceOptions.GlobalReference);
            CodeStatement     setValueAcquired = codeVariableReferenceExpression.Assign(true.Prim());

            codeStatementCollection.Add(codeVariableDeclarationStatement);
            GenerateSessionLookup(nameValue, field, codeStatementCollection, setValueAcquired, typeReference);
            if (hostSpecific)
            {
                GenerateHostResolveParameterValueLookup(nameValue, field, codeStatementCollection, codeVariableReferenceExpression, typeReference, setValueAcquired, typeValue);
            }
            GenerateCallContextLookup(nameValue, field, codeStatementCollection, codeVariableReferenceExpression, typeReference, typeValue);
            CodeGeneratorOptions standardOptions = StandardOptions;

            using (StringWriter writer = new StringWriter(postInitializationBuffer, CultureInfo.InvariantCulture))
            {
                foreach (CodeStatement item in codeStatementCollection)
                {
                    languageCodeDomProvider.GenerateCodeFromStatement(item, writer, standardOptions);
                }
            }
        }
        private static void GenerateCallContextLookup(string nameValue, CodeMemberField field, CodeStatementCollection statements, CodeVariableReferenceExpression valueAcquired, CodeTypeReference typeReference, string typeValue)
        {
            CodeVariableDeclarationStatement codeVariableDeclarationStatement = typeof(object).Decl("data", typeof(CallContext).Expr().Call("LogicalGetData", nameValue.Prim()));
            CodeVariableReferenceExpression  codeVariableReferenceExpression  = codeVariableDeclarationStatement.Ref();
            CodeAssignStatement    codeAssignStatement    = field.Ref().Assign(typeReference.Cast(codeVariableReferenceExpression));
            CodeConditionStatement codeConditionStatement = new CodeConditionStatement(codeVariableReferenceExpression.NotNull(), codeAssignStatement);

            statements.Add(new CodeConditionStatement(valueAcquired.VEquals(false.Prim()), codeVariableDeclarationStatement, codeConditionStatement));
        }
        private static void GenerateHostResolveParameterValueLookup(string nameValue, CodeMemberField field, CodeStatementCollection statements, CodeVariableReferenceExpression valueAcquired, CodeTypeReference typeReference, CodeStatement setValueAcquired, string typeValue)
        {
            CodePropertyReferenceExpression  callSite    = new CodeThisReferenceExpression().Prop("Host");
            CodeVariableDeclarationStatement declaration = new CodeVariableDeclarationStatement(typeof(string).Ref(), "parameterValue", callSite.Call("ResolveParameterValue", new CodeExpression[] { "Property".Prim(), "PropertyDirectiveProcessor".Prim(), nameValue.Prim() }));
            CodeVariableReferenceExpression  expression2 = declaration.Ref();
            CodeVariableDeclarationStatement statement2  = new CodeVariableDeclarationStatement(typeof(TypeConverter).Ref(), "tc", typeof(TypeDescriptor).Expr().Call("GetConverter", new CodeExpression[] { new CodeTypeOfExpression(typeReference) }));

            statements.Add(new CodeConditionStatement(valueAcquired.VEquals(false.Prim()), new CodeStatement[] { declaration, new CodeConditionStatement(typeof(string).Expr().Call("IsNullOrEmpty", new CodeExpression[] { expression2 }).VEquals(false.Prim()), new CodeStatement[] { statement2, new CodeConditionStatement(statement2.Ref().NotNull().And(statement2.Ref().Call("CanConvertFrom", new CodeExpression[] { new CodeTypeOfExpression(typeof(string).Ref()) })), new CodeStatement[] { field.Ref().Assign(new CodeCastExpression(typeReference, statement2.Ref().Call("ConvertFrom", new CodeExpression[] { expression2 }))), setValueAcquired }, new CodeStatement[] { GenerateReportTypeMismatch(nameValue, typeValue) }) }) }));
        }
        private static void GenerateCallContextLookup(string nameValue, CodeMemberField field, CodeStatementCollection statements, CodeVariableReferenceExpression valueAcquired, CodeTypeReference typeReference, string typeValue)
        {
            CodeVariableDeclarationStatement declaration = typeof(object).Decl("data", typeof(CallContext).Expr().Call("LogicalGetData", new CodeExpression[] { nameValue.Prim() }));
            CodeVariableReferenceExpression  expression  = declaration.Ref();
            CodeAssignStatement    statement2            = field.Ref().Assign(typeReference.Cast(expression));
            CodeConditionStatement statement3            = new CodeConditionStatement(expression.NotNull(), new CodeStatement[] { GenerateTypeMismatchCheck(expression, nameValue, typeReference, typeValue, new CodeStatement[] { statement2 }) });

            statements.Add(new CodeConditionStatement(valueAcquired.VEquals(false.Prim()), new CodeStatement[] { declaration, statement3 }));
        }