public static CodegenExpression Codegen(
            SelectExprProcessorTypableMapForge forge,
            CodegenMethodScope codegenMethodScope,
            ExprForgeCodegenSymbol exprSymbol,
            CodegenClassScope codegenClassScope)
        {
            CodegenExpression mapType = codegenClassScope.AddDefaultFieldUnshared(
                true,
                typeof(EventType),
                EventTypeUtility.ResolveTypeCodegen(forge.MapType, EPStatementInitServicesConstants.REF));
            CodegenExpression beanFactory =
                codegenClassScope.AddOrGetDefaultFieldSharable(EventBeanTypedEventFactoryCodegenField.INSTANCE);

            CodegenMethod methodNode = codegenMethodScope.MakeChild(
                typeof(EventBean),
                typeof(SelectExprProcessorTypableMapEval),
                codegenClassScope);

            methodNode.Block
                .DeclareVar<IDictionary<string, object>>(
                    "values",
                    forge.innerForge.EvaluateCodegen(
                        typeof(IDictionary<string, object>),
                        methodNode,
                        exprSymbol,
                        codegenClassScope))
                .DeclareVarNoInit(typeof(IDictionary<string, object>), "map")
                .IfRefNull("values")
                .AssignRef("values", StaticMethod(typeof(Collections), "GetEmptyMap", new[] { typeof(string), typeof(object) }))
                .BlockEnd()
                .MethodReturn(ExprDotMethod(beanFactory, "AdapterForTypedMap", Ref("values"), mapType));
            return LocalMethod(methodNode);
        }
 public SelectExprProcessorTypableMapEval(SelectExprProcessorTypableMapForge forge)
 {
     this.forge = forge;
 }