Esempio n. 1
0
        public static string GetTypeShortName(
            this INamedTypeSymbol typeSymbol,
            Func <INamespaceSymbol, string, string> funcOfNamespace = null,
            Func <INamedTypeSymbol, string> funcOfTypeName          = null,
            LuaSyntaxNodeTransform transfor = null)
        {
            StringBuilder sb = new StringBuilder();

            FillExternalTypeName(sb, typeSymbol, funcOfNamespace, funcOfTypeName, transfor);
            string typeName = funcOfTypeName?.Invoke(typeSymbol);

            if (typeName != null)
            {
                sb.Append(typeName);
            }
            else
            {
                typeName = typeSymbol.Name;
                sb.Append(typeName);
                int typeParametersCount = typeSymbol.TypeParameters.Length;
                if (typeParametersCount > 0)
                {
                    sb.Append('_');
                    sb.Append(typeParametersCount);
                }
            }
            return(sb.ToString());
        }
Esempio n. 2
0
        private static void FillExternalTypeName(
            StringBuilder sb,
            INamedTypeSymbol typeSymbol,
            Func <INamespaceSymbol, string, string> funcOfNamespace,
            Func <INamedTypeSymbol, string> funcOfTypeName,
            LuaSyntaxNodeTransform transfor = null)
        {
            var externalType = typeSymbol.ContainingType;

            if (externalType != null)
            {
                if (transfor != null && transfor.IsNoneGenericTypeCounter && !externalType.IsGenericType && !typeSymbol.IsGenericType)
                {
                    var curTypeDeclaration = transfor.CurTypeDeclaration;
                    if (curTypeDeclaration != null && curTypeDeclaration.CheckTypeName(externalType, out var classIdentifier))
                    {
                        sb.Append(classIdentifier.ValueText);
                        sb.Append('.');
                        return;
                    }
                }

                FillExternalTypeName(sb, externalType, funcOfNamespace, funcOfTypeName);
                string typeName = funcOfTypeName?.Invoke(typeSymbol) ?? externalType.Name;
                sb.Append(typeName);
                int typeParametersCount = externalType.TypeParameters.Length;
                if (typeParametersCount > 0)
                {
                    sb.Append('_');
                    sb.Append(typeParametersCount);
                }
                sb.Append('.');
            }
            else
            {
                FillNamespaceName(sb, typeSymbol, funcOfNamespace);
            }
        }