Ejemplo n.º 1
0
 /// <summary>
 /// データクリア
 /// </summary>
 public void Clear()
 {
     SourceCode = string.Empty;
     UnknownReferences.Clear();
     ImportPath = string.Empty;
     ClassNames.Clear();
 }
Ejemplo n.º 2
0
 /// <summary>
 /// インスタンスフィールドのクリア
 /// </summary>
 public void Clear()
 {
     InstanceMembers.Clear();
     UnknownReferences.Clear();
     ClassNames.Clear();
     ProcessClassName = string.Empty;
 }
Ejemplo n.º 3
0
        /// <summary>
        /// ジェネリッククラスの変換
        /// </summary>
        /// <param name="token">対象</param>
        /// <returns>変換結果</returns>
        private string GetGenericClass(SyntaxToken token)
        {
            if (!UnknownReferences.ContainsKey(token.ValueText))
            {
                UnknownReferences.Add(token.ValueText, null);
            }

            return(token.ValueText);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// C#の型をTypeScriptの型に変換する
        /// </summary>
        /// <param name="CSSyntax">C#の型情報</param>
        /// <returns>TypeScriptの型に変換した文字列</returns>
        public string GetTypeScriptType(TypeSyntax CSSyntax)
        {
            var result = CSSyntax.ToString();

            switch (CSSyntax)
            {
            case NullableTypeSyntax ns:
                result = $"{GetTypeScriptType(ns.ElementType)} | null";
                break;

            case GenericNameSyntax gs:
                // パラメータ設定
                var argsText = gs.TypeArgumentList.Arguments.Select(arg => GetTypeScriptType(arg));
                result = $"{GetGenericClass(gs.Identifier)}<{string.Join(", ", argsText)}>";
                break;

            case PredefinedTypeSyntax ps:
                switch (ps.ToString())
                {
                case "int":
                case "float":
                case "double":
                case "decimal":
                    result = "number";
                    break;

                case "bool":
                    result = "boolean";
                    break;
                }
                break;

            case IdentifierNameSyntax ins:
                switch (ins.ToString())
                {
                case "DateTime":
                    result = "Date";
                    break;

                default:
                    // 置換えクラス名の確認
                    var renameClassName  = result;
                    var renameClassNames = new List <string>()
                    {
                        result,
                        $"{ProcessClassName}.{result}"
                    };
                    foreach (var className in renameClassNames)
                    {
                        if (RenameClasseNames.ContainsKey(className))
                        {
                            return(RenameClasseNames[className]);
                        }
                    }

                    result = result.Replace(".", "_", StringComparison.CurrentCulture);
                    if (!UnknownReferences.ContainsKey(ins.ToString()))
                    {
                        UnknownReferences.Add(ins.ToString(), null);
                    }
                    break;
                }
                break;

            default:
                result = result.Replace(".", "_", StringComparison.CurrentCulture);
                if (!UnknownReferences.ContainsKey(result))
                {
                    UnknownReferences.Add(result, null);
                }

                if (RenameClasseNames.ContainsKey(result))
                {
                    return(RenameClasseNames[result]);
                }

                break;
            }
            return(result);
        }