CodeGenFile generateExtension(string contextName, ComponentData data)
        {
            var memberData    = data.GetMemberData();
            var componentName = data.GetFullTypeName().ToComponentName(ignoreNamespaces);
            var template      = memberData.Length == 0
                                      ? FLAG_COMPONENT_TEMPLATE
                                      : STANDARD_COMPONENT_TEMPLATE;

            var fileContent = template
                              .Replace("${ContextName}", contextName)
                              .Replace("${ComponentType}", data.GetFullTypeName())
                              .Replace("${ComponentName}", componentName)
                              .Replace("${componentName}", componentName.LowercaseFirst())
                              .Replace("${prefixedComponentName}", data.GetUniqueComponentPrefix().LowercaseFirst() + componentName)
                              .Replace("${memberArgs}", getMemberArgs(memberData))
                              .Replace("${methodArgs}", getMethodArgs(memberData));

            return(new CodeGenFile(
                       contextName + Path.DirectorySeparatorChar +
                       "Components" + Path.DirectorySeparatorChar +
                       contextName + componentName.AddComponentSuffix() + ".cs",
                       fileContent,
                       GetType().FullName
                       ));
        }