diff --git a/Havit.Blazor.Documentation/Services/ApiRenderer.cs b/Havit.Blazor.Documentation/Services/ApiRenderer.cs index 804e2e0e..13ffc96c 100644 --- a/Havit.Blazor.Documentation/Services/ApiRenderer.cs +++ b/Havit.Blazor.Documentation/Services/ApiRenderer.cs @@ -28,8 +28,11 @@ private static readonly (string type, string name)[] typeSimplifications = public static string FormatType(Type type, bool asLink = true) { - string typeName = type.ToString(); // e.g. "System.Collections.Generic.List`1[System.String]" + return FormatType(type.ToString(), asLink); // e.g. "System.Collections.Generic.List`1[System.String]" + } + public static string FormatType(string typeName, bool asLink = true) + { typeName = Regex.Replace(typeName, @"[a-zA-Z]*\.", ""); // Remove namespaces // simplify known types @@ -159,14 +162,13 @@ public static string GenerateLinkForInternalType(string typeName, bool checkForI typeNameForOwnDocumentation = Regex.Replace(typeNameForOwnDocumentation, "<[a-zA-Z]+>", capture => $"{capture.Value[1..^1]}"); } - if (!checkForInternal) + if (!checkForInternal || ApiTypeHelper.IsLibraryType(typeNameForOwnDocumentation)) { return GenerateLinkTagForInternalType(typeName, typeNameForOwnDocumentation, linkText, generic); } - - if (ApiTypeHelper.IsLibraryType(typeNameForOwnDocumentation)) + else if (ApiTypeHelper.GetType(typeName, true) is not null) { - return GenerateLinkTagForInternalType(typeName, typeNameForOwnDocumentation, linkText, generic); + return GenerateLinkTagForInternalType(typeName, typeName, linkText, false); } return null; diff --git a/Havit.Blazor.Documentation/Services/ComponentApiDocModelBuilder.cs b/Havit.Blazor.Documentation/Services/ComponentApiDocModelBuilder.cs index bd810cc8..f0b22145 100644 --- a/Havit.Blazor.Documentation/Services/ComponentApiDocModelBuilder.cs +++ b/Havit.Blazor.Documentation/Services/ComponentApiDocModelBuilder.cs @@ -102,7 +102,23 @@ private void AdjustDelegate(ComponentApiDocModel model) Contract.Requires(model.IsDelegate); MethodInfo invokeMethodInfo = model.Type.GetMethod("Invoke"); - model.DelegateSignature = $"{ApiRenderer.FormatType(invokeMethodInfo.ReturnType, asLink: false)} {ApiRenderer.FormatType(model.Type, asLink: false)}("; + string returnType = string.Empty; + + var genericTypeArgument = invokeMethodInfo.ReturnType.GetGenericArguments().FirstOrDefault(); + + if (genericTypeArgument is not null) + { + string genericTypeArgumentName = genericTypeArgument.ToString(); + Console.WriteLine("genericTypeArgument.ToString(): " + genericTypeArgumentName); + + returnType = $"Task<{ApiRenderer.FormatType(genericTypeArgumentName, true)}> "; + } + else + { + returnType = ApiRenderer.FormatType(invokeMethodInfo.ReturnType, true); + } + + model.DelegateSignature = $"{returnType} {ApiRenderer.FormatType(model.Type, false)} ("; foreach (ParameterInfo param in invokeMethodInfo.GetParameters()) { model.DelegateSignature += $"{ApiRenderer.FormatType(param.ParameterType)} {param.Name}";