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()); }
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); } }