JScriptに対するCodeDom

昨日のEntityBuilderですが、JScriptGenerics対応していないので、そのままだとコンパイルできないコードを吐き出します。ということで、

unit.Namespaces[0].Imports.Add(new CodeNamespaceImport("System"));
foreach (CodeNamespace ns in unit.Namespaces)
    foreach (CodeTypeDeclaration t in ns.Types)
        foreach (CodeTypeMember m in t.Members)
            if (m is CodeMemberField)
            {
                // フィールドの型がジェネリックの場合、System.Objectにする
                CodeMemberField mf = m as CodeMemberField;
                if (mf.Type.TypeArguments.Count > 0)
                    mf.Type = new CodeTypeReference(typeof(object));
            }
            else if (m is CodeMemberProperty)
            {
                // プロパティの型がジェネリックの場合、System.Objectにする
                CodeMemberProperty mp = m as CodeMemberProperty;
                if (mp.Type.TypeArguments.Count > 0)
                    mp.Type = new CodeTypeReference(typeof(object));
            }                       
new JScriptCodeProvider().GenerateCodeFromCompileUnit(unit, stringwriter, null);           

今回はフィールドとプロパティで決めうちできるので、手抜き対応。(^^;