Skip to content

Commit 67e7880

Browse files
committed
log the exceptions occured in generator
1 parent 4f168c1 commit 67e7880

File tree

1 file changed

+28
-1
lines changed
  • src/Smdn.Reflection.ReverseGenerating.ListApi.Core/Smdn.Reflection.ReverseGenerating.ListApi

1 file changed

+28
-1
lines changed

src/Smdn.Reflection.ReverseGenerating.ListApi.Core/Smdn.Reflection.ReverseGenerating.ListApi/ApiListWriter.cs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,17 @@
1414
namespace Smdn.Reflection.ReverseGenerating.ListApi;
1515

1616
public class ApiListWriter {
17+
private static readonly Action<ILogger, string?, Exception?> loggerMessageGeneratorErrorOnType = LoggerMessage.Define<string?>(
18+
LogLevel.Error,
19+
new(1, nameof(loggerMessageGeneratorErrorOnType)),
20+
"generator error on type '{TypeFullName}'"
21+
);
22+
private static readonly Action<ILogger, string?, string, Exception?> loggerMessageGeneratorErrorOnMember = LoggerMessage.Define<string?, string>(
23+
LogLevel.Error,
24+
new(1, nameof(loggerMessageGeneratorErrorOnMember)),
25+
"generator error on member '{TypeFullName}.{MemberName}'"
26+
);
27+
1728
public TextWriter BaseWriter { get; }
1829

1930
private readonly Assembly assembly;
@@ -305,7 +316,14 @@ options.TypeDeclaration.NullabilityInfoContext is null &&
305316
)
306317
);
307318
}
319+
catch (MemberDeclarationException) {
320+
// just rethrow since the log has been output already
321+
throw;
322+
}
308323
catch (Exception ex) {
324+
if (logger is not null)
325+
loggerMessageGeneratorErrorOnType(logger, type.FullName, ex);
326+
309327
throw new InvalidOperationException($"generator error on type '{type.FullName}'", ex);
310328
}
311329

@@ -406,6 +424,12 @@ assemblyNameOfTypeForwardedFrom is not null &&
406424
return ret.ToString();
407425
}
408426

427+
private sealed class MemberDeclarationException : Exception {
428+
public MemberDeclarationException(string? message, Exception? innerException)
429+
: base(message, innerException)
430+
{ }
431+
}
432+
409433
private static string GenerateTypeContentDeclarations(
410434
int nestLevel,
411435
Assembly assm,
@@ -468,7 +492,10 @@ private static string GenerateTypeContentDeclarations(
468492
declaration = Generator.GenerateMemberDeclaration(member, referencingNamespaces, options);
469493
}
470494
catch (Exception ex) {
471-
throw new InvalidOperationException($"generator error on member '{t.FullName}.{member.Name}'", ex);
495+
if (logger is not null)
496+
loggerMessageGeneratorErrorOnMember(logger, t.FullName, member.Name, ex);
497+
498+
throw new MemberDeclarationException($"generator error on member '{t.FullName}.{member.Name}'", ex);
472499
}
473500

474501
if (declaration == null)

0 commit comments

Comments
 (0)